-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Problem Description
Importing modules from SymPDE is slow and should be speeded up.
One of the reasons is that (almost) all of our __init__.py files import everything from our subpackages and modules. For example, file sympde/__init__.py reads
from .version import __version__
from .old_sympy_utilities import with_metaclass
from .core import *
from .topology import *
from .exterior import *
from .printing import *
from .utilities import *and file sympde/topology/__init__.py reads
from .basic import *
from .derivatives import *
from .datatype import *
from .domain import *
from .mapping import *
from .measure import *
from .space import *
from .analytical_mapping import *
from .callable_mapping import *This approach was meant to allow the user to import the relevant objects from the main sympde package without the need to know their exact location. The side effect is a very slow import time.
Suggested Solution
Step 1: Create sympde/api/__init__.py
Create an api subpackage which allows direct import of the relevant object, e.g.
from sympde.api import Cube, Mapping, Constant
from sympde.api import ScalarFunctionSpace, VectorFunctionSpace, elements_of
from sympde.api import BilinearForm, LinearForm, Norm
from sympde.api import ...The user could even use from sympde.api import * safely, if they wanted to.
The folder sympde/api/ should contain one single file, __init__.py, which would import the relevant objects from their precise location using the full path:
from sympde.topology.domain import Domain, NCube, Line, Square, Cube, NormalVector
from sympde.topology.mapping import Mapping
from sympde.topology.space import element_of, elements_of, Derham, ScalarFunctionSpace, VectorFunctionSpace
...
from sympde.core.basic import Constant
...
from sympde.expr.expr import BilinearForm, LinearForm, Norm
...Step 2: Clean up all __init__.py files
With the exception of sympde/api/__init__.py above, every other __init__.py file should be totally empty. This will necessarily break the PSYDAC library, therefore we will have to release a new version of SymPDE on PyPI.