thundergraph-model 1.3.0__tar.gz → 1.3.1__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.
Files changed (324) hide show
  1. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/PKG-INFO +1 -1
  2. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/pyproject.toml +1 -1
  3. thundergraph_model-1.3.1/tests/unit/model/test_behavior_declarations.py +385 -0
  4. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_phase6_ontology.py +2 -2
  5. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/compile_types.py +37 -10
  6. thundergraph_model-1.3.0/tests/unit/model/test_behavior_declarations.py +0 -207
  7. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.github/ISSUE_TEMPLATE/01-bug_report.yml +0 -0
  8. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.github/ISSUE_TEMPLATE/02-feature_request.yml +0 -0
  9. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.github/ISSUE_TEMPLATE/03-documentation.yml +0 -0
  10. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  11. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.github/pull_request_template.md +0 -0
  12. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.github/workflows/publish.yml +0 -0
  13. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/.gitignore +0 -0
  14. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/CHANGELOG.md +0 -0
  15. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/LICENSE +0 -0
  16. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/PYPI.md +0 -0
  17. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/README.md +0 -0
  18. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/behavior_methodology.md +0 -0
  19. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/behavioral_projection_plan.md +0 -0
  20. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/brainstorm.md +0 -0
  21. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/conceptual_requirements.md +0 -0
  22. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/evaluation_api_facade_implementation_plan.md +0 -0
  23. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/execution_methodology.md +0 -0
  24. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/implementation_plan.md +0 -0
  25. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/logical_architecture.md +0 -0
  26. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/model_prototype_sketch.py +0 -0
  27. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/requirement_composition_and_naming_implementation_plan.md +0 -0
  28. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/system_authoring_restrictions_implementation_plan.md +0 -0
  29. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/use_cases.md +0 -0
  30. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/generation_docs/v0_api.md +0 -0
  31. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/release/v1.2.0.md +0 -0
  32. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/release/v1.2.1.md +0 -0
  33. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/IMPLEMENTATION_PLAN.md +0 -0
  34. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/README.md +0 -0
  35. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.buildinfo +0 -0
  36. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.buildinfo.bak +0 -0
  37. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/api/api_analysis.doctree +0 -0
  38. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/api/api_execution.doctree +0 -0
  39. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/api/api_integrations.doctree +0 -0
  40. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/api/api_model.doctree +0 -0
  41. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/api/api_root.doctree +0 -0
  42. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/api/index.doctree +0 -0
  43. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/developer/architecture.doctree +0 -0
  44. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/developer/contributing.doctree +0 -0
  45. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/developer/extension_playbook.doctree +0 -0
  46. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/developer/releasing.doctree +0 -0
  47. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/developer/repository_map.doctree +0 -0
  48. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/developer/testing.doctree +0 -0
  49. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/docstring_style.doctree +0 -0
  50. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/drafts/execution_pipeline.doctree +0 -0
  51. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/drafts/glossary.doctree +0 -0
  52. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/drafts/repository_map.doctree +0 -0
  53. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/drafts/what_is_thundergraph_model.doctree +0 -0
  54. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/environment.pickle +0 -0
  55. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/index.doctree +0 -0
  56. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/concepts_evaluation.doctree +0 -0
  57. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/concepts_external_compute.doctree +0 -0
  58. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/concepts_parts.doctree +0 -0
  59. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/concepts_requirements.doctree +0 -0
  60. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/concepts_system.doctree +0 -0
  61. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/end_to_end_guide.doctree +0 -0
  62. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/faq.doctree +0 -0
  63. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/install.doctree +0 -0
  64. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/mental_model.doctree +0 -0
  65. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/overview.doctree +0 -0
  66. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/.doctrees/user/quickstart.doctree +0 -0
  67. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/index.html +0 -0
  68. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/analysis/compare_variants.html +0 -0
  69. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/analysis/impact.html +0 -0
  70. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/analysis/sweep.html +0 -0
  71. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/behavior.html +0 -0
  72. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/configured_model.html +0 -0
  73. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/connection_bindings.html +0 -0
  74. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/dependency_graph.html +0 -0
  75. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/evaluator.html +0 -0
  76. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/graph_compiler.html +0 -0
  77. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/instances.html +0 -0
  78. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/requirements.html +0 -0
  79. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/run_context.html +0 -0
  80. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/validation.html +0 -0
  81. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/execution/value_slots.html +0 -0
  82. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/integrations/external_compute.html +0 -0
  83. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/model/definition_context.html +0 -0
  84. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/model/elements.html +0 -0
  85. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/model/expr.html +0 -0
  86. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_modules/tg_model/model/refs.html +0 -0
  87. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/api/api_analysis.rst.txt +0 -0
  88. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/api/api_execution.rst.txt +0 -0
  89. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/api/api_integrations.rst.txt +0 -0
  90. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/api/api_model.rst.txt +0 -0
  91. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/api/api_root.rst.txt +0 -0
  92. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/api/index.md.txt +0 -0
  93. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/developer/architecture.md.txt +0 -0
  94. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/developer/contributing.md.txt +0 -0
  95. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/developer/extension_playbook.md.txt +0 -0
  96. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/developer/releasing.md.txt +0 -0
  97. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/developer/repository_map.md.txt +0 -0
  98. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/developer/testing.md.txt +0 -0
  99. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/docstring_style.md.txt +0 -0
  100. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/drafts/execution_pipeline.md.txt +0 -0
  101. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/drafts/glossary.md.txt +0 -0
  102. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/drafts/repository_map.md.txt +0 -0
  103. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/drafts/what_is_thundergraph_model.md.txt +0 -0
  104. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/index.md.txt +0 -0
  105. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/concepts_evaluation.md.txt +0 -0
  106. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/concepts_external_compute.md.txt +0 -0
  107. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/concepts_parts.md.txt +0 -0
  108. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/concepts_requirements.md.txt +0 -0
  109. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/concepts_system.md.txt +0 -0
  110. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/end_to_end_guide.md.txt +0 -0
  111. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/faq.md.txt +0 -0
  112. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/install.md.txt +0 -0
  113. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/mental_model.md.txt +0 -0
  114. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/overview.md.txt +0 -0
  115. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_sources/user/quickstart.md.txt +0 -0
  116. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/base-stemmer.js +0 -0
  117. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/basic.css +0 -0
  118. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/debug.css +0 -0
  119. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/doctools.js +0 -0
  120. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/documentation_options.js +0 -0
  121. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/english-stemmer.js +0 -0
  122. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/file.png +0 -0
  123. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/language_data.js +0 -0
  124. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/minus.png +0 -0
  125. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/plus.png +0 -0
  126. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/pygments.css +0 -0
  127. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/scripts/furo-extensions.js +0 -0
  128. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/scripts/furo.js +0 -0
  129. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/scripts/furo.js.LICENSE.txt +0 -0
  130. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/scripts/furo.js.map +0 -0
  131. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/searchtools.js +0 -0
  132. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/skeleton.css +0 -0
  133. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/sphinx_highlight.js +0 -0
  134. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/styles/furo-extensions.css +0 -0
  135. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/styles/furo-extensions.css.map +0 -0
  136. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/styles/furo.css +0 -0
  137. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/_static/styles/furo.css.map +0 -0
  138. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/api/api_analysis.html +0 -0
  139. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/api/api_execution.html +0 -0
  140. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/api/api_integrations.html +0 -0
  141. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/api/api_model.html +0 -0
  142. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/api/api_root.html +0 -0
  143. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/api/index.html +0 -0
  144. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/developer/architecture.html +0 -0
  145. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/developer/contributing.html +0 -0
  146. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/developer/extension_playbook.html +0 -0
  147. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/developer/releasing.html +0 -0
  148. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/developer/repository_map.html +0 -0
  149. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/developer/testing.html +0 -0
  150. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/docstring_style.html +0 -0
  151. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/drafts/execution_pipeline.html +0 -0
  152. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/drafts/glossary.html +0 -0
  153. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/drafts/repository_map.html +0 -0
  154. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/drafts/what_is_thundergraph_model.html +0 -0
  155. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/genindex.html +0 -0
  156. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/index.html +0 -0
  157. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/objects.inv +0 -0
  158. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/py-modindex.html +0 -0
  159. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/search.html +0 -0
  160. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/searchindex.js +0 -0
  161. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/concepts_evaluation.html +0 -0
  162. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/concepts_external_compute.html +0 -0
  163. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/concepts_parts.html +0 -0
  164. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/concepts_requirements.html +0 -0
  165. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/concepts_system.html +0 -0
  166. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/end_to_end_guide.html +0 -0
  167. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/faq.html +0 -0
  168. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/install.html +0 -0
  169. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/mental_model.html +0 -0
  170. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/overview.html +0 -0
  171. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/_build/html/user/quickstart.html +0 -0
  172. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/api/api_analysis.rst +0 -0
  173. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/api/api_execution.rst +0 -0
  174. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/api/api_integrations.rst +0 -0
  175. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/api/api_model.rst +0 -0
  176. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/api/api_root.rst +0 -0
  177. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/api/index.md +0 -0
  178. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/concepts_behavior.md +0 -0
  179. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/conf.py +0 -0
  180. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/developer/architecture.md +0 -0
  181. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/developer/contributing.md +0 -0
  182. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/developer/extension_playbook.md +0 -0
  183. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/developer/releasing.md +0 -0
  184. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/developer/repository_map.md +0 -0
  185. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/developer/testing.md +0 -0
  186. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/docstring_style.md +0 -0
  187. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/drafts/README.md +0 -0
  188. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/drafts/execution_pipeline.md +0 -0
  189. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/drafts/glossary.md +0 -0
  190. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/drafts/repository_map.md +0 -0
  191. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/drafts/what_is_thundergraph_model.md +0 -0
  192. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/index.md +0 -0
  193. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/concepts_behavior.md +0 -0
  194. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/concepts_evaluation.md +0 -0
  195. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/concepts_external_compute.md +0 -0
  196. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/concepts_parts.md +0 -0
  197. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/concepts_requirements.md +0 -0
  198. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/concepts_system.md +0 -0
  199. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/end_to_end_guide.md +0 -0
  200. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/faq.md +0 -0
  201. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/install.md +0 -0
  202. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/mental_model.md +0 -0
  203. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/overview.md +0 -0
  204. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/docs/user_docs/user/quickstart.md +0 -0
  205. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/__init__.py +0 -0
  206. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/IMPLEMENTATION_PLAN.md +0 -0
  207. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/README.md +0 -0
  208. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/__init__.py +0 -0
  209. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/integrations/__init__.py +0 -0
  210. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/integrations/adapters.py +0 -0
  211. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/integrations/bindings.py +0 -0
  212. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/product/__init__.py +0 -0
  213. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/product/aircraft.py +0 -0
  214. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/product/major_assemblies/__init__.py +0 -0
  215. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/product/major_assemblies/parts.py +0 -0
  216. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/program/__init__.py +0 -0
  217. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/program/cargo_jet_program.py +0 -0
  218. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/program/l1_requirement_packages.py +0 -0
  219. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/program/mission_context.py +0 -0
  220. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/reporting/__init__.py +0 -0
  221. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/reporting/extract.py +0 -0
  222. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/commercial_aircraft/reporting/snapshot.py +0 -0
  223. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/hpc_datacenter/README.md +0 -0
  224. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/hpc_datacenter/__init__.py +0 -0
  225. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/hpc_datacenter/program.py +0 -0
  226. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/__init__.py +0 -0
  227. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/integrations/__init__.py +0 -0
  228. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/integrations/adapters.py +0 -0
  229. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/integrations/bindings.py +0 -0
  230. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/integrations/preset_inputs.py +0 -0
  231. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/reporting/__init__.py +0 -0
  232. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/reporting/extract.py +0 -0
  233. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/reporting/snapshot.py +0 -0
  234. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/examples/mars_ntp_tug/tug_model.py +0 -0
  235. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/implementation_plan_instructions.md +0 -0
  236. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/logo.png +0 -0
  237. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/notebooks/_gen_leo_notebook.py +0 -0
  238. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/notebooks/aev_architecture.mmd +0 -0
  239. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/notebooks/cargo_jet_program.ipynb +0 -0
  240. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/notebooks/hpc_datacenter_parameter_sweep.ipynb +0 -0
  241. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/notebooks/mars_ntp_nuclear_tug.ipynb +0 -0
  242. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/reviewer_architype.md +0 -0
  243. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/__init__.py +0 -0
  244. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/__init__.py +0 -0
  245. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/analysis/__init__.py +0 -0
  246. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/analysis/test_analysis_workflows.py +0 -0
  247. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/behavior/__init__.py +0 -0
  248. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/behavior/test_behavior_e2e.py +0 -0
  249. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/evaluation/__init__.py +0 -0
  250. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/evaluation/test_allocate_parameter_wiring.py +0 -0
  251. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/evaluation/test_evaluation_e2e.py +0 -0
  252. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/evaluation/test_external_compute.py +0 -0
  253. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/evaluation/test_requirement_acceptance.py +0 -0
  254. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/evaluation/test_unitflow_evaluation.py +0 -0
  255. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/structural_models/__init__.py +0 -0
  256. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/structural_models/test_citations.py +0 -0
  257. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/structural_models/test_drive_system.py +0 -0
  258. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/structural_models/test_instantiation.py +0 -0
  259. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/test_commercial_aircraft_smoke.py +0 -0
  260. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/test_hpc_datacenter_smoke.py +0 -0
  261. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/integration/test_mars_ntp_tug_smoke.py +0 -0
  262. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/__init__.py +0 -0
  263. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/analysis/__init__.py +0 -0
  264. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/analysis/test_sweep_planning.py +0 -0
  265. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/__init__.py +0 -0
  266. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_behavior_runtime.py +0 -0
  267. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_behavior_scope.py +0 -0
  268. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_configured_model.py +0 -0
  269. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_configured_model_evaluate.py +0 -0
  270. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_dependency_graph.py +0 -0
  271. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_evaluator.py +0 -0
  272. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_instances.py +0 -0
  273. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_phase6_runtime.py +0 -0
  274. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_run_context.py +0 -0
  275. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/execution/test_validation.py +0 -0
  276. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/export/__init__.py +0 -0
  277. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/integrations/__init__.py +0 -0
  278. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/__init__.py +0 -0
  279. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_attribute_ref.py +0 -0
  280. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_compile_types.py +0 -0
  281. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_definition_context.py +0 -0
  282. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_elements.py +0 -0
  283. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_example_system_authoring_policy.py +0 -0
  284. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_expr.py +0 -0
  285. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_identity.py +0 -0
  286. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_new_api_validators.py +0 -0
  287. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_parameter_ref.py +0 -0
  288. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_refs.py +0 -0
  289. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_requirement_block.py +0 -0
  290. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tests/unit/model/test_system_authoring_restrictions.py +0 -0
  291. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/__init__.py +0 -0
  292. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/analysis/__init__.py +0 -0
  293. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/analysis/_coherence.py +0 -0
  294. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/analysis/compare_variants.py +0 -0
  295. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/analysis/impact.py +0 -0
  296. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/analysis/sweep.py +0 -0
  297. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/__init__.py +0 -0
  298. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/behavior.py +0 -0
  299. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/configured_model.py +0 -0
  300. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/connection_bindings.py +0 -0
  301. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/dependency_graph.py +0 -0
  302. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/evaluator.py +0 -0
  303. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/external_ops.py +0 -0
  304. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/graph_compiler.py +0 -0
  305. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/instances.py +0 -0
  306. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/requirements.py +0 -0
  307. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/rollups.py +0 -0
  308. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/run_context.py +0 -0
  309. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/solve_groups.py +0 -0
  310. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/validation.py +0 -0
  311. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/execution/value_slots.py +0 -0
  312. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/export/__init__.py +0 -0
  313. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/integrations/__init__.py +0 -0
  314. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/integrations/external_compute.py +0 -0
  315. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/__init__.py +0 -0
  316. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/declarations/__init__.py +0 -0
  317. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/declarations/behavior.py +0 -0
  318. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/declarations/values.py +0 -0
  319. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/definition_context.py +0 -0
  320. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/elements.py +0 -0
  321. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/expr.py +0 -0
  322. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/identity.py +0 -0
  323. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/tg_model/model/refs.py +0 -0
  324. {thundergraph_model-1.3.0 → thundergraph_model-1.3.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thundergraph-model
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: Executable systems modeling in Python
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "thundergraph-model"
7
- version = "1.3.0"
7
+ version = "1.3.1"
8
8
  description = "Executable systems modeling in Python"
9
9
  readme = "PYPI.md"
10
10
  requires-python = ">=3.11"
@@ -0,0 +1,385 @@
1
+ """Unit tests: behavioral declarations compile-time rules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import pytest
6
+
7
+ from tg_model.model.definition_context import ModelDefinitionError
8
+ from tg_model.model.elements import Part
9
+ from tg_model.execution.behavior import behavior_authoring_projection
10
+
11
+ try:
12
+ from common.services.tg_model_projector.bundle_walker import _behavioral_records # type: ignore[import]
13
+ from tg_model.execution.configured_model import instantiate as _tg_instantiate
14
+ _BUNDLE_WALKER_AVAILABLE = True
15
+ except ImportError:
16
+ _BUNDLE_WALKER_AVAILABLE = False
17
+
18
+
19
+ class GoodMachine(Part):
20
+ @classmethod
21
+ def define(cls, model): # type: ignore[override]
22
+ model.name("good_machine")
23
+ off = model.state("off", initial=True)
24
+ on = model.state("on")
25
+ ev = model.event("go")
26
+ model.action("noop")
27
+ model.transition(off, on, on=ev)
28
+
29
+
30
+ class DupTransition(Part):
31
+ @classmethod
32
+ def define(cls, model): # type: ignore[override]
33
+ model.name("dup_transition")
34
+ a = model.state("a", initial=True)
35
+ b = model.state("b")
36
+ e = model.event("x")
37
+ model.transition(a, b, on=e)
38
+ model.transition(a, b, on=e)
39
+
40
+
41
+ class TwoInitial(Part):
42
+ @classmethod
43
+ def define(cls, model): # type: ignore[override]
44
+ model.name("two_initial")
45
+ model.state("s1", initial=True)
46
+ model.state("s2", initial=True)
47
+
48
+
49
+ class StatesNoInitial(Part):
50
+ @classmethod
51
+ def define(cls, model): # type: ignore[override]
52
+ model.name("states_no_initial")
53
+ model.state("only", initial=False)
54
+
55
+
56
+ class BadEffect(Part):
57
+ @classmethod
58
+ def define(cls, model): # type: ignore[override]
59
+ model.name("bad_effect")
60
+ s = model.state("s", initial=True)
61
+ s2 = model.state("s2")
62
+ e = model.event("e")
63
+ model.transition(s, s2, on=e, effect="not_an_action")
64
+
65
+
66
+ def setup_function() -> None:
67
+ GoodMachine._reset_compilation()
68
+ DupTransition._reset_compilation()
69
+ TwoInitial._reset_compilation()
70
+ StatesNoInitial._reset_compilation()
71
+ BadEffect._reset_compilation()
72
+
73
+
74
+ class TestBehaviorCompile:
75
+ def test_valid_machine_compiles(self) -> None:
76
+ art = GoodMachine.compile()
77
+ assert len(art["behavior_transitions"]) == 1
78
+ assert art["behavior_transitions"][0]["from"] == "off"
79
+
80
+ def test_duplicate_transition_rejected(self) -> None:
81
+ DupTransition._reset_compilation()
82
+ with pytest.raises(ModelDefinitionError, match="Duplicate transition"):
83
+ DupTransition.compile()
84
+
85
+ def test_two_initial_states_rejected(self) -> None:
86
+ TwoInitial._reset_compilation()
87
+ with pytest.raises(ModelDefinitionError, match="exactly one initial"):
88
+ TwoInitial.compile()
89
+
90
+ def test_states_without_initial_rejected(self) -> None:
91
+ StatesNoInitial._reset_compilation()
92
+ with pytest.raises(ModelDefinitionError, match="exactly one initial"):
93
+ StatesNoInitial.compile()
94
+
95
+ def test_unknown_effect_rejected(self) -> None:
96
+ BadEffect._reset_compilation()
97
+ with pytest.raises(ModelDefinitionError, match="action"):
98
+ BadEffect.compile()
99
+
100
+
101
+ # ---------------------------------------------------------------------------
102
+ # then= parameter on model.action()
103
+ # ---------------------------------------------------------------------------
104
+
105
+ class ThenChain(Part):
106
+ """Linear flow declared via then=: a → b → c."""
107
+ @classmethod
108
+ def define(cls, model): # type: ignore[override]
109
+ model.name("then_chain")
110
+ model.action("a", then="b")
111
+ model.action("b", then="c")
112
+ model.action("c")
113
+
114
+
115
+ class ThenWithEffect(Part):
116
+ """then= and effect= can coexist on the same action."""
117
+ @classmethod
118
+ def define(cls, model): # type: ignore[override]
119
+ model.name("then_with_effect")
120
+ model.action("init", then="run", effect=lambda ctx, p: None)
121
+ model.action("run")
122
+
123
+
124
+ class ThenBadTarget(Part):
125
+ """then= pointing at an undeclared action must be rejected at compile time."""
126
+ @classmethod
127
+ def define(cls, model): # type: ignore[override]
128
+ model.name("then_bad_target")
129
+ model.action("a", then="does_not_exist")
130
+
131
+
132
+ class ThenSelfLoop(Part):
133
+ """Circular then= (A→A) is allowed — activity diagram renders a loop."""
134
+ @classmethod
135
+ def define(cls, model): # type: ignore[override]
136
+ model.name("then_self_loop")
137
+ model.action("tick", then="tick")
138
+
139
+
140
+ class ThenCycle(Part):
141
+ """Longer cycle (A→B→A) is allowed — diagram renders the cycle."""
142
+ @classmethod
143
+ def define(cls, model): # type: ignore[override]
144
+ model.name("then_cycle")
145
+ model.action("sense", then="plan")
146
+ model.action("plan", then="sense")
147
+
148
+
149
+ # ---------------------------------------------------------------------------
150
+ # then= pointing at control nodes (decision / merge / fork_join)
151
+ # ---------------------------------------------------------------------------
152
+
153
+ class ThenToMerge(Part):
154
+ """action.then= pointing at a merge control node must compile and project."""
155
+ @classmethod
156
+ def define(cls, model): # type: ignore[override]
157
+ model.name("then_to_merge")
158
+ loop = model.merge("loop_back", then_action="tick")
159
+ model.action("tick", then="loop_back") # → merge (control node)
160
+ model.action("loop_back") # should never be reached; merge owns the name
161
+
162
+
163
+ class ThenToMergeSimple(Part):
164
+ """Simplest: an action chains into a merge which loops back."""
165
+ @classmethod
166
+ def define(cls, model): # type: ignore[override]
167
+ model.name("then_to_merge_simple")
168
+ model.merge("gate", then_action="run")
169
+ model.action("run", then="gate") # run → gate (merge) → run (loop)
170
+
171
+
172
+ class ThenToForkJoin(Part):
173
+ """action.then= pointing at a fork_join must compile and resolve to __fork."""
174
+ @classmethod
175
+ def define(cls, model): # type: ignore[override]
176
+ model.name("then_to_fork_join")
177
+ model.action("prepare", then="split") # → fork_join entry node
178
+ model.action("branch_a")
179
+ model.action("branch_b")
180
+ model.action("after_fork")
181
+ model.fork_join(
182
+ "split",
183
+ branches=[["branch_a"], ["branch_b"]],
184
+ then_action="after_fork",
185
+ )
186
+
187
+
188
+ class ThenToDecision(Part):
189
+ """action.then= pointing at a decision must compile and appear in successions."""
190
+ @classmethod
191
+ def define(cls, model): # type: ignore[override]
192
+ model.name("then_to_decision")
193
+ model.action("evaluate", then="check") # → decision
194
+ ok = model.guard("ok", predicate=lambda ctx, p: True)
195
+ model.action("pass_action")
196
+ model.action("fail_action")
197
+ model.decision(
198
+ "check",
199
+ branches=[(ok, "pass_action"), (None, "fail_action")],
200
+ )
201
+
202
+
203
+ class ThenToForkBadBranchStep(Part):
204
+ """fork_join branch steps must still be plain actions — not control nodes."""
205
+ @classmethod
206
+ def define(cls, model): # type: ignore[override]
207
+ model.name("then_to_fork_bad_branch_step")
208
+ model.merge("my_merge", then_action="after")
209
+ model.action("after")
210
+ model.action("real_action")
211
+ model.fork_join(
212
+ "bad_fork",
213
+ branches=[["my_merge"]], # ← merge inside a branch step — should fail
214
+ then_action="after",
215
+ )
216
+
217
+
218
+ def setup_function() -> None: # noqa: F811
219
+ for cls in (
220
+ GoodMachine, DupTransition, TwoInitial, StatesNoInitial, BadEffect,
221
+ ThenChain, ThenWithEffect, ThenBadTarget, ThenSelfLoop, ThenCycle,
222
+ ThenToMerge, ThenToMergeSimple, ThenToForkJoin, ThenToDecision,
223
+ ThenToForkBadBranchStep,
224
+ ):
225
+ cls._reset_compilation()
226
+
227
+
228
+ class TestThenParameter:
229
+ def test_then_chain_compiles(self) -> None:
230
+ art = ThenChain.compile()
231
+ nodes = art["nodes"]
232
+ assert nodes["a"]["metadata"]["_then"] == "b"
233
+ assert nodes["b"]["metadata"]["_then"] == "c"
234
+ assert nodes["c"]["metadata"].get("_then") is None
235
+
236
+ def test_then_chain_projection_returns_actions(self) -> None:
237
+ ThenChain._reset_compilation()
238
+ proj = behavior_authoring_projection(ThenChain)
239
+ assert "a" in proj["actions"]
240
+ assert "b" in proj["actions"]
241
+ assert "c" in proj["actions"]
242
+
243
+ def test_then_with_effect_compiles(self) -> None:
244
+ art = ThenWithEffect.compile()
245
+ meta_init = art["nodes"]["init"]["metadata"]
246
+ assert meta_init["_then"] == "run"
247
+ assert callable(meta_init["_effect"])
248
+
249
+ def test_then_bad_target_rejected(self) -> None:
250
+ ThenBadTarget._reset_compilation()
251
+ with pytest.raises(ModelDefinitionError, match="does_not_exist"):
252
+ ThenBadTarget.compile()
253
+
254
+ def test_then_self_loop_allowed(self) -> None:
255
+ """A→A cycle must not raise — diagram renders a self-loop."""
256
+ ThenSelfLoop._reset_compilation()
257
+ art = ThenSelfLoop.compile()
258
+ assert art["nodes"]["tick"]["metadata"]["_then"] == "tick"
259
+
260
+ def test_then_cycle_allowed(self) -> None:
261
+ """A→B→A cycle must not raise — diagram renders the loop."""
262
+ ThenCycle._reset_compilation()
263
+ art = ThenCycle.compile()
264
+ assert art["nodes"]["sense"]["metadata"]["_then"] == "plan"
265
+ assert art["nodes"]["plan"]["metadata"]["_then"] == "sense"
266
+
267
+ def test_ref_returned_has_correct_kind(self) -> None:
268
+ """model.action() must still return a Ref with kind='action' when then= is set."""
269
+ class _Inline(Part):
270
+ @classmethod
271
+ def define(cls, model): # type: ignore[override]
272
+ model.name("inline_ref_check")
273
+ ref = model.action("x", then="y")
274
+ model.action("y")
275
+ assert ref.kind == "action"
276
+ assert ref.path == ("x",)
277
+
278
+ _Inline._reset_compilation()
279
+ _Inline.compile() # assertion runs inside define()
280
+
281
+ def test_action_without_then_has_no_then_metadata(self) -> None:
282
+ """Effect-only actions must not have _then in compiled metadata."""
283
+ ThenChain._reset_compilation()
284
+ art = ThenChain.compile()
285
+ assert "_then" not in art["nodes"]["c"]["metadata"]
286
+
287
+
288
+ # ---------------------------------------------------------------------------
289
+ # then= pointing at control nodes
290
+ # ---------------------------------------------------------------------------
291
+
292
+ class TestThenToControlNode:
293
+ """then= on a plain action may target a decision, merge, or fork_join."""
294
+
295
+ def test_then_to_merge_compiles(self) -> None:
296
+ ThenToMergeSimple._reset_compilation()
297
+ art = ThenToMergeSimple.compile()
298
+ assert art["nodes"]["run"]["metadata"]["_then"] == "gate"
299
+
300
+ def test_then_to_fork_join_compiles(self) -> None:
301
+ ThenToForkJoin._reset_compilation()
302
+ art = ThenToForkJoin.compile()
303
+ assert art["nodes"]["prepare"]["metadata"]["_then"] == "split"
304
+
305
+ def test_then_to_decision_compiles(self) -> None:
306
+ ThenToDecision._reset_compilation()
307
+ art = ThenToDecision.compile()
308
+ assert art["nodes"]["evaluate"]["metadata"]["_then"] == "check"
309
+
310
+ def test_then_to_nonexistent_still_rejected(self) -> None:
311
+ """A then= pointing at a completely undeclared name still raises."""
312
+ class _Bad(Part):
313
+ @classmethod
314
+ def define(cls, model): # type: ignore[override]
315
+ model.name("bad_ctrl_target")
316
+ model.action("a", then="ghost_node")
317
+ _Bad._reset_compilation()
318
+ with pytest.raises(ModelDefinitionError, match="ghost_node"):
319
+ _Bad.compile()
320
+
321
+ def test_fork_branch_step_must_be_plain_action(self) -> None:
322
+ """Control nodes are NOT valid as fork_join branch steps."""
323
+ ThenToForkBadBranchStep._reset_compilation()
324
+ with pytest.raises(ModelDefinitionError, match="my_merge"):
325
+ ThenToForkBadBranchStep.compile()
326
+
327
+ @pytest.mark.skipif(not _BUNDLE_WALKER_AVAILABLE, reason="bundle_walker not in path")
328
+ def test_then_to_fork_join_generates_succession_to_fork_node(self) -> None:
329
+ """bundle_walker must emit a succession from 'prepare' to 'split__fork'."""
330
+ ThenToForkJoin._reset_compilation()
331
+ cm = _tg_instantiate(ThenToForkJoin)
332
+ part = next(iter(cm.id_registry.values())) # only one PartInstance
333
+ beh = _behavioral_records(part)
334
+ src_dst_pairs = {
335
+ (s["source_stable_id"], s["target_stable_id"])
336
+ for s in beh["successions"]
337
+ }
338
+ action_map = {a["name"]: a["stable_id"] for a in beh["actions"]}
339
+ prepare_sid = action_map.get("prepare")
340
+ fork_sid = action_map.get("split__fork")
341
+ assert prepare_sid is not None, "prepare action missing from bundle"
342
+ assert fork_sid is not None, "split__fork node missing from bundle"
343
+ assert (prepare_sid, fork_sid) in src_dst_pairs, (
344
+ "No succession edge from 'prepare' to 'split__fork' found"
345
+ )
346
+
347
+ @pytest.mark.skipif(not _BUNDLE_WALKER_AVAILABLE, reason="bundle_walker not in path")
348
+ def test_then_to_merge_generates_succession_to_merge_node(self) -> None:
349
+ """bundle_walker must emit a succession from 'run' to the merge node."""
350
+ ThenToMergeSimple._reset_compilation()
351
+ cm = _tg_instantiate(ThenToMergeSimple)
352
+ part = next(iter(cm.id_registry.values()))
353
+ beh = _behavioral_records(part)
354
+ src_dst_pairs = {
355
+ (s["source_stable_id"], s["target_stable_id"])
356
+ for s in beh["successions"]
357
+ }
358
+ action_map = {a["name"]: a["stable_id"] for a in beh["actions"]}
359
+ run_sid = action_map.get("run")
360
+ gate_sid = action_map.get("gate")
361
+ assert run_sid is not None, "run action missing from bundle"
362
+ assert gate_sid is not None, "gate merge node missing from bundle"
363
+ assert (run_sid, gate_sid) in src_dst_pairs, (
364
+ "No succession edge from 'run' to 'gate' merge found"
365
+ )
366
+
367
+ @pytest.mark.skipif(not _BUNDLE_WALKER_AVAILABLE, reason="bundle_walker not in path")
368
+ def test_then_to_decision_generates_succession_to_decision_node(self) -> None:
369
+ """bundle_walker must emit a succession from 'evaluate' to the decision node."""
370
+ ThenToDecision._reset_compilation()
371
+ cm = _tg_instantiate(ThenToDecision)
372
+ part = next(iter(cm.id_registry.values()))
373
+ beh = _behavioral_records(part)
374
+ src_dst_pairs = {
375
+ (s["source_stable_id"], s["target_stable_id"])
376
+ for s in beh["successions"]
377
+ }
378
+ action_map = {a["name"]: a["stable_id"] for a in beh["actions"]}
379
+ evaluate_sid = action_map.get("evaluate")
380
+ check_sid = action_map.get("check")
381
+ assert evaluate_sid is not None, "evaluate action missing from bundle"
382
+ assert check_sid is not None, "check decision node missing from bundle"
383
+ assert (evaluate_sid, check_sid) in src_dst_pairs, (
384
+ "No succession edge from 'evaluate' to 'check' decision found"
385
+ )
@@ -47,13 +47,13 @@ def test_guard_on_transition_compiles() -> None:
47
47
 
48
48
  def test_decision_unknown_action_rejected() -> None:
49
49
  BadDecisionAction._reset_compilation()
50
- with pytest.raises(ModelDefinitionError, match="unknown action"):
50
+ with pytest.raises(ModelDefinitionError, match="unknown flow node"):
51
51
  BadDecisionAction.compile()
52
52
 
53
53
 
54
54
  def test_merge_unknown_then_action_rejected() -> None:
55
55
  BadMergeAction._reset_compilation()
56
- with pytest.raises(ModelDefinitionError, match="unknown action"):
56
+ with pytest.raises(ModelDefinitionError, match="unknown flow node"):
57
57
  BadMergeAction.compile()
58
58
 
59
59
 
@@ -242,24 +242,46 @@ def _runtime_behavior_transitions(ctx: Any) -> list[dict[str, Any]]:
242
242
  return out
243
243
 
244
244
 
245
- def _validate_action_name(ctx: Any, action_name: str) -> None:
245
+ # Kinds that are valid targets for flow-routing declarations (then=, branch targets, etc.)
246
+ _FLOW_NODE_KINDS = frozenset({"action", "decision", "merge", "fork_join"})
247
+
248
+
249
+ def _validate_action_name(ctx: Any, action_name: str, *, allow_control_nodes: bool = False) -> None:
250
+ """Validate that *action_name* refers to a declared behavioral node.
251
+
252
+ When *allow_control_nodes* is True the target may be any flow node
253
+ (action, decision, merge, or fork_join) — used for then= on actions and for
254
+ then_action= / branch targets on control nodes.
255
+
256
+ When False (the default) only plain ``model.action()`` declarations are
257
+ accepted — used for fork_join branch steps and sequence steps where each
258
+ element must be a concrete executable action.
259
+ """
246
260
  decl = ctx.nodes.get(action_name)
247
- if decl is None or decl.kind != "action":
248
- raise ModelDefinitionError(
249
- f"behavior references unknown action {action_name!r}; declare with model.action(...)"
250
- )
261
+ if allow_control_nodes:
262
+ if decl is None or decl.kind not in _FLOW_NODE_KINDS:
263
+ raise ModelDefinitionError(
264
+ f"behavior references unknown flow node {action_name!r}; "
265
+ "declare with model.action(), model.decision(), model.merge(), or model.fork_join(...)"
266
+ )
267
+ else:
268
+ if decl is None or decl.kind != "action":
269
+ raise ModelDefinitionError(
270
+ f"behavior references unknown action {action_name!r}; declare with model.action(...)"
271
+ )
251
272
 
252
273
 
253
274
  def _validate_behavior_control_flow(ctx: Any) -> None:
254
275
  for name, decl in ctx.nodes.items():
255
276
  if decl.kind == "decision":
256
277
  for gref, aname in decl.metadata.get("_decision_branches", ()):
257
- _validate_action_name(ctx, aname)
278
+ # Branch targets can be any flow node (action, decision, merge, fork_join)
279
+ _validate_action_name(ctx, aname, allow_control_nodes=True)
258
280
  if gref is not None and ctx.nodes.get(gref.path[-1], None) is None:
259
281
  raise ModelDefinitionError(f"decision {name!r} references unknown guard")
260
282
  default_a = decl.metadata.get("_default_action")
261
283
  if default_a:
262
- _validate_action_name(ctx, default_a)
284
+ _validate_action_name(ctx, default_a, allow_control_nodes=True)
263
285
  dm = decl.metadata.get("_decision_merge")
264
286
  if dm:
265
287
  mdecl = ctx.nodes.get(dm)
@@ -269,22 +291,27 @@ def _validate_behavior_control_flow(ctx: Any) -> None:
269
291
  )
270
292
  if decl.kind == "fork_join":
271
293
  for seq in decl.metadata.get("_fj_branches", ()):
294
+ # Branch steps must be plain actions — they are executed sequentially
272
295
  for aname in seq:
273
296
  _validate_action_name(ctx, aname)
274
297
  then_a = decl.metadata.get("_fj_then")
275
298
  if then_a:
276
- _validate_action_name(ctx, then_a)
299
+ # Post-join rendezvous can be any flow node
300
+ _validate_action_name(ctx, then_a, allow_control_nodes=True)
277
301
  if decl.kind == "merge":
278
302
  then_m = decl.metadata.get("_merge_then")
279
303
  if then_m:
280
- _validate_action_name(ctx, then_m)
304
+ # Merge output can be any flow node
305
+ _validate_action_name(ctx, then_m, allow_control_nodes=True)
281
306
  if decl.kind == "sequence":
282
307
  for aname in decl.metadata.get("_sequence_steps", ()):
308
+ # Sequence steps must be plain actions
283
309
  _validate_action_name(ctx, aname)
284
310
  if decl.kind == "action":
285
311
  then_name = decl.metadata.get("_then")
286
312
  if then_name is not None:
287
- _validate_action_name(ctx, then_name)
313
+ # then= can point at any flow node: action, decision, merge, or fork_join
314
+ _validate_action_name(ctx, then_name, allow_control_nodes=True)
288
315
 
289
316
 
290
317
  def _cache_behavior_runtime_facets(element_cls: type, ctx: Any) -> None: