From cee92f0c7d5d4d68a2cf80aaf4b33dd11b903643 Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 4 Dec 2022 06:26:24 -0500 Subject: [PATCH] builtin.system_init -> core.system_init Move system initialization module out of mathics.builtin. (Similar to PR #639) This also removes the need for Python to "partially initialize" mathics.builtin since it doesn't import one of its children --- .../symbolic_logic/gries_schneider/test_gs.py | 2 +- mathics/builtin/__init__.py | 2 +- mathics/core/definitions.py | 2 +- mathics/core/pymathics.py | 2 +- mathics/{builtin => core}/system_init.py | 22 +++++++++++-------- mathics/doc/common_doc.py | 6 +++-- mathics/docpipeline.py | 2 +- mathics/format/mathml.py | 2 +- mathics/main.py | 2 +- mathics/session.py | 2 +- .../test_duplicate_builtins.py | 2 +- 11 files changed, 26 insertions(+), 20 deletions(-) rename mathics/{builtin => core}/system_init.py (95%) diff --git a/examples/symbolic_logic/gries_schneider/test_gs.py b/examples/symbolic_logic/gries_schneider/test_gs.py index 44cc4ede6..9bd5b765a 100644 --- a/examples/symbolic_logic/gries_schneider/test_gs.py +++ b/examples/symbolic_logic/gries_schneider/test_gs.py @@ -2,10 +2,10 @@ # -*- coding: utf-8 -*- -from mathics.builtin.system_init import initialize_system from mathics.core.definitions import Definitions from mathics.core.evaluation import Evaluation from mathics.core.parser import MathicsSingleLineFeeder, parse +from mathics.core.system_init import initialize_system initialize_system() definitions = Definitions(add_builtin=True) diff --git a/mathics/builtin/__init__.py b/mathics/builtin/__init__.py index 69085d7f4..289e479ea 100755 --- a/mathics/builtin/__init__.py +++ b/mathics/builtin/__init__.py @@ -32,8 +32,8 @@ SympyObject, mathics_to_python, ) -from mathics.builtin.system_init import get_builtin_pyfiles, name_is_builtin_symbol from mathics.core.pattern import pattern_objects +from mathics.core.system_init import get_builtin_pyfiles, name_is_builtin_symbol from mathics.settings import ENABLE_FILES_MODULE __py_files__ = get_builtin_pyfiles() diff --git a/mathics/core/definitions.py b/mathics/core/definitions.py index e286ea81a..cda4eaca3 100644 --- a/mathics/core/definitions.py +++ b/mathics/core/definitions.py @@ -21,6 +21,7 @@ Symbol, strip_context, ) +from mathics.core.system_init import contribute from mathics.core.systemsymbols import SymbolGet from mathics_scanner.tokeniser import full_names_pattern @@ -130,7 +131,6 @@ def __init__( if add_builtin: from mathics.builtin import modules - from mathics.builtin.system_init import contribute from mathics.settings import ROOT_DIR loaded = False diff --git a/mathics/core/pymathics.py b/mathics/core/pymathics.py index aa499bc8e..293bfa69f 100644 --- a/mathics/core/pymathics.py +++ b/mathics/core/pymathics.py @@ -7,8 +7,8 @@ import sys -from mathics.builtin.system_init import builtins_by_module, name_is_builtin_symbol from mathics.core.evaluation import Evaluation +from mathics.core.system_init import builtins_by_module, name_is_builtin_symbol # Tis dict # Probably this do not belong here. diff --git a/mathics/builtin/system_init.py b/mathics/core/system_init.py similarity index 95% rename from mathics/builtin/system_init.py rename to mathics/core/system_init.py index ecebb4a5b..2d1b7afc1 100644 --- a/mathics/builtin/system_init.py +++ b/mathics/core/system_init.py @@ -7,14 +7,6 @@ import os.path as osp from typing import Optional -from mathics.builtin.base import ( - Builtin, - Operator, - PatternObject, - SympyObject, - mathics_to_python, -) - from mathics.core.pattern import pattern_objects builtins_precedence = {} @@ -31,6 +23,13 @@ def add_builtins(new_builtins): + from mathics.builtin.base import ( + Operator, + PatternObject, + SympyObject, + mathics_to_python, + ) + for var_name, builtin in new_builtins: name = builtin.get_name() if hasattr(builtin, "python_equivalent"): @@ -79,6 +78,7 @@ def contribute(definitions): def create_builtins_by_module(): from mathics.builtin import modules + from mathics.builtin.base import Builtin for module in modules: builtins_by_module[module.__name__] = [] @@ -109,7 +109,9 @@ def get_builtin_pyfiles() -> tuple: """ return tuple( osp.basename(f[0:-3]) - for f in glob.glob(osp.join(osp.dirname(__file__), "[a-z]*.py")) + for f in glob.glob( + osp.join(osp.dirname(__file__), "..", "builtin", "[a-z]*.py") + ) ) @@ -141,6 +143,8 @@ def name_is_builtin_symbol(module, name: str) -> Optional[type]: Return ``None`` if the name should not get added to definitions. """ + from mathics.builtin.base import Builtin + if name.startswith("_"): return None diff --git a/mathics/doc/common_doc.py b/mathics/doc/common_doc.py index ed86408a1..5431bfe24 100644 --- a/mathics/doc/common_doc.py +++ b/mathics/doc/common_doc.py @@ -34,11 +34,14 @@ from types import ModuleType from typing import Callable +import mathics.core as core from mathics import builtin from mathics import settings from mathics.builtin.base import check_requires_list from mathics.core.evaluation import Message, Print from mathics.core.util import IS_PYPY +from mathics.core.system_init import name_is_builtin_symbol + from mathics.doc.utils import slugify # These regular expressions pull out information from docstring or text in a file. @@ -830,7 +833,7 @@ def __init__(self, want_sorting=False): ( "Reference of Built-in Symbols", builtin.modules, - builtin.system_init.builtins_by_module, + core.system_init.builtins_by_module, True, ) ]: # nopep8 @@ -1088,7 +1091,6 @@ def __init__(self, module=None): # Load the dictionary of mathics symbols defined in the module self.symbols = {} from mathics.builtin.base import Builtin - from mathics.builtin.system_init import name_is_builtin_symbol print("loading symbols") for name in dir(self.pymathicsmodule): diff --git a/mathics/docpipeline.py b/mathics/docpipeline.py index df3fe029f..346f46f73 100644 --- a/mathics/docpipeline.py +++ b/mathics/docpipeline.py @@ -24,7 +24,7 @@ from mathics.core.definitions import Definitions from mathics.core.evaluation import Evaluation, Output from mathics.core.parser import MathicsSingleLineFeeder -from mathics.builtin.system_init import builtins_dict, initialize_system +from mathics.core.system_init import builtins_dict, initialize_system from mathics import version_string from mathics import settings diff --git a/mathics/format/mathml.py b/mathics/format/mathml.py index a95d8b773..dcf046b93 100644 --- a/mathics/format/mathml.py +++ b/mathics/format/mathml.py @@ -21,7 +21,6 @@ ) from mathics.builtin.box.graphics import GraphicsBox from mathics.builtin.box.graphics3d import Graphics3DBox -from mathics.builtin.system_init import display_operators_set as operators from mathics.core.atoms import String @@ -33,6 +32,7 @@ ) from mathics.core.parser import is_symbol_name from mathics.core.symbols import SymbolTrue +from mathics.core.system_init import display_operators_set as operators def encode_mathml(text: str) -> str: diff --git a/mathics/main.py b/mathics/main.py index e49f66e75..e5b6668e6 100755 --- a/mathics/main.py +++ b/mathics/main.py @@ -14,7 +14,6 @@ from mathics import settings from mathics import version_string, license_string, __version__ from mathics.builtin.trace import TraceBuiltins, traced_do_replace -from mathics.builtin.system_init import initialize_system from mathics.core.atoms import String from mathics.core.definitions import autoload_files, Definitions, Symbol from mathics.core.evaluation import Evaluation, Output @@ -24,6 +23,7 @@ from mathics.core.rules import BuiltinRule from mathics.core.symbols import strip_context, SymbolNull from mathics.core.streams import stream_manager +from mathics.core.system_init import initialize_system from mathics.timing import show_lru_cache_statistics diff --git a/mathics/session.py b/mathics/session.py index 35962c026..ca8c2e845 100644 --- a/mathics/session.py +++ b/mathics/session.py @@ -12,11 +12,11 @@ import os.path as osp from typing import Optional -from mathics.builtin.system_init import initialize_system from mathics.core.definitions import autoload_files from mathics.core.parser import parse, MathicsSingleLineFeeder from mathics.core.definitions import Definitions from mathics.core.evaluation import Evaluation +from mathics.core.system_init import initialize_system import mathics.settings diff --git a/test/consistency-and-style/test_duplicate_builtins.py b/test/consistency-and-style/test_duplicate_builtins.py index dcbb49bf0..de6faff9a 100644 --- a/test/consistency-and-style/test_duplicate_builtins.py +++ b/test/consistency-and-style/test_duplicate_builtins.py @@ -8,7 +8,7 @@ import os from mathics.builtin import modules from mathics.builtin.base import Builtin -from mathics.builtin.system_init import name_is_builtin_symbol +from mathics.core.system_init import name_is_builtin_symbol @pytest.mark.skipif(