"""Examples stored in files."""

import os
from glob import glob

from scipy.io import loadmat

base_dir = os.path.split(__file__)[0]
example_dir = os.path.join(base_dir, 'example_data')
example_files = glob(os.path.join(example_dir, '*.mat'))
example_names = sorted(os.path.split(name)[1][:-4] for name in example_files)


def load_example(name):
    """Load an example problem by name.

    Parameters
    ----------
    name : string (e.g. 'airfoil')
        Name of the example to load

    Notes
    -----
    Each example is stored in a dictionary with the following keys:
        - 'A'        : sparse matrix
        - 'B'        : near-nullspace candidates
        - 'vertices' : dense array of nodal coordinates
        - 'elements' : dense array of element indices

    Current example names are:%s

    Examples
    --------
    >>> from pyamg.gallery import load_example
    >>> ex = load_example('knot')

    """
    if name not in example_names:
        raise ValueError(f'No example with name {name}')

    return loadmat(os.path.join(example_dir, name + '.mat'), struct_as_record=True)


# insert the example names into the docstring
load_example.__doc__ %= ('\n' + ' ' * 8).join([''] + example_names)
