thundergraph-model 1.4.1__tar.gz → 1.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/PKG-INFO +1 -1
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/pyproject.toml +1 -1
- thundergraph_model-1.4.2/tests/integration/structural_models/test_requirement_class_dedupe.py +269 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/configured_model.py +175 -40
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/01-bug_report.yml +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/02-feature_request.yml +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/03-documentation.yml +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/pull_request_template.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/workflows/publish.yml +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.gitignore +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/CHANGELOG.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/LICENSE +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/PYPI.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/README.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/behavior_methodology.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/behavioral_projection_plan.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/brainstorm.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/conceptual_requirements.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/evaluation_api_facade_implementation_plan.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/execution_methodology.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/graph_compiler_nested_requirement_owner_fix_plan.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/implementation_plan.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/logical_architecture.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/model_prototype_sketch.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/requirement_composition_and_naming_implementation_plan.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/system_authoring_restrictions_implementation_plan.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/use_cases.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/v0_api.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/release/v1.2.0.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/release/v1.2.1.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/IMPLEMENTATION_PLAN.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/README.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.buildinfo +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.buildinfo.bak +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/api/api_analysis.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/api/api_execution.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/api/api_integrations.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/api/api_model.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/api/api_root.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/api/index.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/concepts_behavior.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/developer/architecture.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/developer/contributing.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/developer/extension_playbook.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/developer/releasing.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/developer/repository_map.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/developer/testing.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/docstring_style.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/drafts/concepts_behavior_internal.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/drafts/execution_pipeline.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/drafts/glossary.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/drafts/repository_map.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/drafts/what_is_thundergraph_model.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/environment.pickle +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/index.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/concepts_behavior.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/concepts_evaluation.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/concepts_external_compute.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/concepts_parts.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/concepts_requirements.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/concepts_system.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/end_to_end_guide.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/faq.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/install.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/mental_model.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/overview.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.doctrees/user/quickstart.doctree +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/index.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/analysis/compare_variants.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/analysis/impact.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/analysis/sweep.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/behavior.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/configured_model.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/connection_bindings.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/dependency_graph.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/evaluator.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/graph_compiler.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/instances.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/requirements.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/run_context.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/validation.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/execution/value_slots.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/integrations/external_compute.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/model/definition_context.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/model/elements.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/model/expr.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_modules/tg_model/model/refs.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/api/api_analysis.rst.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/api/api_execution.rst.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/api/api_integrations.rst.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/api/api_model.rst.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/api/api_root.rst.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/api/index.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/concepts_behavior.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/developer/architecture.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/developer/contributing.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/developer/extension_playbook.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/developer/releasing.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/developer/repository_map.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/developer/testing.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/docstring_style.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/drafts/concepts_behavior_internal.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/drafts/execution_pipeline.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/drafts/glossary.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/drafts/repository_map.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/drafts/what_is_thundergraph_model.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/index.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/concepts_behavior.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/concepts_evaluation.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/concepts_external_compute.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/concepts_parts.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/concepts_requirements.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/concepts_system.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/end_to_end_guide.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/faq.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/install.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/mental_model.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/overview.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_sources/user/quickstart.md.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/base-stemmer.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/basic.css +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/debug.css +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/doctools.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/documentation_options.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/english-stemmer.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/file.png +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/language_data.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/minus.png +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/plus.png +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/pygments.css +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/scripts/furo-extensions.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/scripts/furo.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/scripts/furo.js.LICENSE.txt +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/scripts/furo.js.map +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/searchtools.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/skeleton.css +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/sphinx_highlight.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/styles/furo-extensions.css +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/styles/furo-extensions.css.map +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/styles/furo.css +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/_static/styles/furo.css.map +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/api/api_analysis.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/api/api_execution.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/api/api_integrations.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/api/api_model.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/api/api_root.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/api/index.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/concepts_behavior.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/developer/architecture.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/developer/contributing.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/developer/extension_playbook.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/developer/releasing.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/developer/repository_map.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/developer/testing.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/docstring_style.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/drafts/concepts_behavior_internal.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/drafts/execution_pipeline.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/drafts/glossary.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/drafts/repository_map.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/drafts/what_is_thundergraph_model.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/genindex.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/index.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/objects.inv +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/py-modindex.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/search.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/searchindex.js +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/concepts_behavior.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/concepts_evaluation.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/concepts_external_compute.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/concepts_parts.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/concepts_requirements.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/concepts_system.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/end_to_end_guide.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/faq.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/install.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/mental_model.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/overview.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/user/quickstart.html +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/api/api_analysis.rst +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/api/api_execution.rst +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/api/api_integrations.rst +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/api/api_model.rst +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/api/api_root.rst +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/api/index.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/conf.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/developer/architecture.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/developer/contributing.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/developer/extension_playbook.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/developer/releasing.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/developer/repository_map.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/developer/testing.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/docstring_style.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/drafts/README.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/drafts/concepts_behavior_internal.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/drafts/execution_pipeline.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/drafts/glossary.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/drafts/repository_map.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/drafts/what_is_thundergraph_model.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/index.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/concepts_behavior.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/concepts_evaluation.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/concepts_external_compute.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/concepts_parts.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/concepts_requirements.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/concepts_system.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/end_to_end_guide.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/faq.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/install.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/mental_model.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/overview.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/user/quickstart.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/IMPLEMENTATION_PLAN.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/README.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/integrations/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/integrations/adapters.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/integrations/bindings.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/product/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/product/aircraft.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/product/major_assemblies/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/product/major_assemblies/parts.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/program/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/program/cargo_jet_program.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/program/l1_requirement_packages.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/program/mission_context.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/reporting/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/reporting/extract.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/commercial_aircraft/reporting/snapshot.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/hpc_datacenter/README.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/hpc_datacenter/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/hpc_datacenter/program.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/integrations/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/integrations/adapters.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/integrations/bindings.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/integrations/preset_inputs.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/reporting/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/reporting/extract.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/reporting/snapshot.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/examples/mars_ntp_tug/tug_model.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/implementation_plan_instructions.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/logo.png +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/notebooks/_gen_leo_notebook.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/notebooks/aev_architecture.mmd +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/notebooks/cargo_jet_program.ipynb +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/notebooks/hpc_datacenter_parameter_sweep.ipynb +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/notebooks/mars_ntp_nuclear_tug.ipynb +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/reviewer_architype.md +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/analysis/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/analysis/test_analysis_workflows.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/behavior/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/behavior/test_behavior_e2e.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_allocate_parameter_wiring.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_evaluation_e2e.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_external_compute.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_requirement_acceptance.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_sub_system_allocations.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_system_in_system_requirements.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/evaluation/test_unitflow_evaluation.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/structural_models/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/structural_models/test_citations.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/structural_models/test_drive_system.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/structural_models/test_instantiation.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/test_commercial_aircraft_smoke.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/test_hpc_datacenter_smoke.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/integration/test_mars_ntp_tug_smoke.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/analysis/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/analysis/test_sweep_planning.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_behavior_runtime.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_behavior_scope.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_configured_model.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_configured_model_evaluate.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_dependency_graph.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_evaluation_phase0.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_evaluator.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_graph_compiler.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_instances.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_phase6_runtime.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_run_context.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/execution/test_validation.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/export/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/integrations/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_attribute_ref.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_behavior_declarations.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_compile_types.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_definition_context.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_elements.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_example_system_authoring_policy.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_expr.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_identity.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_new_api_validators.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_parameter_ref.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_phase6_ontology.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_refs.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_requirement_block.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tests/unit/model/test_system_authoring_restrictions.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/analysis/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/analysis/_coherence.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/analysis/compare_variants.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/analysis/impact.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/analysis/sweep.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/behavior.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/connection_bindings.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/dependency_graph.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/evaluation.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/evaluator.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/external_ops.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/graph_compiler.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/instances.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/requirements.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/rollups.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/run_context.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/solve_groups.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/stable_ids.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/validation.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/value_slots.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/export/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/integrations/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/integrations/external_compute.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/compile_types.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/declarations/__init__.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/declarations/behavior.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/declarations/values.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/definition_context.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/elements.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/evaluation_context.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/expr.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/identity.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/model/refs.py +0 -0
- {thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/uv.lock +0 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"""Integration tests for Requirement class-identity deduplication.
|
|
2
|
+
|
|
3
|
+
A Requirement class is a specification statement. When the same Requirement
|
|
4
|
+
subclass is composed in multiple places from DIFFERENT defining classes (e.g.
|
|
5
|
+
inside a domain System AND inside a top-level rollup package), tg-model treats
|
|
6
|
+
them as ONE shared RequirementPackageInstance with multiple navigation paths.
|
|
7
|
+
|
|
8
|
+
When the SAME defining class introduces the same Requirement multiple times
|
|
9
|
+
(because that class is instantiated more than once), each instance gets its own
|
|
10
|
+
independent RequirementPackageInstance. This is the multi-instantiation case
|
|
11
|
+
and must NOT be deduped.
|
|
12
|
+
|
|
13
|
+
Parts and Systems are unaffected — they always retain distinct-instance semantics.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import pytest
|
|
19
|
+
from unitflow import Quantity
|
|
20
|
+
from unitflow.catalogs.si import kN
|
|
21
|
+
|
|
22
|
+
from tg_model.execution.configured_model import instantiate
|
|
23
|
+
from tg_model.model.elements import Part, Requirement, System
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# ── Shared leaf declarations ─────────────────────────────────────────────────
|
|
27
|
+
|
|
28
|
+
class _Thruster(Part):
|
|
29
|
+
@classmethod
|
|
30
|
+
def define(cls, model): # type: ignore[override]
|
|
31
|
+
model.name("thruster")
|
|
32
|
+
model.parameter("thrust", unit=kN)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class _ThrustReq(Requirement):
|
|
36
|
+
@classmethod
|
|
37
|
+
def define(cls, model): # type: ignore[override]
|
|
38
|
+
model.name("thrust_req")
|
|
39
|
+
model.doc("Thrust shall meet the floor.")
|
|
40
|
+
declared = model.parameter("declared", unit=kN)
|
|
41
|
+
floor = model.parameter("floor", unit=kN)
|
|
42
|
+
margin = model.attribute("margin", unit=kN, expr=declared - floor)
|
|
43
|
+
model.constraint("margin_non_negative", expr=margin >= Quantity(0, kN))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class _CapacityReq(Requirement):
|
|
47
|
+
@classmethod
|
|
48
|
+
def define(cls, model): # type: ignore[override]
|
|
49
|
+
model.name("capacity_req")
|
|
50
|
+
model.doc("Capacity shall meet the minimum.")
|
|
51
|
+
capacity = model.parameter("capacity", unit=kN)
|
|
52
|
+
minimum = model.parameter("minimum", unit=kN)
|
|
53
|
+
headroom = model.attribute("headroom", unit=kN, expr=capacity - minimum)
|
|
54
|
+
model.constraint("headroom_non_negative", expr=headroom >= Quantity(0, kN))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# ── Programs for dedupe scenarios ────────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
class _RollupReqs(Requirement):
|
|
60
|
+
"""Top-level rollup that re-composes _ThrustReq — should alias the domain System's instance."""
|
|
61
|
+
@classmethod
|
|
62
|
+
def define(cls, model): # type: ignore[override]
|
|
63
|
+
model.name("rollup")
|
|
64
|
+
model.doc("Top-level rollup view.")
|
|
65
|
+
model.composed_of("thrust", _ThrustReq)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class _DomainSystem(System):
|
|
69
|
+
"""Domain System that owns _ThrustReq and allocates it to the thruster."""
|
|
70
|
+
@classmethod
|
|
71
|
+
def define(cls, model): # type: ignore[override]
|
|
72
|
+
model.name("domain")
|
|
73
|
+
floor = model.parameter("floor_kN", unit=kN)
|
|
74
|
+
thr = model.composed_of("thruster", _Thruster)
|
|
75
|
+
req = model.composed_of("thrust_req", _ThrustReq)
|
|
76
|
+
model.allocate(req, thr, inputs={
|
|
77
|
+
"declared": thr.thrust,
|
|
78
|
+
"floor": floor,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class _ProgramWithRollup(System):
|
|
83
|
+
"""Top-level program: domain System + rollup that also composes the same Requirement."""
|
|
84
|
+
@classmethod
|
|
85
|
+
def define(cls, model): # type: ignore[override]
|
|
86
|
+
model.name("program_with_rollup")
|
|
87
|
+
model.composed_of("domain", _DomainSystem)
|
|
88
|
+
model.composed_of("rollup", _RollupReqs)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# ── Programs for multi-instantiation (no-dedupe) scenario ────────────────────
|
|
92
|
+
|
|
93
|
+
class _SubSystem(System):
|
|
94
|
+
"""Sub-system that composes _ThrustReq internally."""
|
|
95
|
+
@classmethod
|
|
96
|
+
def define(cls, model): # type: ignore[override]
|
|
97
|
+
model.name("subsystem")
|
|
98
|
+
floor = model.parameter("floor_kN", unit=kN)
|
|
99
|
+
thr = model.composed_of("thruster", _Thruster)
|
|
100
|
+
req = model.composed_of("thrust_req", _ThrustReq)
|
|
101
|
+
model.allocate(req, thr, inputs={
|
|
102
|
+
"declared": thr.thrust,
|
|
103
|
+
"floor": floor,
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class _ProgramWithTwoSubSystems(System):
|
|
108
|
+
"""Two instances of the same sub-System class — each should get its own Requirement instance."""
|
|
109
|
+
@classmethod
|
|
110
|
+
def define(cls, model): # type: ignore[override]
|
|
111
|
+
model.name("program_two_subsystems")
|
|
112
|
+
model.composed_of("sub_a", _SubSystem)
|
|
113
|
+
model.composed_of("sub_b", _SubSystem)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# ── Programs for regression tests ───────────────────────────────────────────
|
|
117
|
+
|
|
118
|
+
class _Motor(Part):
|
|
119
|
+
@classmethod
|
|
120
|
+
def define(cls, model): # type: ignore[override]
|
|
121
|
+
model.name("motor")
|
|
122
|
+
model.parameter("torque", unit=kN)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class _ProgramTwoDistinctParts(System):
|
|
126
|
+
@classmethod
|
|
127
|
+
def define(cls, model): # type: ignore[override]
|
|
128
|
+
model.name("program_two_parts")
|
|
129
|
+
model.composed_of("motor_a", _Motor)
|
|
130
|
+
model.composed_of("motor_b", _Motor)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class _InnerSystem(System):
|
|
134
|
+
@classmethod
|
|
135
|
+
def define(cls, model): # type: ignore[override]
|
|
136
|
+
model.name("inner")
|
|
137
|
+
model.parameter("p", unit=kN)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class _ProgramTwoDistinctSystems(System):
|
|
141
|
+
@classmethod
|
|
142
|
+
def define(cls, model): # type: ignore[override]
|
|
143
|
+
model.name("program_two_systems")
|
|
144
|
+
model.composed_of("inner_a", _InnerSystem)
|
|
145
|
+
model.composed_of("inner_b", _InnerSystem)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def setup_function() -> None:
|
|
149
|
+
for cls in (
|
|
150
|
+
_Thruster, _ThrustReq, _CapacityReq, _RollupReqs, _DomainSystem,
|
|
151
|
+
_ProgramWithRollup, _SubSystem, _ProgramWithTwoSubSystems,
|
|
152
|
+
_Motor, _ProgramTwoDistinctParts, _InnerSystem, _ProgramTwoDistinctSystems,
|
|
153
|
+
):
|
|
154
|
+
cls._reset_compilation()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
# ── 1) Dedupe: same Requirement class composed by two DIFFERENT classes ──────
|
|
158
|
+
|
|
159
|
+
def test_same_req_class_two_parents_is_one_instance() -> None:
|
|
160
|
+
"""DomainSystem and RollupReqs both compose _ThrustReq — only one instance."""
|
|
161
|
+
cm = instantiate(_ProgramWithRollup)
|
|
162
|
+
domain_req = cm.handle("_ProgramWithRollup.domain.thrust_req")
|
|
163
|
+
rollup_req = cm.handle("_ProgramWithRollup.rollup.thrust")
|
|
164
|
+
assert domain_req is rollup_req, "Both paths must resolve to the SAME RequirementPackageInstance"
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def test_alias_path_resolves_to_canonical_slots() -> None:
|
|
168
|
+
"""Both navigation paths point to the same ValueSlot objects."""
|
|
169
|
+
cm = instantiate(_ProgramWithRollup)
|
|
170
|
+
canonical_declared = cm.handle("_ProgramWithRollup.domain.thrust_req.declared")
|
|
171
|
+
alias_declared = cm.handle("_ProgramWithRollup.rollup.thrust.declared")
|
|
172
|
+
assert canonical_declared is alias_declared
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def test_id_registry_has_one_entry_per_req_instance() -> None:
|
|
176
|
+
"""id_registry dedupe: only one stable_id entry for _ThrustReq."""
|
|
177
|
+
cm = instantiate(_ProgramWithRollup)
|
|
178
|
+
thrust_req_entries = [
|
|
179
|
+
(sid, obj) for sid, obj in cm.id_registry.items()
|
|
180
|
+
if hasattr(obj, "package_type") and obj.package_type is _ThrustReq
|
|
181
|
+
]
|
|
182
|
+
assert len(thrust_req_entries) == 1, (
|
|
183
|
+
f"Expected exactly one id_registry entry for _ThrustReq, got {len(thrust_req_entries)}"
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def test_allocation_wires_shared_instance() -> None:
|
|
188
|
+
"""Allocation declared in DomainSystem uses the shared instance and correct source slots."""
|
|
189
|
+
cm = instantiate(_ProgramWithRollup)
|
|
190
|
+
assert len(cm.allocations) == 1
|
|
191
|
+
alloc = cm.allocations[0]
|
|
192
|
+
# Requirement points at the shared (canonical) instance
|
|
193
|
+
assert alloc.requirement.path_string == "_ProgramWithRollup.domain.thrust_req"
|
|
194
|
+
# parameter_overrides maps req-param-name → SOURCE slot (the Part side of the wiring)
|
|
195
|
+
assert set(alloc.parameter_overrides.keys()) == {"declared", "floor"}
|
|
196
|
+
assert alloc.parameter_overrides["declared"].path_string == "_ProgramWithRollup.domain.thruster.thrust"
|
|
197
|
+
assert alloc.parameter_overrides["floor"].path_string == "_ProgramWithRollup.domain.floor_kN"
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def test_end_to_end_evaluates_constraint_once() -> None:
|
|
201
|
+
"""Only one constraint result — not two copies of the same constraint."""
|
|
202
|
+
cm = instantiate(_ProgramWithRollup)
|
|
203
|
+
result = cm.evaluate(inputs={
|
|
204
|
+
cm.domain.floor_kN.stable_id: Quantity(50, kN),
|
|
205
|
+
cm.domain.thruster.thrust.stable_id: Quantity(80, kN),
|
|
206
|
+
})
|
|
207
|
+
assert result.passed
|
|
208
|
+
assert len(result.constraint_results) == 1, (
|
|
209
|
+
f"Expected 1 constraint result (not duplicated), got {len(result.constraint_results)}"
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
# ── 2) No-dedupe: same class instantiated multiple times ─────────────────────
|
|
214
|
+
|
|
215
|
+
def test_multi_instantiation_produces_distinct_req_instances() -> None:
|
|
216
|
+
"""sub_a and sub_b each get their OWN _ThrustReq instance (different subsystem instances)."""
|
|
217
|
+
cm = instantiate(_ProgramWithTwoSubSystems)
|
|
218
|
+
req_a = cm.handle("_ProgramWithTwoSubSystems.sub_a.thrust_req")
|
|
219
|
+
req_b = cm.handle("_ProgramWithTwoSubSystems.sub_b.thrust_req")
|
|
220
|
+
assert req_a is not req_b, "_SubSystem instances must each own their own _ThrustReq"
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def test_multi_instantiation_distinct_slots() -> None:
|
|
224
|
+
slot_a = cm_two = instantiate(_ProgramWithTwoSubSystems)
|
|
225
|
+
slot_a_declared = cm_two.handle("_ProgramWithTwoSubSystems.sub_a.thrust_req.declared")
|
|
226
|
+
slot_b_declared = cm_two.handle("_ProgramWithTwoSubSystems.sub_b.thrust_req.declared")
|
|
227
|
+
assert slot_a_declared is not slot_b_declared
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def test_multi_instantiation_two_allocations() -> None:
|
|
231
|
+
cm = instantiate(_ProgramWithTwoSubSystems)
|
|
232
|
+
assert len(cm.allocations) == 2
|
|
233
|
+
targets = {a.target.path_string for a in cm.allocations}
|
|
234
|
+
assert targets == {
|
|
235
|
+
"_ProgramWithTwoSubSystems.sub_a.thruster",
|
|
236
|
+
"_ProgramWithTwoSubSystems.sub_b.thruster",
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def test_multi_instantiation_evaluates_each_subsystem() -> None:
|
|
241
|
+
cm = instantiate(_ProgramWithTwoSubSystems)
|
|
242
|
+
result = cm.evaluate(inputs={
|
|
243
|
+
cm.sub_a.floor_kN.stable_id: Quantity(50, kN),
|
|
244
|
+
cm.sub_a.thruster.thrust.stable_id: Quantity(80, kN), # passes
|
|
245
|
+
cm.sub_b.floor_kN.stable_id: Quantity(50, kN),
|
|
246
|
+
cm.sub_b.thruster.thrust.stable_id: Quantity(30, kN), # fails
|
|
247
|
+
})
|
|
248
|
+
assert not result.passed
|
|
249
|
+
assert len(result.constraint_results) == 2
|
|
250
|
+
states = {cr.state for cr in result.constraint_results}
|
|
251
|
+
assert "passed" in states and "failed" in states
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
# ── 3) Regression: Parts and Systems always produce distinct instances ────────
|
|
255
|
+
|
|
256
|
+
def test_part_composed_twice_distinct_instances() -> None:
|
|
257
|
+
cm = instantiate(_ProgramTwoDistinctParts)
|
|
258
|
+
motor_a = cm.handle("_ProgramTwoDistinctParts.motor_a")
|
|
259
|
+
motor_b = cm.handle("_ProgramTwoDistinctParts.motor_b")
|
|
260
|
+
assert motor_a is not motor_b
|
|
261
|
+
assert motor_a.stable_id != motor_b.stable_id
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def test_system_composed_twice_distinct_instances() -> None:
|
|
265
|
+
cm = instantiate(_ProgramTwoDistinctSystems)
|
|
266
|
+
inner_a = cm.handle("_ProgramTwoDistinctSystems.inner_a")
|
|
267
|
+
inner_b = cm.handle("_ProgramTwoDistinctSystems.inner_b")
|
|
268
|
+
assert inner_a is not inner_b
|
|
269
|
+
assert inner_a.stable_id != inner_b.stable_id
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/tg_model/execution/configured_model.py
RENAMED
|
@@ -241,6 +241,22 @@ def instantiate(root_type: type) -> ConfiguredModel:
|
|
|
241
241
|
id_registry: dict[str, ElementInstance | ValueSlot] = {}
|
|
242
242
|
requirement_value_slots: list[ValueSlot] = []
|
|
243
243
|
|
|
244
|
+
# Requirement classes are specification statements — there is no such thing
|
|
245
|
+
# as "two copies of the same requirement." When the same Requirement subclass
|
|
246
|
+
# is composed in multiple places from DIFFERENT defining classes (e.g. once
|
|
247
|
+
# inside FacilitySystem and again inside DataCenterCapabilityRequirements),
|
|
248
|
+
# tg-model treats them as ONE shared RequirementPackageInstance with multiple
|
|
249
|
+
# navigation paths in path_registry.
|
|
250
|
+
#
|
|
251
|
+
# However, when the SAME defining class introduces a Requirement multiple times
|
|
252
|
+
# (because that class is itself instantiated more than once — e.g. two motor
|
|
253
|
+
# sub-systems each owning their own thrust requirement), each instance gets its
|
|
254
|
+
# own independent RequirementPackageInstance. This is the multi-instantiation
|
|
255
|
+
# case and must NOT be deduped.
|
|
256
|
+
#
|
|
257
|
+
# Registry maps: Requirement class → (introducing_class, canonical_instance)
|
|
258
|
+
pkg_class_registry: dict[type, tuple[type, RequirementPackageInstance]] = {}
|
|
259
|
+
|
|
244
260
|
root_path = (root_type.__name__,)
|
|
245
261
|
root_id = derive_declaration_id(root_type, *root_path)
|
|
246
262
|
root_instance = PartInstance(
|
|
@@ -260,6 +276,7 @@ def instantiate(root_type: type) -> ConfiguredModel:
|
|
|
260
276
|
id_registry,
|
|
261
277
|
ref_accumulator,
|
|
262
278
|
requirement_value_slots,
|
|
279
|
+
pkg_class_registry,
|
|
263
280
|
)
|
|
264
281
|
|
|
265
282
|
connections = _instantiate_all_connections(root_instance, path_registry, root_type)
|
|
@@ -279,6 +296,45 @@ def instantiate(root_type: type) -> ConfiguredModel:
|
|
|
279
296
|
)
|
|
280
297
|
|
|
281
298
|
|
|
299
|
+
def _register_pkg_alias(
|
|
300
|
+
existing: RequirementPackageInstance,
|
|
301
|
+
alias_path: tuple[str, ...],
|
|
302
|
+
path_registry: dict[str, ElementInstance | ValueSlot],
|
|
303
|
+
) -> None:
|
|
304
|
+
"""Register an already-instantiated RequirementPackageInstance under a new path prefix.
|
|
305
|
+
|
|
306
|
+
When the same Requirement class is composed a second time, we do not create a
|
|
307
|
+
new instance. Instead, all navigation paths under ``alias_path`` are added to
|
|
308
|
+
``path_registry`` pointing at the SAME descendant objects as the canonical path.
|
|
309
|
+
``id_registry`` is NOT touched — each object retains exactly one stable_id.
|
|
310
|
+
|
|
311
|
+
This walk mirrors the structure produced by _instantiate_requirement_block_children:
|
|
312
|
+
it recurses into nested RequirementPackageInstances so deeply-nested members are
|
|
313
|
+
also aliased.
|
|
314
|
+
"""
|
|
315
|
+
canonical_prefix = existing.instance_path
|
|
316
|
+
canonical_len = len(canonical_prefix)
|
|
317
|
+
alias_str = ".".join(alias_path)
|
|
318
|
+
path_registry[alias_str] = existing
|
|
319
|
+
|
|
320
|
+
# Walk _members which contains: ElementInstance (requirement/constraint/citation),
|
|
321
|
+
# ValueSlot (parameter/attribute), and nested RequirementPackageInstance.
|
|
322
|
+
stack: list[RequirementPackageInstance] = [existing]
|
|
323
|
+
while stack:
|
|
324
|
+
pkg = stack.pop()
|
|
325
|
+
pkg_alias_prefix = alias_path + pkg.instance_path[canonical_len:]
|
|
326
|
+
for member_name, member in pkg._members.items():
|
|
327
|
+
# Compute the alias path for this member.
|
|
328
|
+
member_alias = (*pkg_alias_prefix, member_name)
|
|
329
|
+
member_alias_str = ".".join(member_alias)
|
|
330
|
+
if isinstance(member, RequirementPackageInstance):
|
|
331
|
+
path_registry[member_alias_str] = member
|
|
332
|
+
stack.append(member)
|
|
333
|
+
else:
|
|
334
|
+
# ElementInstance (requirement, constraint, citation) or ValueSlot.
|
|
335
|
+
path_registry[member_alias_str] = member
|
|
336
|
+
|
|
337
|
+
|
|
282
338
|
def _instantiate_children(
|
|
283
339
|
parent: PartInstance,
|
|
284
340
|
compiled: dict[str, Any],
|
|
@@ -287,9 +343,12 @@ def _instantiate_children(
|
|
|
287
343
|
id_registry: dict[str, ElementInstance | ValueSlot],
|
|
288
344
|
ref_accumulator: list[ReferenceBinding] | None = None,
|
|
289
345
|
requirement_value_slots: list[ValueSlot] | None = None,
|
|
346
|
+
pkg_class_registry: dict[type, RequirementPackageInstance] | None = None,
|
|
290
347
|
) -> None:
|
|
291
348
|
"""Walk compiled nodes and create child instances under parent."""
|
|
292
349
|
type_registry: dict[str, type] = compiled.get("_type_registry", {})
|
|
350
|
+
if pkg_class_registry is None:
|
|
351
|
+
pkg_class_registry = {}
|
|
293
352
|
|
|
294
353
|
for name, node in compiled["nodes"].items():
|
|
295
354
|
kind = node["kind"]
|
|
@@ -319,6 +378,7 @@ def _instantiate_children(
|
|
|
319
378
|
id_registry,
|
|
320
379
|
ref_accumulator,
|
|
321
380
|
requirement_value_slots,
|
|
381
|
+
pkg_class_registry,
|
|
322
382
|
)
|
|
323
383
|
|
|
324
384
|
elif kind == "port":
|
|
@@ -361,26 +421,64 @@ def _instantiate_children(
|
|
|
361
421
|
block_type = type_registry.get(name)
|
|
362
422
|
if block_type is None:
|
|
363
423
|
raise ValueError(f"requirement_block {name!r} has no target_type (internal compile error)")
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
424
|
+
introducing_class = parent.definition_type
|
|
425
|
+
registry_entry = pkg_class_registry.get(block_type)
|
|
426
|
+
if registry_entry is not None:
|
|
427
|
+
prior_introducing_class, existing_inst = registry_entry
|
|
428
|
+
if prior_introducing_class is not introducing_class:
|
|
429
|
+
# Different class introduces the same Requirement — cross-tree
|
|
430
|
+
# sharing (e.g. rollup package referencing a domain requirement).
|
|
431
|
+
# Alias to the canonical instance; don't recurse.
|
|
432
|
+
parent.add_requirement_package(name, existing_inst)
|
|
433
|
+
_register_pkg_alias(existing_inst, alias_path=child_path, path_registry=path_registry)
|
|
434
|
+
else:
|
|
435
|
+
# Same class introduces the same Requirement again — this class
|
|
436
|
+
# is instantiated multiple times and each instance gets its own
|
|
437
|
+
# independent Requirement instance. Don't dedupe.
|
|
438
|
+
pkg_inst = RequirementPackageInstance(
|
|
439
|
+
stable_id=child_id,
|
|
440
|
+
definition_type=root_type,
|
|
441
|
+
definition_path=(name,),
|
|
442
|
+
instance_path=child_path,
|
|
443
|
+
package_type=block_type,
|
|
444
|
+
metadata=metadata,
|
|
445
|
+
)
|
|
446
|
+
parent.add_requirement_package(name, pkg_inst)
|
|
447
|
+
_register(pkg_inst, path_registry, id_registry)
|
|
448
|
+
_instantiate_requirement_block_children(
|
|
449
|
+
pkg_inst,
|
|
450
|
+
_requirement_block_compiled_artifact(block_type),
|
|
451
|
+
root_type,
|
|
452
|
+
root_type,
|
|
453
|
+
path_registry,
|
|
454
|
+
id_registry,
|
|
455
|
+
ref_accumulator,
|
|
456
|
+
requirement_value_slots,
|
|
457
|
+
pkg_class_registry,
|
|
458
|
+
)
|
|
459
|
+
else:
|
|
460
|
+
pkg_inst = RequirementPackageInstance(
|
|
461
|
+
stable_id=child_id,
|
|
462
|
+
definition_type=root_type,
|
|
463
|
+
definition_path=(name,),
|
|
464
|
+
instance_path=child_path,
|
|
465
|
+
package_type=block_type,
|
|
466
|
+
metadata=metadata,
|
|
467
|
+
)
|
|
468
|
+
parent.add_requirement_package(name, pkg_inst)
|
|
469
|
+
_register(pkg_inst, path_registry, id_registry)
|
|
470
|
+
pkg_class_registry[block_type] = (introducing_class, pkg_inst)
|
|
471
|
+
_instantiate_requirement_block_children(
|
|
472
|
+
pkg_inst,
|
|
473
|
+
_requirement_block_compiled_artifact(block_type),
|
|
474
|
+
root_type,
|
|
475
|
+
root_type,
|
|
476
|
+
path_registry,
|
|
477
|
+
id_registry,
|
|
478
|
+
ref_accumulator,
|
|
479
|
+
requirement_value_slots,
|
|
480
|
+
pkg_class_registry,
|
|
481
|
+
)
|
|
384
482
|
|
|
385
483
|
elif kind == "constraint":
|
|
386
484
|
constraint_instance = ElementInstance(
|
|
@@ -414,10 +512,13 @@ def _instantiate_requirement_block_children(
|
|
|
414
512
|
id_registry: dict[str, ElementInstance | ValueSlot],
|
|
415
513
|
ref_accumulator: list[ReferenceBinding] | None = None,
|
|
416
514
|
requirement_value_slots: list[ValueSlot] | None = None,
|
|
515
|
+
pkg_class_registry: dict[type, RequirementPackageInstance] | None = None,
|
|
417
516
|
) -> None:
|
|
418
517
|
"""Materialize members under a composable requirement package (dot-access under the root part)."""
|
|
419
518
|
type_registry: dict[str, type] = compiled.get("_type_registry", {})
|
|
420
519
|
prefix_path = package.instance_path
|
|
520
|
+
if pkg_class_registry is None:
|
|
521
|
+
pkg_class_registry = {}
|
|
421
522
|
|
|
422
523
|
for name, node in compiled["nodes"].items():
|
|
423
524
|
kind = node["kind"]
|
|
@@ -451,26 +552,60 @@ def _instantiate_requirement_block_children(
|
|
|
451
552
|
block_type = type_registry.get(name)
|
|
452
553
|
if block_type is None:
|
|
453
554
|
raise ValueError(f"requirement_block {name!r} has no target_type (internal compile error)")
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
555
|
+
introducing_class = package.package_type
|
|
556
|
+
registry_entry = pkg_class_registry.get(block_type)
|
|
557
|
+
if registry_entry is not None:
|
|
558
|
+
prior_introducing_class, existing_inst = registry_entry
|
|
559
|
+
if prior_introducing_class is not introducing_class:
|
|
560
|
+
# Different Requirement class is introducing this — alias.
|
|
561
|
+
package.add_member(name, existing_inst)
|
|
562
|
+
_register_pkg_alias(existing_inst, alias_path=child_path, path_registry=path_registry)
|
|
563
|
+
else:
|
|
564
|
+
# Same package type introduces it again (multi-instantiation).
|
|
565
|
+
inner_pkg = RequirementPackageInstance(
|
|
566
|
+
stable_id=child_id,
|
|
567
|
+
definition_type=definition_root_type,
|
|
568
|
+
definition_path=tuple(child_path[1:]),
|
|
569
|
+
instance_path=child_path,
|
|
570
|
+
package_type=block_type,
|
|
571
|
+
metadata=metadata,
|
|
572
|
+
)
|
|
573
|
+
package.add_member(name, inner_pkg)
|
|
574
|
+
_register(inner_pkg, path_registry, id_registry)
|
|
575
|
+
_instantiate_requirement_block_children(
|
|
576
|
+
inner_pkg,
|
|
577
|
+
_requirement_block_compiled_artifact(block_type),
|
|
578
|
+
definition_root_type,
|
|
579
|
+
root_type,
|
|
580
|
+
path_registry,
|
|
581
|
+
id_registry,
|
|
582
|
+
ref_accumulator,
|
|
583
|
+
requirement_value_slots,
|
|
584
|
+
pkg_class_registry,
|
|
585
|
+
)
|
|
586
|
+
else:
|
|
587
|
+
inner_pkg = RequirementPackageInstance(
|
|
588
|
+
stable_id=child_id,
|
|
589
|
+
definition_type=definition_root_type,
|
|
590
|
+
definition_path=tuple(child_path[1:]),
|
|
591
|
+
instance_path=child_path,
|
|
592
|
+
package_type=block_type,
|
|
593
|
+
metadata=metadata,
|
|
594
|
+
)
|
|
595
|
+
package.add_member(name, inner_pkg)
|
|
596
|
+
_register(inner_pkg, path_registry, id_registry)
|
|
597
|
+
pkg_class_registry[block_type] = (introducing_class, inner_pkg)
|
|
598
|
+
_instantiate_requirement_block_children(
|
|
599
|
+
inner_pkg,
|
|
600
|
+
_requirement_block_compiled_artifact(block_type),
|
|
601
|
+
definition_root_type,
|
|
602
|
+
root_type,
|
|
603
|
+
path_registry,
|
|
604
|
+
id_registry,
|
|
605
|
+
ref_accumulator,
|
|
606
|
+
requirement_value_slots,
|
|
607
|
+
pkg_class_registry,
|
|
608
|
+
)
|
|
474
609
|
|
|
475
610
|
elif kind in ("parameter", "attribute"):
|
|
476
611
|
slot = ValueSlot(
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/01-bug_report.yml
RENAMED
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/02-feature_request.yml
RENAMED
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/.github/ISSUE_TEMPLATE/03-documentation.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/behavior_methodology.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/execution_methodology.md
RENAMED
|
File without changes
|
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/implementation_plan.md
RENAMED
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/logical_architecture.md
RENAMED
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/generation_docs/model_prototype_sketch.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{thundergraph_model-1.4.1 → thundergraph_model-1.4.2}/docs/user_docs/_build/html/.buildinfo.bak
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|