Source code for fluidsim_core.loader

"""Utilities for loading and importing solvers

.. autofunction:: available_solvers
.. autofunction:: import_module_solver
.. autofunction:: import_cls_simul

"""

import sys

if sys.version_info[:2] < (3, 10):
    from importlib_metadata import entry_points
else:
    from importlib.metadata import entry_points


[docs] def available_solvers(entrypoint_grp): """Returns a dictionary of all registered solver modules registered as an entrypoint_ group. Each entrypoint_ would be a key-value pair - a solver short name and the full import path of the solver module respectively. .. _entrypoint: https://packaging.python.org/guides/creating-and-discovering-plugins/#using-package-metadata Parameters ---------- entrypoint_grp: str The name of the entrypoint group listing the solvers. """ # noqa return entry_points(group=entrypoint_grp)
[docs] def import_module_solver(key, entrypoint_grp): """Import the solver module. Parameters ---------- key: str The short name of a solver. entrypoint_grp: str The name of the entrypoint group listing the solvers. """ solvers = available_solvers(entrypoint_grp) try: solver = solvers[key].load() except KeyError: raise ValueError( "You have to give a proper solver key. Given: " f"{key}. Expected one of: {list(solvers)}" ) else: return solver
[docs] def import_cls_simul(key, entrypoint_grp): """Import the Simul class of a solver. Parameters ---------- key: str The short name of a solver. entrypoint_grp: str The name of the entrypoint group listing the solvers. """ if key.startswith(entrypoint_grp + "."): key = key[len(entrypoint_grp) + 1 :] solver = import_module_solver(key, entrypoint_grp) return solver.Simul