"""Tools for calculating coupling coefficients and modal scattering matrices of
different types."""
from .bayerhelms import make_bayerhelms_matrix
# TODO (sjr) Create functions corresponding to different scattering
#            matrix types as they are implemented in the code (i.e.
#            things like aperture and map knm matrix computations)
[docs]def make_scatter_matrix(mtype, *args, **kwargs):
    """Constructs and computes a coupling coefficient scattering matrix of the specified
    type (via `mtype`).
    Parameters
    ----------
    mtype : str
        Type of scattering matrix to compute.
        The valid options are:
          - "bayerhelms" --- computes a Bayer-Helms scattering matrix,
                             see :func:`.make_bayerhelms_matrix`.
    *args : positional arguments
        The positional arguments to pass to the relevant scatter matrix function.
    **kwargs : keyword arguments
        The keyword arguments to pass to the relevant scatter matrix function.
    Returns
    -------
    kmat : :class:`.KnmMatrix`
        The resulting scattering matrix as a :class:`.KnmMatrix` object.
    Examples
    --------
    See :ref:`arbitrary_scatter_matrices`.
    """
    mtype_to_func = {"bayerhelms": make_bayerhelms_matrix}
    func = mtype_to_func.get(mtype.casefold())
    if func is None:
        raise ValueError(f"Unrecognised / not-yet-implemented mtype argument: {mtype}")
    return func(*args, **kwargs)