diff --git a/docs/examples/full_build.rst b/docs/examples/full_build.rst index 5be0bed..3d57e3b 100644 --- a/docs/examples/full_build.rst +++ b/docs/examples/full_build.rst @@ -19,7 +19,7 @@ Level-2 build example import sbol2 - from buildcompiler.buildcompiler import BuildCompiler + from buildcompiler import BuildCompiler test_files = Path("tests/test_files") collection_docs = [] diff --git a/docs/examples/offline_lvl1.rst b/docs/examples/offline_lvl1.rst index 9c158f7..aca4654 100644 --- a/docs/examples/offline_lvl1.rst +++ b/docs/examples/offline_lvl1.rst @@ -21,9 +21,9 @@ Example import sbol2 - from buildcompiler.abstract_translator import extract_toplevel_definition + from buildcompiler import BuildCompiler from buildcompiler.adapters.pudu import write_assembly_pudu_input_json - from buildcompiler.buildcompiler import BuildCompiler + from buildcompiler.abstract_translator import extract_toplevel_definition test_files = Path("tests/test_files") collection_docs = [] diff --git a/docs/index.rst b/docs/index.rst index aada7b7..55351f0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,8 +8,9 @@ MoClo assembly, transformation, and plating. The repository currently exposes two useful layers: -* A legacy, artifact-producing compiler in :mod:`buildcompiler.buildcompiler` - that is used by the offline notebooks and PUDU examples. +* An artifact-producing compiler exported as :class:`buildcompiler.BuildCompiler` + that is used by the offline notebooks and PUDU examples. Its implementation + remains in :mod:`buildcompiler.buildcompiler` for compatibility. * A newer modular API in :mod:`buildcompiler.api`, :mod:`buildcompiler.stages`, :mod:`buildcompiler.planning`, and :mod:`buildcompiler.execution`. diff --git a/docs/quickstart.rst b/docs/quickstart.rst index 81782e3..de1dd9f 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -18,8 +18,8 @@ Load the local fixture collections: import sbol2 + from buildcompiler import BuildCompiler from buildcompiler.abstract_translator import extract_toplevel_definition - from buildcompiler.buildcompiler import BuildCompiler repo = Path.cwd() test_files = repo / "tests" / "test_files" diff --git a/notebooks/build_compiler_test.ipynb b/notebooks/build_compiler_test.ipynb index f1e5a8f..aab79cc 100644 --- a/notebooks/build_compiler_test.ipynb +++ b/notebooks/build_compiler_test.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import sbol2\n", - "from buildcompiler.buildcompiler import BuildCompiler\n", + "from buildcompiler import BuildCompiler\n", "from buildcompiler.abstract_translator import extract_toplevel_definition" ] }, diff --git a/notebooks/buildcompiler_offline_quickstart.ipynb b/notebooks/buildcompiler_offline_quickstart.ipynb index 59dc066..fd25a47 100644 --- a/notebooks/buildcompiler_offline_quickstart.ipynb +++ b/notebooks/buildcompiler_offline_quickstart.ipynb @@ -31,7 +31,8 @@ "\n", "from buildcompiler.api import BuildCompiler as OrchestratedBuildCompiler\n", "from buildcompiler.api import BuildOptions, domestication as run_domestication\n", - "from buildcompiler.buildcompiler import BuildCompiler, _extract_lvl2_TUs\n", + "from buildcompiler import BuildCompiler\n", + "from buildcompiler.buildcompiler import _extract_lvl2_TUs\n", "from buildcompiler.abstract_translator import extract_toplevel_definition\n", "from buildcompiler.adapters.pudu import domestication_artifacts_to_pudu_json, write_assembly_pudu_input_json\n", "from buildcompiler.domain import BuildRequest, BuildStage, DesignKind, IndexedBackbone, IndexedPlasmid, IndexedReagent, MaterialState, StageStatus\n", diff --git a/notebooks/buildcompiler_transformation_quickstart.ipynb b/notebooks/buildcompiler_transformation_quickstart.ipynb index e0467ef..3b57809 100644 --- a/notebooks/buildcompiler_transformation_quickstart.ipynb +++ b/notebooks/buildcompiler_transformation_quickstart.ipynb @@ -34,7 +34,7 @@ "\n", "from buildcompiler.abstract_translator import extract_toplevel_definition\n", "from buildcompiler.adapters.pudu import plating_to_pudu_json, transformations_to_pudu_json, write_assembly_pudu_input_json\n", - "from buildcompiler.buildcompiler import BuildCompiler\n", + "from buildcompiler import BuildCompiler\n", "\n", "\n", "def find_repo_root(start: Path) -> Path:\n", diff --git a/notebooks/comb_design.ipynb b/notebooks/comb_design.ipynb index dcc14c7..c0ff40f 100644 --- a/notebooks/comb_design.ipynb +++ b/notebooks/comb_design.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import sbol2\n", - "from buildcompiler.buildcompiler import BuildCompiler" + "from buildcompiler import BuildCompiler" ] }, { diff --git a/notebooks/full_build_quickstart.ipynb b/notebooks/full_build_quickstart.ipynb index efbc33b..d399747 100644 --- a/notebooks/full_build_quickstart.ipynb +++ b/notebooks/full_build_quickstart.ipynb @@ -33,7 +33,7 @@ "from pathlib import Path\n", "import sbol2\n", "\n", - "from buildcompiler.buildcompiler import BuildCompiler" + "from buildcompiler import BuildCompiler" ] }, { diff --git a/notebooks/full_build_workflow_examples.ipynb b/notebooks/full_build_workflow_examples.ipynb index f631556..ddc5313 100644 --- a/notebooks/full_build_workflow_examples.ipynb +++ b/notebooks/full_build_workflow_examples.ipynb @@ -35,7 +35,7 @@ "import sbol2\n", "\n", "from buildcompiler.abstract_translator import extract_toplevel_definition\n", - "from buildcompiler.buildcompiler import BuildCompiler\n", + "from buildcompiler import BuildCompiler\n", "from buildcompiler.constants import ENGINEERED_PLASMID" ] }, diff --git a/notebooks/impl_creation.ipynb b/notebooks/impl_creation.ipynb index 6105579..7837a70 100644 --- a/notebooks/impl_creation.ipynb +++ b/notebooks/impl_creation.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import sbol2\n", - "from buildcompiler.buildcompiler import BuildCompiler" + "from buildcompiler import BuildCompiler" ] }, { diff --git a/src/buildcompiler/__init__.py b/src/buildcompiler/__init__.py index 75527b4..1445176 100644 --- a/src/buildcompiler/__init__.py +++ b/src/buildcompiler/__init__.py @@ -1,12 +1,23 @@ """BuildCompiler public package exports.""" +from typing import Any + from .sbol2build import * # noqa: F403 from .api import ( - BuildCompiler, - BuildOptions, - assembly_lvl1, - assembly_lvl2, - domestication, - full_build, - transformation, + BuildOptions as BuildOptions, + assembly_lvl1 as assembly_lvl1, + assembly_lvl2 as assembly_lvl2, + domestication as domestication, + full_build as full_build, + transformation as transformation, ) + + +def __getattr__(name: str) -> Any: + """Load the artifact-producing compiler only when it is requested.""" + if name == "BuildCompiler": + from .buildcompiler import BuildCompiler + + globals()[name] = BuildCompiler + return BuildCompiler + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/tests/integration/test_legacy_offline_fixtures.py b/tests/integration/test_legacy_offline_fixtures.py index 1022a4e..9f47fad 100644 --- a/tests/integration/test_legacy_offline_fixtures.py +++ b/tests/integration/test_legacy_offline_fixtures.py @@ -3,7 +3,7 @@ import sbol2 from buildcompiler.api import domestication -from buildcompiler.buildcompiler import BuildCompiler +from buildcompiler import BuildCompiler from buildcompiler.domain import IndexedBackbone, IndexedReagent, StageStatus from buildcompiler.inventory import Inventory diff --git a/tests/test_buildcompiler.py b/tests/test_buildcompiler.py index 17e34aa..8994229 100644 --- a/tests/test_buildcompiler.py +++ b/tests/test_buildcompiler.py @@ -10,7 +10,8 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))) -from buildcompiler.buildcompiler import BuildCompiler, _extract_lvl2_TUs +from buildcompiler import BuildCompiler +from buildcompiler.buildcompiler import _extract_lvl2_TUs from buildcompiler.abstract_translator import extract_toplevel_definition, get_or_pull from buildcompiler.api import domestication diff --git a/tests/test_buildcompiler_transformation.py b/tests/test_buildcompiler_transformation.py index 137ab88..20edead 100644 --- a/tests/test_buildcompiler_transformation.py +++ b/tests/test_buildcompiler_transformation.py @@ -8,7 +8,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))) from buildcompiler.abstract_translator import extract_toplevel_definition -from buildcompiler.buildcompiler import BuildCompiler +from buildcompiler import BuildCompiler from buildcompiler.constants import ENGINEERED_PLASMID diff --git a/tests/test_full_build.py b/tests/test_full_build.py index 071d9ae..73b579d 100644 --- a/tests/test_full_build.py +++ b/tests/test_full_build.py @@ -11,7 +11,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))) -from buildcompiler.buildcompiler import BuildCompiler +from buildcompiler import BuildCompiler from buildcompiler.plasmid import Plasmid from buildcompiler.constants import ENGINEERED_PLASMID diff --git a/tests/test_plating.py b/tests/test_plating.py index 9989538..784f514 100644 --- a/tests/test_plating.py +++ b/tests/test_plating.py @@ -9,7 +9,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../src"))) -from buildcompiler.buildcompiler import BuildCompiler +from buildcompiler import BuildCompiler from buildcompiler.constants import ENGINEERED_PLASMID, ORGANISM_STRAIN from buildcompiler.robotutils import generate_96_well_positions, normalize_plating_input diff --git a/tests/unit/stages/test_assembly_lvl2.py b/tests/unit/stages/test_assembly_lvl2.py index 84d8580..d092908 100644 --- a/tests/unit/stages/test_assembly_lvl2.py +++ b/tests/unit/stages/test_assembly_lvl2.py @@ -210,7 +210,7 @@ def test_assembly_lvl2_incomplete_region_order_blocks_as_hard_constraint(): def test_buildcompiler_assembly_lvl2_respects_supplied_backbone(monkeypatch): from types import SimpleNamespace - from buildcompiler.buildcompiler import BuildCompiler + from buildcompiler import BuildCompiler import buildcompiler.buildcompiler as buildcompiler_module compiler = BuildCompiler.from_local_documents([]) diff --git a/tests/unit/test_core_imports.py b/tests/unit/test_core_imports.py index bc45619..abaf2f3 100644 --- a/tests/unit/test_core_imports.py +++ b/tests/unit/test_core_imports.py @@ -8,7 +8,7 @@ def test_core_imports_do_not_load_optional_automation_dependencies(): plating_to_pudu_json, transformation_to_pudu_json, ) - from buildcompiler.api import BuildCompiler, BuildOptions + from buildcompiler.api import BuildCompiler as ApiBuildCompiler, BuildOptions from buildcompiler import ( BuildCompiler as RootBuildCompiler, assembly_lvl1, @@ -17,12 +17,13 @@ def test_core_imports_do_not_load_optional_automation_dependencies(): full_build, transformation, ) + from buildcompiler.buildcompiler import BuildCompiler as LegacyBuildCompiler from buildcompiler.execution import FullBuildExecutor from buildcompiler.reporting import BuildGraph, BuildReport, BuildSummary assert buildcompiler - assert BuildCompiler - assert RootBuildCompiler is BuildCompiler + assert ApiBuildCompiler + assert RootBuildCompiler is LegacyBuildCompiler assert BuildOptions assert full_build assert domestication