|  | 
| 1 | 1 | """symfem: Symbolic Finite Element Method Definitions.""" | 
| 2 | 2 | import os as _os | 
| 3 |  | -from . import simplex as _simplex | 
| 4 |  | -from . import tp as _tp | 
| 5 |  | -from . import references as _references | 
| 6 |  | -from .finite_element import FiniteElement as _FiniteElement | 
|  | 3 | +import importlib as _il | 
|  | 4 | +from .core import references as _references | 
|  | 5 | +from .core.finite_element import FiniteElement as _FiniteElement | 
| 7 | 6 | 
 | 
| 8 | 7 | _folder = _os.path.dirname(_os.path.realpath(__file__)) | 
| 9 | 8 | 
 | 
|  | 
| 19 | 18 | 
 | 
| 20 | 19 | _elementlist = {} | 
| 21 | 20 | 
 | 
| 22 |  | -for _cell_class, _module in [("simplex", _simplex), ("tp", _tp)]: | 
| 23 |  | -    _elementlist[_cell_class] = {} | 
| 24 |  | -    for _class_name in dir(_module): | 
| 25 |  | -        _element = getattr(_module, _class_name) | 
| 26 |  | -        if ( | 
| 27 |  | -            isinstance(_element, type) | 
| 28 |  | -            and issubclass(_element, _FiniteElement) | 
| 29 |  | -            and _element != _FiniteElement | 
| 30 |  | -        ): | 
| 31 |  | -            for _n in _element.names: | 
| 32 |  | -                _elementlist[_cell_class][_n] = _element | 
|  | 21 | + | 
|  | 22 | +for _file in _os.listdir(_os.path.join(_folder, "elements")): | 
|  | 23 | +    if _file.endswith(".py") and "__init__" not in _file: | 
|  | 24 | +        _fname = _file[:-3] | 
|  | 25 | +        _module = _il.import_module(f"symfem.elements.{_fname}") | 
|  | 26 | + | 
|  | 27 | +        for _class_name in dir(_module): | 
|  | 28 | +            _element = getattr(_module, _class_name) | 
|  | 29 | +            if ( | 
|  | 30 | +                isinstance(_element, type) | 
|  | 31 | +                and issubclass(_element, _FiniteElement) | 
|  | 32 | +                and _element != _FiniteElement | 
|  | 33 | +            ): | 
|  | 34 | +                for _n in _element.names: | 
|  | 35 | +                    if _n in _elementlist: | 
|  | 36 | +                        assert _element == _elementlist[_n] | 
|  | 37 | +                    _elementlist[_n] = _element | 
| 33 | 38 | 
 | 
| 34 | 39 | 
 | 
| 35 | 40 | def create_reference(cell_type): | 
| @@ -70,12 +75,7 @@ def create_element(cell_type, element_type, order): | 
| 70 | 75 |     """ | 
| 71 | 76 |     reference = create_reference(cell_type) | 
| 72 | 77 | 
 | 
| 73 |  | -    if reference.simplex: | 
| 74 |  | -        if element_type in _elementlist["simplex"]: | 
| 75 |  | -            return _elementlist["simplex"][element_type](reference, order) | 
| 76 |  | - | 
| 77 |  | -    if reference.tp: | 
| 78 |  | -        if element_type in _elementlist["tp"]: | 
| 79 |  | -            return _elementlist["tp"][element_type](reference, order) | 
|  | 78 | +    if element_type in _elementlist: | 
|  | 79 | +        return _elementlist[element_type](reference, order) | 
| 80 | 80 | 
 | 
| 81 | 81 |     raise ValueError(f"Unsupported element type: {element_type}") | 
0 commit comments