diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e7673c..02e1cd4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,9 @@ on: push: pull_request: +permissions: + contents: read + jobs: lint-and-test: runs-on: ubuntu-latest @@ -22,14 +25,4 @@ jobs: - name: Lint (ruff) run: ruff check . - name: Tests (pytest) - run: | - set +e - # tests/ is authored separately by the maintainer and tests/fixtures/ is - # gitignored, so a fresh checkout can have no tests/ directory at all. - # Treat a missing dir (pytest exit 4) or "no tests collected" (exit 5) - # as a scaffold pass until real tests land. - if [ ! -d tests ]; then echo "No tests/ directory yet — passing scaffold."; exit 0; fi - pytest -q tests/ - code=$? - if [ "$code" -eq 5 ]; then echo "No tests collected yet — passing scaffold."; exit 0; fi - exit $code + run: pytest -q --cov=simaticml_decoder --cov-report=term-missing --cov-fail-under=70 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d8ec91b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,72 @@ +name: PyPI Release + +on: + push: + tags: + - "v*.*.*" + +permissions: + contents: read + +jobs: + checks: + name: Checks (${{ matrix.python-version }}) + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.11", "3.12"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install (editable, with dev extras) + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + - name: Lint (ruff) + run: ruff check . + - name: Tests (pytest) + run: pytest -q --cov=simaticml_decoder --cov-report=term-missing --cov-fail-under=80 + + build: + name: Build distribution + runs-on: ubuntu-latest + needs: checks + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Install build tools + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + - name: Check release version + run: python scripts/check_release_version.py "${{ github.ref_name }}" + - name: Build package + run: python -m build + - name: Validate package metadata + run: python -m twine check dist/* + - name: Upload distributions + uses: actions/upload-artifact@v4 + with: + name: python-distributions + path: dist/ + + publish: + name: Publish to PyPI + runs-on: ubuntu-latest + needs: build + environment: pypi + permissions: + contents: read + id-token: write + steps: + - name: Download distributions + uses: actions/download-artifact@v4 + with: + name: python-distributions + path: dist/ + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.gitignore b/.gitignore index a3d6548..01a64fa 100644 --- a/.gitignore +++ b/.gitignore @@ -322,5 +322,4 @@ graphify-out/.graphify_python graphify-out/.graphify_root graphify-out/cache/ docs/ -tests/fixtures/ .codex/ \ No newline at end of file diff --git a/README.md b/README.md index 8899a22..e60a360 100644 --- a/README.md +++ b/README.md @@ -47,12 +47,18 @@ scope — the tool operates on already-exported XML. ## Install +```bash +pip install simaticml-decoder +``` + +For local development: + ```bash pip install -e ".[dev]" ``` Runtime dependencies: none (standard-library `xml.etree.ElementTree`). The `dev` -extra pulls `ruff` and `pytest`. +extra pulls lint, test, coverage, build, and package-validation tools. ## Usage @@ -70,6 +76,34 @@ tests/ authored separately; run by CI .github/workflows/ci.yml ruff + pytest on push / PR ``` +## Release + +Publishing is handled by GitHub Actions and PyPI Trusted Publishing. A package is +published only when a `vX.Y.Z` tag is pushed and the release workflow passes +lint, tests, coverage, version checks, package build, and `twine check`. + +Before the first public release: + +1. Create or confirm the `simaticml-decoder` project on PyPI. +2. Enable 2FA on the PyPI account. +3. Add a PyPI Trusted Publisher for `Czarnak/simaticml-decoder`, workflow + `.github/workflows/release.yml`, environment `pypi`. +4. Create the GitHub environment `pypi`; requiring manual approval is recommended. +5. Confirm ownership metadata and licensing before publishing. + +Release commands: + +```bash +python -m pip install -e ".[dev]" +ruff check . +pytest -q --cov=simaticml_decoder --cov-report=term-missing --cov-fail-under=80 +python scripts/check_release_version.py v0.1.0 +python -m build +python -m twine check dist/* +git tag v0.1.0 +git push origin v0.1.0 +``` + ## Future Support for new YAML-like S7 PLCs export formats. diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index 3659a63..e116a9f 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - simaticml-decoder (2026-06-03) ## Corpus Check -- 10 files · ~10,366 words +- 18 files · ~12,578 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 226 nodes · 416 edges · 8 communities -- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS · INFERRED: 1 edges (avg confidence: 0.5) +- 315 nodes · 710 edges · 13 communities +- Extraction: 98% EXTRACTED · 2% INFERRED · 0% AMBIGUOUS · INFERRED: 16 edges (avg confidence: 0.78) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `806b0f11` +- Built from commit: `5babe400` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -23,75 +23,108 @@ - [[_COMMUNITY_Folding Algorithms|Folding Algorithms]] - [[_COMMUNITY_Instruction Catalog|Instruction Catalog]] - [[_COMMUNITY_Operand Rendering|Operand Rendering]] +- [[_COMMUNITY_Community 8|Community 8]] +- [[_COMMUNITY_Community 9|Community 9]] +- [[_COMMUNITY_Community 10|Community 10]] +- [[_COMMUNITY_Community 11|Community 11]] +- [[_COMMUNITY_Community 12|Community 12]] ## God Nodes (most connected - your core abstractions) -1. `_NetFolder` - 29 edges -2. `_children()` - 14 edges -3. `_parse_block()` - 14 edges -4. `_ln()` - 13 edges -5. `_child()` - 13 edges -6. `_parse_flgnet()` - 10 edges -7. `_materialize()` - 9 edges -8. `_parse_access()` - 9 edges -9. `_expr()` - 8 edges -10. `_parse_member()` - 8 edges +1. `_NetFolder` - 30 edges +2. `_children()` - 15 edges +3. `_parse_block()` - 15 edges +4. `_ln()` - 14 edges +5. `_child()` - 14 edges +6. `_scl_of()` - 14 edges +7. `_parse_flgnet()` - 11 edges +8. `_materialize()` - 10 edges +9. `_parse_access()` - 10 edges +10. `_access()` - 10 edges ## Surprising Connections (you probably didn't know these) -- `_NetFolder` --uses--> `Category` [INFERRED] - fold.py → instructions.py - -## Communities (8 total, 0 thin omitted) +- `Render the SCL text artifact. Raises until implemented (Phase 3).` --rationale_for--> `emit_scl()` [EXTRACTED] + emit.py → src/simaticml_decoder/emit.py +- `Build the JSON-serialisable sidecar dict. Raises until implemented.` --rationale_for--> `emit_sidecar()` [EXTRACTED] + emit.py → src/simaticml_decoder/emit.py +- `_pr()` --calls--> `Endpoint` [INFERRED] + tests/test_fold.py → src/simaticml_decoder/model.py +- `_ic()` --calls--> `Endpoint` [INFERRED] + tests/test_fold.py → src/simaticml_decoder/model.py +- `_nc()` --calls--> `Endpoint` [INFERRED] + tests/test_fold.py → src/simaticml_decoder/model.py + +## Communities (13 total, 0 thin omitted) ### Community 0 - "XML Parsing Helpers" -Cohesion: 0.08 +Cohesion: 0.09 Nodes (25): _and(), _contains_var(), _expr_key(), _factor_or(), _fold(), fold_block(), fold_network(), _materialize() (+17 more) ### Community 1 - "Network Graph Folding" -Cohesion: 0.11 +Cohesion: 0.14 Nodes (47): _block_kind(), _child(), _child_text(), _children(), _extra_attrs(), _find_block_element(), _first_element_child(), _inline_comment() (+39 more) ### Community 2 - "Semantic IR Types" -Cohesion: 0.06 -Nodes (38): Enum, Category, AssignKind, EdgeKind, Access, Address, Block, BlockKind (+30 more) +Cohesion: 0.1 +Nodes (35): Enum, Category, AssignKind, EdgeKind, Access, Address, Block, BlockKind (+27 more) ### Community 3 - "XML Model Types" -Cohesion: 0.13 -Nodes (28): _box_body(), _box_call_form(), _build_trace(), _claim(), emit_scl(), emit_sidecar(), _expr(), _expr_core() (+20 more) +Cohesion: 0.17 +Nodes (29): _box_body(), _box_call_form(), _build_trace(), _claim(), emit_scl(), emit_sidecar(), _expr(), _expr_core() (+21 more) ### Community 4 - "CLI And SCL Emission" -Cohesion: 0.08 -Nodes (24): And, Assign, BoxCall, Compare, DecodedBlock, Edge, FlipFlop, Literal (+16 more) +Cohesion: 0.14 +Nodes (20): build_parser(), main(), Command-line entry point: one exported SimaticML block in, SCL and/or JSON out., _report(), _write(), simaticml-decoder — SimaticML LAD/FBD -> readable SCL + JSON metadata sidecar., Render a model.Access into its TIA display string. Split out because it is need, model.Access -> display string (TIA conventions; see module docstring). (+12 more) ### Community 5 - "Folding Algorithms" -Cohesion: 0.19 -Nodes (13): build_parser(), main(), Command-line entry point: one exported SimaticML block in, SCL and/or JSON out., _report(), _write(), simaticml-decoder — SimaticML LAD/FBD -> readable SCL + JSON metadata sidecar., Render a model.Access into its TIA display string. Split out because it is need, model.Access -> display string (TIA conventions; see module docstring). (+5 more) +Cohesion: 0.13 +Nodes (24): And, Assign, BoxCall, Compare, DecodedBlock, Edge, FlipFlop, Literal (+16 more) ### Community 6 - "Instruction Catalog" -Cohesion: 0.33 -Nodes (8): _box(), _cmp(), _coil(), lookup(), _pf(), The instruction catalog — deliberately *data, not logic*. fold.py reasons about, Return the Spec for a Part name, or None (caller folds to ir.Unhandled)., Spec +Cohesion: 0.17 +Nodes (15): Unit tests for emit — ir.* -> SCL text + JSON sidecar. IR objects are construct, _scl_of(), test_box_add_with_enable_guard(), test_box_inc_under_rising_edge(), test_box_move_assignment_form(), test_box_timer_instance_call_form(), test_flipflop_reset_priority(), test_latch_is_called_out() (+7 more) ### Community 7 - "Operand Rendering" -Cohesion: 0.36 -Nodes (7): _local(), Reconstruct an SCL network from its tokenised AST. SCL networks do not *fold* —, model.StructuredText -> SCL source text. parse._parse_structured_text store, Render an SCL comment. Multi-line content becomes a (* ... *) block., reconstruct(), _render_comment(), _render_element() +Cohesion: 0.13 +Nodes (14): fixture_file(), load_fixture(), Shared pytest setup and fixture-corpus helpers. The sample XML exports live in, Return a callable name -> Path, skipping if the fixture is absent., Return a callable name -> model.Document, skipping if the fixture is absent., Unit tests for the CLI. Error paths are self-contained; happy paths use the fixt, test_format_scl_only(), test_happy_path_writes_both() (+6 more) + +### Community 8 - "Community 8" +Cohesion: 0.35 +Nodes (15): Endpoint, First endpoint is the source; the rest are sinks (fan-out)., Wire, _ic(), _nc(), _net(), _pr(), Unit tests for fold — model.* -> ir.* (the wire-graph folding). Networks are bu (+7 more) + +### Community 9 - "Community 9" +Cohesion: 0.3 +Nodes (11): _access(), Unit tests for operand.render — the Access -> TIA display-string conventions., test_address_bool_byte_bit(), test_address_word(), test_array_index(), test_bit_slice_renders_percent_x(), test_dotted_local_path(), test_global_variable_quotes_root_only() (+3 more) + +### Community 10 - "Community 10" +Cohesion: 0.42 +Nodes (8): _box(), _cmp(), _coil(), lookup(), _pf(), The instruction catalog — deliberately *data, not logic*. fold.py reasons about, Return the Spec for a Part name, or None (caller folds to ir.Unhandled)., Spec + +### Community 11 - "Community 11" +Cohesion: 0.48 +Nodes (6): check_release_version(), main(), Validate that a release tag matches the package versions., read_init_version(), read_project_version(), version_from_tag() + +### Community 12 - "Community 12" +Cohesion: 0.6 +Nodes (5): test_check_release_version_accepts_matching_v_tag(), test_check_release_version_rejects_non_v_tag(), test_check_release_version_reports_init_mismatch(), test_check_release_version_reports_pyproject_mismatch(), _write_project() ## Knowledge Gaps -- **82 isolated node(s):** `Command-line entry point: one exported SimaticML block in, SCL and/or JSON out.`, `Phase 3: ir.* -> readable SCL text + JSON metadata sidecar. Two artifacts (read`, `Render the readable SCL text artifact for a decoded block.`, `Build the JSON-serialisable sidecar dict (schema in plan §7).`, `UId -> short claim, so any rendered statement is traceable to its net.` (+77 more) +- **56 isolated node(s):** `Validate that a release tag matches the package versions.`, `Render the readable SCL text artifact for a decoded block.`, `Build the JSON-serialisable sidecar dict (schema in plan §7).`, `UId -> short claim, so any rendered statement is traceable to its net.`, `model.Document -> ir.DecodedBlock (folded networks + xref + inventory).` (+51 more) These have ≤1 connection - possible missing edges or undocumented components. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ - **Why does `_NetFolder` connect `XML Parsing Helpers` to `Semantic IR Types`?** - _High betweenness centrality (0.189) - this node is a cross-community bridge._ -- **Why does `Category` connect `Semantic IR Types` to `XML Parsing Helpers`, `Instruction Catalog`?** - _High betweenness centrality (0.079) - this node is a cross-community bridge._ -- **What connects `Command-line entry point: one exported SimaticML block in, SCL and/or JSON out.`, `Phase 3: ir.* -> readable SCL text + JSON metadata sidecar. Two artifacts (read`, `Render the readable SCL text artifact for a decoded block.` to the rest of the system?** - _82 weakly-connected nodes found - possible documentation gaps or missing edges._ + _High betweenness centrality (0.109) - this node is a cross-community bridge._ +- **Why does `Wire` connect `Community 8` to `Semantic IR Types`?** + _High betweenness centrality (0.051) - this node is a cross-community bridge._ +- **Why does `Category` connect `Semantic IR Types` to `XML Parsing Helpers`, `Community 10`?** + _High betweenness centrality (0.050) - this node is a cross-community bridge._ +- **What connects `Validate that a release tag matches the package versions.`, `Render the readable SCL text artifact for a decoded block.`, `Build the JSON-serialisable sidecar dict (schema in plan §7).` to the rest of the system?** + _56 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `XML Parsing Helpers` be split into smaller, more focused modules?** - _Cohesion score 0.08 - nodes in this community are weakly interconnected._ + _Cohesion score 0.09 - nodes in this community are weakly interconnected._ - **Should `Network Graph Folding` be split into smaller, more focused modules?** - _Cohesion score 0.11 - nodes in this community are weakly interconnected._ + _Cohesion score 0.14 - nodes in this community are weakly interconnected._ - **Should `Semantic IR Types` be split into smaller, more focused modules?** - _Cohesion score 0.06 - nodes in this community are weakly interconnected._ -- **Should `XML Model Types` be split into smaller, more focused modules?** - _Cohesion score 0.13 - nodes in this community are weakly interconnected._ \ No newline at end of file + _Cohesion score 0.1 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json index 3e3c68d..42a7fef 100644 --- a/graphify-out/graph.json +++ b/graphify-out/graph.json @@ -3,73 +3,136 @@ "multigraph": false, "graph": {}, "nodes": [ + { + "label": "check_release_version.py", + "file_type": "code", + "source_file": "scripts/check_release_version.py", + "source_location": "L1", + "id": "scripts_check_release_version_py", + "community": 11, + "norm_label": "check_release_version.py" + }, + { + "label": "read_project_version()", + "file_type": "code", + "source_file": "scripts/check_release_version.py", + "source_location": "L15", + "id": "scripts_check_release_version_read_project_version", + "community": 11, + "norm_label": "read_project_version()" + }, + { + "label": "read_init_version()", + "file_type": "code", + "source_file": "scripts/check_release_version.py", + "source_location": "L21", + "id": "scripts_check_release_version_read_init_version", + "community": 11, + "norm_label": "read_init_version()" + }, + { + "label": "version_from_tag()", + "file_type": "code", + "source_file": "scripts/check_release_version.py", + "source_location": "L29", + "id": "scripts_check_release_version_version_from_tag", + "community": 11, + "norm_label": "version_from_tag()" + }, + { + "label": "check_release_version()", + "file_type": "code", + "source_file": "scripts/check_release_version.py", + "source_location": "L38", + "id": "scripts_check_release_version_check_release_version", + "community": 11, + "norm_label": "check_release_version()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "scripts/check_release_version.py", + "source_location": "L53", + "id": "scripts_check_release_version_main", + "community": 11, + "norm_label": "main()" + }, + { + "label": "Validate that a release tag matches the package versions.", + "file_type": "rationale", + "source_file": "scripts/check_release_version.py", + "source_location": "L1", + "id": "scripts_check_release_version_rationale_1", + "community": 11, + "norm_label": "validate that a release tag matches the package versions." + }, { "label": "cli.py", "file_type": "code", - "source_file": "cli.py", + "source_file": "src/simaticml_decoder/cli.py", "source_location": "L1", - "id": "cli_py", - "community": 5, + "id": "src_simaticml_decoder_cli_py", + "community": 4, "norm_label": "cli.py" }, { "label": "build_parser()", "file_type": "code", - "source_file": "cli.py", + "source_file": "src/simaticml_decoder/cli.py", "source_location": "L37", "id": "simaticml_decoder_cli_build_parser", - "community": 5, + "community": 4, "norm_label": "build_parser()" }, { "label": "main()", "file_type": "code", - "source_file": "cli.py", + "source_file": "src/simaticml_decoder/cli.py", "source_location": "L57", "id": "simaticml_decoder_cli_main", - "community": 5, + "community": 4, "norm_label": "main()" }, { "label": "_write()", "file_type": "code", - "source_file": "cli.py", + "source_file": "src/simaticml_decoder/cli.py", "source_location": "L96", "id": "simaticml_decoder_cli_write", - "community": 5, + "community": 4, "norm_label": "_write()" }, { "label": "_report()", "file_type": "code", - "source_file": "cli.py", + "source_file": "src/simaticml_decoder/cli.py", "source_location": "L101", "id": "simaticml_decoder_cli_report", - "community": 5, + "community": 4, "norm_label": "_report()" }, { "label": "Command-line entry point: one exported SimaticML block in, SCL and/or JSON out.", "file_type": "rationale", - "source_file": "cli.py", + "source_file": "src/simaticml_decoder/cli.py", "source_location": "L1", "id": "simaticml_decoder_cli_rationale_1", - "community": 5, + "community": 4, "norm_label": "command-line entry point: one exported simaticml block in, scl and/or json out." }, { "label": "emit.py", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L1", - "id": "emit_py", + "id": "src_simaticml_decoder_emit_py", "community": 3, "norm_label": "emit.py" }, { "label": "emit_scl()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L35", "id": "simaticml_decoder_emit_emit_scl", "community": 3, @@ -78,7 +141,7 @@ { "label": "_render_network()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L49", "id": "simaticml_decoder_emit_render_network", "community": 3, @@ -87,7 +150,7 @@ { "label": "_render_statement()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L74", "id": "simaticml_decoder_emit_render_statement", "community": 3, @@ -96,7 +159,7 @@ { "label": "_render_assign()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L88", "id": "simaticml_decoder_emit_render_assign", "community": 3, @@ -105,7 +168,7 @@ { "label": "_render_flipflop()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L108", "id": "simaticml_decoder_emit_render_flipflop", "community": 3, @@ -114,7 +177,7 @@ { "label": "_render_box()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L130", "id": "simaticml_decoder_emit_render_box", "community": 3, @@ -123,7 +186,7 @@ { "label": "_box_body()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L142", "id": "simaticml_decoder_emit_box_body", "community": 3, @@ -132,7 +195,7 @@ { "label": "_box_call_form()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L165", "id": "simaticml_decoder_emit_box_call_form", "community": 3, @@ -141,7 +204,7 @@ { "label": "_render_user_call()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L180", "id": "simaticml_decoder_emit_render_user_call", "community": 3, @@ -150,7 +213,7 @@ { "label": "_expr()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L202", "id": "simaticml_decoder_emit_expr", "community": 3, @@ -159,7 +222,7 @@ { "label": "_expr_core()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L209", "id": "simaticml_decoder_emit_expr_core", "community": 3, @@ -168,7 +231,7 @@ { "label": "_wrap_if()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L235", "id": "simaticml_decoder_emit_wrap_if", "community": 3, @@ -177,7 +240,7 @@ { "label": "_guard_block()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L242", "id": "simaticml_decoder_emit_guard_block", "community": 3, @@ -186,7 +249,7 @@ { "label": "_format_call()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L248", "id": "simaticml_decoder_emit_format_call", "community": 3, @@ -195,7 +258,7 @@ { "label": "_first()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L261", "id": "simaticml_decoder_emit_first", "community": 3, @@ -204,7 +267,7 @@ { "label": "_sorted_pins()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L271", "id": "simaticml_decoder_emit_sorted_pins", "community": 3, @@ -213,7 +276,7 @@ { "label": "_pin_sort_key()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L276", "id": "simaticml_decoder_emit_pin_sort_key", "community": 3, @@ -222,7 +285,7 @@ { "label": "_unhandled_line()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L283", "id": "simaticml_decoder_emit_unhandled_line", "community": 3, @@ -231,7 +294,7 @@ { "label": "emit_sidecar()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L291", "id": "simaticml_decoder_emit_emit_sidecar", "community": 3, @@ -240,7 +303,7 @@ { "label": "_interface_json()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L318", "id": "simaticml_decoder_emit_interface_json", "community": 3, @@ -249,7 +312,7 @@ { "label": "_member_json()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L327", "id": "simaticml_decoder_emit_member_json", "community": 3, @@ -258,7 +321,7 @@ { "label": "_build_trace()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L340", "id": "simaticml_decoder_emit_build_trace", "community": 3, @@ -267,7 +330,7 @@ { "label": "_claim()", "file_type": "code", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L352", "id": "simaticml_decoder_emit_claim", "community": 3, @@ -276,7 +339,7 @@ { "label": "Phase 3: ir.* -> readable SCL text + JSON metadata sidecar. Two artifacts (read", "file_type": "rationale", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L1", "id": "simaticml_decoder_emit_rationale_1", "community": 3, @@ -285,7 +348,7 @@ { "label": "Render the readable SCL text artifact for a decoded block.", "file_type": "rationale", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L36", "id": "simaticml_decoder_emit_rationale_36", "community": 3, @@ -294,7 +357,7 @@ { "label": "Build the JSON-serialisable sidecar dict (schema in plan \u00a77).", "file_type": "rationale", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L292", "id": "simaticml_decoder_emit_rationale_292", "community": 3, @@ -303,7 +366,7 @@ { "label": "UId -> short claim, so any rendered statement is traceable to its net.", "file_type": "rationale", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/emit.py", "source_location": "L341", "id": "simaticml_decoder_emit_rationale_341", "community": 3, @@ -312,16 +375,16 @@ { "label": "fold.py", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L1", - "id": "fold_py", + "id": "src_simaticml_decoder_fold_py", "community": 0, "norm_label": "fold.py" }, { "label": "fold_block()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L65", "id": "simaticml_decoder_fold_fold_block", "community": 0, @@ -330,7 +393,7 @@ { "label": "fold_network()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L89", "id": "simaticml_decoder_fold_fold_network", "community": 0, @@ -339,7 +402,7 @@ { "label": "_fold()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L95", "id": "simaticml_decoder_fold_fold", "community": 0, @@ -348,7 +411,7 @@ { "label": "_NetFolder", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L132", "id": "simaticml_decoder_fold_netfolder", "community": 0, @@ -357,7 +420,7 @@ { "label": ".__init__()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L135", "id": "simaticml_decoder_fold_netfolder_init", "community": 0, @@ -366,7 +429,7 @@ { "label": "._build_graph()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L158", "id": "simaticml_decoder_fold_netfolder_build_graph", "community": 0, @@ -375,7 +438,7 @@ { "label": "._build_inventory()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L171", "id": "simaticml_decoder_fold_netfolder_build_inventory", "community": 0, @@ -384,7 +447,7 @@ { "label": "._eval_source()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L176", "id": "simaticml_decoder_fold_netfolder_eval_source", "community": 0, @@ -393,7 +456,7 @@ { "label": "._value_of_access()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L189", "id": "simaticml_decoder_fold_netfolder_value_of_access", "community": 0, @@ -402,7 +465,7 @@ { "label": "._eval_part_out()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L197", "id": "simaticml_decoder_fold_netfolder_eval_part_out", "community": 0, @@ -411,7 +474,7 @@ { "label": "._eval_part_out_uncached()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L211", "id": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", "community": 0, @@ -420,7 +483,7 @@ { "label": "._eval_edge()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L249", "id": "simaticml_decoder_fold_netfolder_eval_edge", "community": 0, @@ -429,7 +492,7 @@ { "label": "._eval_or()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L262", "id": "simaticml_decoder_fold_netfolder_eval_or", "community": 0, @@ -438,7 +501,7 @@ { "label": "._driver_expr()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L271", "id": "simaticml_decoder_fold_netfolder_driver_expr", "community": 0, @@ -447,7 +510,7 @@ { "label": "._contact_condition()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L276", "id": "simaticml_decoder_fold_netfolder_contact_condition", "community": 0, @@ -456,7 +519,7 @@ { "label": "._operand_access()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L282", "id": "simaticml_decoder_fold_netfolder_operand_access", "community": 0, @@ -465,7 +528,7 @@ { "label": "._operand_varref()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L288", "id": "simaticml_decoder_fold_netfolder_operand_varref", "community": 0, @@ -474,7 +537,7 @@ { "label": "._pin_varref()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L294", "id": "simaticml_decoder_fold_netfolder_pin_varref", "community": 0, @@ -483,7 +546,7 @@ { "label": "._sorted_input_pins()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L302", "id": "simaticml_decoder_fold_netfolder_sorted_input_pins", "community": 0, @@ -492,7 +555,7 @@ { "label": "._box_label()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L306", "id": "simaticml_decoder_fold_netfolder_box_label", "community": 0, @@ -501,7 +564,7 @@ { "label": "._build_statements()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L312", "id": "simaticml_decoder_fold_netfolder_build_statements", "community": 0, @@ -510,7 +573,7 @@ { "label": "._statement_for_part()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L326", "id": "simaticml_decoder_fold_netfolder_statement_for_part", "community": 0, @@ -519,7 +582,7 @@ { "label": "._make_assign()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L343", "id": "simaticml_decoder_fold_netfolder_make_assign", "community": 0, @@ -528,7 +591,7 @@ { "label": "._make_flipflop()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L363", "id": "simaticml_decoder_fold_netfolder_make_flipflop", "community": 0, @@ -537,7 +600,7 @@ { "label": "._make_box()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L378", "id": "simaticml_decoder_fold_netfolder_make_box", "community": 0, @@ -546,7 +609,7 @@ { "label": "._statement_for_call()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L417", "id": "simaticml_decoder_fold_netfolder_statement_for_call", "community": 0, @@ -555,7 +618,7 @@ { "label": "._build_xref()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L450", "id": "simaticml_decoder_fold_netfolder_build_xref", "community": 0, @@ -564,7 +627,7 @@ { "label": "._role_for_input()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L465", "id": "simaticml_decoder_fold_netfolder_role_for_input", "community": 0, @@ -573,7 +636,7 @@ { "label": "._add_xref()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L487", "id": "simaticml_decoder_fold_netfolder_add_xref", "community": 0, @@ -582,7 +645,7 @@ { "label": "_materialize()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L504", "id": "simaticml_decoder_fold_materialize", "community": 0, @@ -591,7 +654,7 @@ { "label": "_and()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L511", "id": "simaticml_decoder_fold_and", "community": 0, @@ -600,7 +663,7 @@ { "label": "_factor_or()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L528", "id": "simaticml_decoder_fold_factor_or", "community": 0, @@ -609,7 +672,7 @@ { "label": "_expr_key()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L574", "id": "simaticml_decoder_fold_expr_key", "community": 0, @@ -618,7 +681,7 @@ { "label": "_contains_var()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L598", "id": "simaticml_decoder_fold_contains_var", "community": 0, @@ -627,7 +690,7 @@ { "label": "_render_instance()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L622", "id": "simaticml_decoder_fold_render_instance", "community": 0, @@ -636,7 +699,7 @@ { "label": "_tag_name()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L632", "id": "simaticml_decoder_fold_tag_name", "community": 0, @@ -645,7 +708,7 @@ { "label": "_pin_sort_key()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L637", "id": "simaticml_decoder_fold_pin_sort_key", "community": 0, @@ -654,7 +717,7 @@ { "label": "_uid_key()", "file_type": "code", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L648", "id": "simaticml_decoder_fold_uid_key", "community": 0, @@ -663,7 +726,7 @@ { "label": "Phase 2: model.* -> ir.* (the folding \u2014 the heart of the tool). Intended algori", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L1", "id": "simaticml_decoder_fold_rationale_1", "community": 0, @@ -672,7 +735,7 @@ { "label": "model.Document -> ir.DecodedBlock (folded networks + xref + inventory).", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L66", "id": "simaticml_decoder_fold_rationale_66", "community": 0, @@ -681,7 +744,7 @@ { "label": "Fold one network into statements (or reconstructed SCL text).", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L90", "id": "simaticml_decoder_fold_rationale_90", "community": 0, @@ -690,7 +753,7 @@ { "label": "Fold a network once, returning the logic and (for FlgNet) its folder so fold", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L96", "id": "simaticml_decoder_fold_rationale_96", "community": 0, @@ -699,7 +762,7 @@ { "label": "Folds a single FlgNet. Holds the pin-graph maps and the memoised eval.", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L133", "id": "simaticml_decoder_fold_rationale_133", "community": 0, @@ -708,7 +771,7 @@ { "label": "Turn the _POWER sentinel into a concrete TRUE; pass anything else through.", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L505", "id": "simaticml_decoder_fold_rationale_505", "community": 0, @@ -717,7 +780,7 @@ { "label": "AND-combine, dropping pure-power operands and flattening nested ANDs.", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L512", "id": "simaticml_decoder_fold_rationale_512", "community": 0, @@ -726,7 +789,7 @@ { "label": "OR the branches, factoring a shared leading AND-prefix out front. ``(A AND", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L529", "id": "simaticml_decoder_fold_rationale_529", "community": 0, @@ -735,7 +798,7 @@ { "label": "Structural signature ignoring source UIds, for prefix comparison.", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L575", "id": "simaticml_decoder_fold_rationale_575", "community": 0, @@ -744,7 +807,7 @@ { "label": "True if a VarRef with this name appears anywhere in the expression tree.", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L599", "id": "simaticml_decoder_fold_rationale_599", "community": 0, @@ -753,7 +816,7 @@ { "label": "Render an Instance (system FB backing member) as a display name.", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L623", "id": "simaticml_decoder_fold_rationale_623", "community": 0, @@ -762,7 +825,7 @@ { "label": "Order pins so in1 < in2 < ... < in10 (numeric suffix aware).", "file_type": "rationale", - "source_file": "fold.py", + "source_file": "src/simaticml_decoder/fold.py", "source_location": "L638", "id": "simaticml_decoder_fold_rationale_638", "community": 0, @@ -771,16 +834,16 @@ { "label": "instructions.py", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L1", - "id": "instructions_py", - "community": 6, + "id": "src_simaticml_decoder_instructions_py", + "community": 10, "norm_label": "instructions.py" }, { "label": "Category", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L21", "id": "simaticml_decoder_instructions_category", "community": 2, @@ -807,142 +870,142 @@ { "label": "Spec", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L32", "id": "simaticml_decoder_instructions_spec", - "community": 6, + "community": 10, "norm_label": "spec" }, { "label": "_pf()", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L43", "id": "simaticml_decoder_instructions_pf", - "community": 6, + "community": 10, "norm_label": "_pf()" }, { "label": "_coil()", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L47", "id": "simaticml_decoder_instructions_coil", - "community": 6, + "community": 10, "norm_label": "_coil()" }, { "label": "_cmp()", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L51", "id": "simaticml_decoder_instructions_cmp", - "community": 6, + "community": 10, "norm_label": "_cmp()" }, { "label": "_box()", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L55", "id": "simaticml_decoder_instructions_box", - "community": 6, + "community": 10, "norm_label": "_box()" }, { "label": "lookup()", "file_type": "code", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L103", "id": "simaticml_decoder_instructions_lookup", - "community": 6, + "community": 10, "norm_label": "lookup()" }, { "label": "The instruction catalog \u2014 deliberately *data, not logic*. fold.py reasons about", "file_type": "rationale", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L1", "id": "simaticml_decoder_instructions_rationale_1", - "community": 6, + "community": 10, "norm_label": "the instruction catalog \u2014 deliberately *data, not logic*. fold.py reasons about" }, { "label": "Return the Spec for a Part name, or None (caller folds to ir.Unhandled).", "file_type": "rationale", - "source_file": "instructions.py", + "source_file": "src/simaticml_decoder/instructions.py", "source_location": "L104", "id": "simaticml_decoder_instructions_rationale_104", - "community": 6, + "community": 10, "norm_label": "return the spec for a part name, or none (caller folds to ir.unhandled)." }, { "label": "ir.py", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L1", - "id": "ir_py", - "community": 4, + "id": "src_simaticml_decoder_ir_py", + "community": 5, "norm_label": "ir.py" }, { "label": "VarRef", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L22", "id": "simaticml_decoder_ir_varref", - "community": 4, + "community": 5, "norm_label": "varref" }, { "label": "Literal", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L30", "id": "simaticml_decoder_ir_literal", - "community": 4, + "community": 5, "norm_label": "literal" }, { "label": "Not", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L36", "id": "simaticml_decoder_ir_not", - "community": 4, + "community": 5, "norm_label": "not" }, { "label": "And", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L41", "id": "simaticml_decoder_ir_and", - "community": 4, + "community": 5, "norm_label": "and" }, { "label": "Or", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L46", "id": "simaticml_decoder_ir_or", - "community": 4, + "community": 5, "norm_label": "or" }, { "label": "Compare", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L51", "id": "simaticml_decoder_ir_compare", - "community": 4, + "community": 5, "norm_label": "compare" }, { "label": "EdgeKind", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L58", "id": "simaticml_decoder_ir_edgekind", "community": 2, @@ -951,34 +1014,34 @@ { "label": "Edge", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L64", "id": "simaticml_decoder_ir_edge", - "community": 4, + "community": 5, "norm_label": "edge" }, { "label": "RawExpr", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L72", "id": "simaticml_decoder_ir_rawexpr", - "community": 4, + "community": 5, "norm_label": "rawexpr" }, { "label": "Unhandled", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L80", "id": "simaticml_decoder_ir_unhandled", - "community": 4, + "community": 5, "norm_label": "unhandled" }, { "label": "AssignKind", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L96", "id": "simaticml_decoder_ir_assignkind", "community": 2, @@ -987,151 +1050,151 @@ { "label": "Assign", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L104", "id": "simaticml_decoder_ir_assign", - "community": 4, + "community": 5, "norm_label": "assign" }, { "label": "FlipFlop", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L114", "id": "simaticml_decoder_ir_flipflop", - "community": 4, + "community": 5, "norm_label": "flipflop" }, { "label": "BoxCall", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L125", "id": "simaticml_decoder_ir_boxcall", - "community": 4, + "community": 5, "norm_label": "boxcall" }, { "label": "UserCall", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L137", "id": "simaticml_decoder_ir_usercall", - "community": 4, + "community": 5, "norm_label": "usercall" }, { "label": "NetworkLogic", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L155", "id": "simaticml_decoder_ir_networklogic", - "community": 4, + "community": 5, "norm_label": "networklogic" }, { "label": "TagRef", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L166", "id": "simaticml_decoder_ir_tagref", - "community": 4, + "community": 5, "norm_label": "tagref" }, { "label": "DecodedBlock", "file_type": "code", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L175", "id": "simaticml_decoder_ir_decodedblock", - "community": 4, + "community": 5, "norm_label": "decodedblock" }, { "label": "Phase 2 output: the folded *semantics*, with no memory of the XML. A network be", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L1", "id": "simaticml_decoder_ir_rationale_1", - "community": 4, + "community": 5, "norm_label": "phase 2 output: the folded *semantics*, with no memory of the xml. a network be" }, { "label": "A resolved operand, already rendered to its display form by operand.py.", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L23", "id": "simaticml_decoder_ir_rationale_23", - "community": 4, + "community": 5, "norm_label": "a resolved operand, already rendered to its display form by operand.py." }, { "label": "Free-form expression text taken verbatim (e.g. a Calculate-box Equation).", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L73", "id": "simaticml_decoder_ir_rationale_73", - "community": 4, + "community": 5, "norm_label": "free-form expression text taken verbatim (e.g. a calculate-box equation)." }, { "label": "A construct parsed but not folded. Rendered loudly by emit, never dropped.", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L81", "id": "simaticml_decoder_ir_rationale_81", - "community": 4, + "community": 5, "norm_label": "a construct parsed but not folded. rendered loudly by emit, never dropped." }, { "label": "Rs / Sr \u2014 reset- or set-priority bistable on a stored operand.", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L115", "id": "simaticml_decoder_ir_rationale_115", - "community": 4, + "community": 5, "norm_label": "rs / sr \u2014 reset- or set-priority bistable on a stored operand." }, { "label": "A system FB/FC box: TON/TOF/TP, Move/Add/Inc, RD_LOC_T, ...", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L126", "id": "simaticml_decoder_ir_rationale_126", - "community": 4, + "community": 5, "norm_label": "a system fb/fc box: ton/tof/tp, move/add/inc, rd_loc_t, ..." }, { "label": "A Call/CallInfo to a user FC/FB \u2014 parameters self-documented in the XML.", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L138", "id": "simaticml_decoder_ir_rationale_138", - "community": 4, + "community": 5, "norm_label": "a call/callinfo to a user fc/fb \u2014 parameters self-documented in the xml." }, { "label": "One side of the cross-reference table: where a tag is written / read.", "file_type": "rationale", - "source_file": "ir.py", + "source_file": "src/simaticml_decoder/ir.py", "source_location": "L167", "id": "simaticml_decoder_ir_rationale_167", - "community": 4, + "community": 5, "norm_label": "one side of the cross-reference table: where a tag is written / read." }, { "label": "model.py", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L1", - "id": "model_py", + "id": "src_simaticml_decoder_model_py", "community": 2, "norm_label": "model.py" }, { "label": "BlockKind", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L20", "id": "simaticml_decoder_model_blockkind", "community": 2, @@ -1140,7 +1203,7 @@ { "label": "Language", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L28", "id": "simaticml_decoder_model_language", "community": 2, @@ -1149,7 +1212,7 @@ { "label": "Member", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L43", "id": "simaticml_decoder_model_member", "community": 2, @@ -1158,7 +1221,7 @@ { "label": "Section", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L56", "id": "simaticml_decoder_model_section", "community": 2, @@ -1167,7 +1230,7 @@ { "label": "Interface", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L62", "id": "simaticml_decoder_model_interface", "community": 2, @@ -1176,7 +1239,7 @@ { "label": "Component", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L70", "id": "simaticml_decoder_model_component", "community": 2, @@ -1185,7 +1248,7 @@ { "label": "Symbol", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L81", "id": "simaticml_decoder_model_symbol", "community": 2, @@ -1194,7 +1257,7 @@ { "label": "Constant", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L86", "id": "simaticml_decoder_model_constant", "community": 2, @@ -1203,7 +1266,7 @@ { "label": "Address", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L94", "id": "simaticml_decoder_model_address", "community": 2, @@ -1212,7 +1275,7 @@ { "label": "Access", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L106", "id": "simaticml_decoder_model_access", "community": 2, @@ -1221,7 +1284,7 @@ { "label": "TemplateValue", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L119", "id": "simaticml_decoder_model_templatevalue", "community": 2, @@ -1230,7 +1293,7 @@ { "label": "Instance", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L126", "id": "simaticml_decoder_model_instance", "community": 2, @@ -1239,7 +1302,7 @@ { "label": "Part", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L134", "id": "simaticml_decoder_model_part", "community": 2, @@ -1248,7 +1311,7 @@ { "label": "Parameter", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L149", "id": "simaticml_decoder_model_parameter", "community": 2, @@ -1257,7 +1320,7 @@ { "label": "Call", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L157", "id": "simaticml_decoder_model_call", "community": 2, @@ -1266,7 +1329,7 @@ { "label": "EndpointKind", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L169", "id": "simaticml_decoder_model_endpointkind", "community": 2, @@ -1275,25 +1338,25 @@ { "label": "Endpoint", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L178", "id": "simaticml_decoder_model_endpoint", - "community": 2, + "community": 8, "norm_label": "endpoint" }, { "label": "Wire", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L185", "id": "simaticml_decoder_model_wire", - "community": 2, + "community": 8, "norm_label": "wire" }, { "label": "Label", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L193", "id": "simaticml_decoder_model_label", "community": 2, @@ -1302,7 +1365,7 @@ { "label": "FlgNet", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L203", "id": "simaticml_decoder_model_flgnet", "community": 2, @@ -1311,7 +1374,7 @@ { "label": "StructuredText", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L215", "id": "simaticml_decoder_model_structuredtext", "community": 2, @@ -1320,7 +1383,7 @@ { "label": "RawSource", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L225", "id": "simaticml_decoder_model_rawsource", "community": 2, @@ -1329,7 +1392,7 @@ { "label": "Network", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L234", "id": "simaticml_decoder_model_network", "community": 2, @@ -1338,7 +1401,7 @@ { "label": "Block", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L246", "id": "simaticml_decoder_model_block", "community": 2, @@ -1347,7 +1410,7 @@ { "label": "Document", "file_type": "code", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L262", "id": "simaticml_decoder_model_document", "community": 2, @@ -1356,7 +1419,7 @@ { "label": "Phase 1 output: a faithful, behaviour-free mirror of the SimaticML XML. This la", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L1", "id": "simaticml_decoder_model_rationale_1", "community": 2, @@ -1365,7 +1428,7 @@ { "label": "Per-compile-unit programming language. Subset we render in v0 + passthrough.", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L29", "id": "simaticml_decoder_model_rationale_29", "community": 2, @@ -1374,7 +1437,7 @@ { "label": "One level of a (possibly dotted) symbol path, e.g. System.CLK100ms.", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L71", "id": "simaticml_decoder_model_rationale_71", "community": 2, @@ -1383,7 +1446,7 @@ { "label": "A data reference. Per-use (never deduplicated): each occurrence is its own node.", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L107", "id": "simaticml_decoder_model_rationale_107", "community": 2, @@ -1392,7 +1455,7 @@ { "label": "Backing static member for a system FB (TON/CTU/...) \u2014 same shape as Symbol.", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L127", "id": "simaticml_decoder_model_rationale_127", "community": 2, @@ -1401,16 +1464,16 @@ { "label": "First endpoint is the source; the rest are sinks (fan-out).", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L186", "id": "simaticml_decoder_model_rationale_186", - "community": 2, + "community": 8, "norm_label": "first endpoint is the source; the rest are sinks (fan-out)." }, { "label": "LAD/FBD network: indexed parts/calls/accesses + the wire list. UIds are scop", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L204", "id": "simaticml_decoder_model_rationale_204", "community": 2, @@ -1419,7 +1482,7 @@ { "label": "SCL network: an ordered, interleaved token/access stream (a tokenised AST).", "file_type": "rationale", - "source_file": "model.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L216", "id": "simaticml_decoder_model_rationale_216", "community": 2, @@ -1428,88 +1491,88 @@ { "label": "operand.py", "file_type": "code", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L1", - "id": "operand_py", - "community": 5, + "id": "src_simaticml_decoder_operand_py", + "community": 4, "norm_label": "operand.py" }, { "label": "render()", "file_type": "code", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L60", "id": "simaticml_decoder_operand_render", - "community": 5, + "community": 4, "norm_label": "render()" }, { "label": "_render_symbol()", "file_type": "code", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L78", "id": "simaticml_decoder_operand_render_symbol", - "community": 5, + "community": 4, "norm_label": "_render_symbol()" }, { "label": "_render_component()", "file_type": "code", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L94", "id": "simaticml_decoder_operand_render_component", - "community": 5, + "community": 4, "norm_label": "_render_component()" }, { "label": "_render_constant()", "file_type": "code", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L111", "id": "simaticml_decoder_operand_render_constant", - "community": 5, + "community": 4, "norm_label": "_render_constant()" }, { "label": "_render_address()", "file_type": "code", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L122", "id": "simaticml_decoder_operand_render_address", - "community": 5, + "community": 4, "norm_label": "_render_address()" }, { "label": "Render a model.Access into its TIA display string. Split out because it is need", "file_type": "rationale", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L1", "id": "simaticml_decoder_operand_rationale_1", - "community": 5, + "community": 4, "norm_label": "render a model.access into its tia display string. split out because it is need" }, { "label": "model.Access -> display string (TIA conventions; see module docstring).", "file_type": "rationale", - "source_file": "operand.py", + "source_file": "src/simaticml_decoder/operand.py", "source_location": "L61", "id": "simaticml_decoder_operand_rationale_61", - "community": 5, + "community": 4, "norm_label": "model.access -> display string (tia conventions; see module docstring)." }, { "label": "parse.py", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L1", - "id": "parse_py", + "id": "src_simaticml_decoder_parse_py", "community": 1, "norm_label": "parse.py" }, { "label": "_ln()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L31", "id": "simaticml_decoder_parse_ln", "community": 1, @@ -1518,7 +1581,7 @@ { "label": "_children()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L38", "id": "simaticml_decoder_parse_children", "community": 1, @@ -1527,7 +1590,7 @@ { "label": "_child()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L43", "id": "simaticml_decoder_parse_child", "community": 1, @@ -1536,7 +1599,7 @@ { "label": "_child_text()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L53", "id": "simaticml_decoder_parse_child_text", "community": 1, @@ -1545,7 +1608,7 @@ { "label": "_first_element_child()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L58", "id": "simaticml_decoder_parse_first_element_child", "community": 1, @@ -1554,7 +1617,7 @@ { "label": "_nz()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L67", "id": "simaticml_decoder_parse_nz", "community": 1, @@ -1563,7 +1626,7 @@ { "label": "_is_true()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L75", "id": "simaticml_decoder_parse_is_true", "community": 1, @@ -1572,7 +1635,7 @@ { "label": "_int_or_none()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L79", "id": "simaticml_decoder_parse_int_or_none", "community": 1, @@ -1581,7 +1644,7 @@ { "label": "_extra_attrs()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L88", "id": "simaticml_decoder_parse_extra_attrs", "community": 1, @@ -1590,7 +1653,7 @@ { "label": "parse_document()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L98", "id": "simaticml_decoder_parse_parse_document", "community": 1, @@ -1599,7 +1662,7 @@ { "label": "parse_file()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L112", "id": "simaticml_decoder_parse_parse_file", "community": 1, @@ -1608,7 +1671,7 @@ { "label": "_find_block_element()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L123", "id": "simaticml_decoder_parse_find_block_element", "community": 1, @@ -1617,7 +1680,7 @@ { "label": "_block_kind()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L130", "id": "simaticml_decoder_parse_block_kind", "community": 1, @@ -1626,7 +1689,7 @@ { "label": "_parse_block()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L138", "id": "simaticml_decoder_parse_parse_block", "community": 1, @@ -1635,7 +1698,7 @@ { "label": "_parse_language()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L164", "id": "simaticml_decoder_parse_parse_language", "community": 1, @@ -1644,7 +1707,7 @@ { "label": "_parse_interface()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L184", "id": "simaticml_decoder_parse_parse_interface", "community": 1, @@ -1653,7 +1716,7 @@ { "label": "_parse_member()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L202", "id": "simaticml_decoder_parse_parse_member", "community": 1, @@ -1662,7 +1725,7 @@ { "label": "_parse_compile_unit()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L242", "id": "simaticml_decoder_parse_parse_compile_unit", "community": 1, @@ -1671,7 +1734,7 @@ { "label": "_parse_network_source()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L259", "id": "simaticml_decoder_parse_parse_network_source", "community": 1, @@ -1680,7 +1743,7 @@ { "label": "_parse_flgnet()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L286", "id": "simaticml_decoder_parse_parse_flgnet", "community": 1, @@ -1689,7 +1752,7 @@ { "label": "_parse_access()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L326", "id": "simaticml_decoder_parse_parse_access", "community": 1, @@ -1698,7 +1761,7 @@ { "label": "_parse_symbol()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L357", "id": "simaticml_decoder_parse_parse_symbol", "community": 1, @@ -1707,7 +1770,7 @@ { "label": "_parse_component()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L361", "id": "simaticml_decoder_parse_parse_component", "community": 1, @@ -1716,7 +1779,7 @@ { "label": "_parse_constant()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L374", "id": "simaticml_decoder_parse_parse_constant", "community": 1, @@ -1725,7 +1788,7 @@ { "label": "_parse_address()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L396", "id": "simaticml_decoder_parse_parse_address", "community": 1, @@ -1734,7 +1797,7 @@ { "label": "_parse_part()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L408", "id": "simaticml_decoder_parse_parse_part", "community": 1, @@ -1743,7 +1806,7 @@ { "label": "_parse_instance()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L461", "id": "simaticml_decoder_parse_parse_instance", "community": 1, @@ -1752,7 +1815,7 @@ { "label": "_parse_call()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L468", "id": "simaticml_decoder_parse_parse_call", "community": 1, @@ -1761,7 +1824,7 @@ { "label": "_parse_wire()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L511", "id": "simaticml_decoder_parse_parse_wire", "community": 1, @@ -1770,7 +1833,7 @@ { "label": "_parse_structured_text()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L528", "id": "simaticml_decoder_parse_parse_structured_text", "community": 1, @@ -1779,7 +1842,7 @@ { "label": "_titles_and_comments()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L549", "id": "simaticml_decoder_parse_titles_and_comments", "community": 1, @@ -1788,7 +1851,7 @@ { "label": "_multilingual_text()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L562", "id": "simaticml_decoder_parse_multilingual_text", "community": 1, @@ -1797,7 +1860,7 @@ { "label": "_inline_comment()", "file_type": "code", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L585", "id": "simaticml_decoder_parse_inline_comment", "community": 1, @@ -1806,7 +1869,7 @@ { "label": "Phase 1: SimaticML XML -> model.* (a faithful, behaviour-free mirror). All XML-", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L1", "id": "simaticml_decoder_parse_rationale_1", "community": 1, @@ -1815,7 +1878,7 @@ { "label": "Local name of an element tag, dropping any ``{namespace}`` prefix.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L32", "id": "simaticml_decoder_parse_rationale_32", "community": 1, @@ -1824,7 +1887,7 @@ { "label": "Direct child elements, optionally filtered by local name.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L39", "id": "simaticml_decoder_parse_rationale_39", "community": 1, @@ -1833,7 +1896,7 @@ { "label": "First direct child with the given local name, or None.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L44", "id": "simaticml_decoder_parse_rationale_44", "community": 1, @@ -1842,7 +1905,7 @@ { "label": "First child element (ignoring text/whitespace); None if there are none.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L59", "id": "simaticml_decoder_parse_rationale_59", "community": 1, @@ -1851,7 +1914,7 @@ { "label": "Normalise a metadata string: strip, and collapse empty/blank to None.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L68", "id": "simaticml_decoder_parse_rationale_68", "community": 1, @@ -1860,7 +1923,7 @@ { "label": "Unknown attributes preserved for forward compatibility (the raw hatch).", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L89", "id": "simaticml_decoder_parse_rationale_89", "community": 1, @@ -1869,7 +1932,7 @@ { "label": "Raw XML string -> model.Document (a faithful syntactic mirror).", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L99", "id": "simaticml_decoder_parse_rationale_99", "community": 1, @@ -1878,7 +1941,7 @@ { "label": "Convenience wrapper: read a file and parse it.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L113", "id": "simaticml_decoder_parse_rationale_113", "community": 1, @@ -1887,7 +1950,7 @@ { "label": "Per-compile-unit / block language -> model.Language (unknown -> OTHER).", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L165", "id": "simaticml_decoder_parse_rationale_165", "community": 1, @@ -1896,7 +1959,7 @@ { "label": "NetworkSource -> FlgNet | StructuredText | RawSource | None. An empty ``.", "file_type": "rationale", - "source_file": "parse.py", + "source_file": "src/simaticml_decoder/parse.py", "source_location": "L586", "id": "simaticml_decoder_parse_rationale_586", "community": 1, @@ -1932,4463 +1995,8222 @@ { "label": "scl_reconstruct.py", "file_type": "code", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L1", - "id": "scl_reconstruct_py", - "community": 7, + "id": "src_simaticml_decoder_scl_reconstruct_py", + "community": 4, "norm_label": "scl_reconstruct.py" }, { "label": "reconstruct()", "file_type": "code", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L17", "id": "simaticml_decoder_scl_reconstruct_reconstruct", - "community": 7, + "community": 4, "norm_label": "reconstruct()" }, { "label": "_local()", "file_type": "code", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L36", "id": "simaticml_decoder_scl_reconstruct_local", - "community": 7, + "community": 4, "norm_label": "_local()" }, { "label": "_render_element()", "file_type": "code", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L40", "id": "simaticml_decoder_scl_reconstruct_render_element", - "community": 7, + "community": 4, "norm_label": "_render_element()" }, { "label": "_render_comment()", "file_type": "code", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L68", "id": "simaticml_decoder_scl_reconstruct_render_comment", - "community": 7, + "community": 4, "norm_label": "_render_comment()" }, { "label": "Reconstruct an SCL network from its tokenised AST. SCL networks do not *fold* \u2014", "file_type": "rationale", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L1", "id": "simaticml_decoder_scl_reconstruct_rationale_1", - "community": 7, + "community": 4, "norm_label": "reconstruct an scl network from its tokenised ast. scl networks do not *fold* \u2014" }, { "label": "model.StructuredText -> SCL source text. parse._parse_structured_text store", "file_type": "rationale", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L18", "id": "simaticml_decoder_scl_reconstruct_rationale_18", - "community": 7, + "community": 4, "norm_label": "model.structuredtext -> scl source text. parse._parse_structured_text store" }, { "label": "Render an SCL comment. Multi-line content becomes a (* ... *) block.", "file_type": "rationale", - "source_file": "scl_reconstruct.py", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", "source_location": "L69", "id": "simaticml_decoder_scl_reconstruct_rationale_69", - "community": 7, + "community": 4, "norm_label": "render an scl comment. multi-line content becomes a (* ... *) block." }, { "label": "__init__.py", "file_type": "code", - "source_file": "__init__.py", + "source_file": "src/simaticml_decoder/__init__.py", "source_location": "L1", - "id": "init_py", - "community": 5, + "id": "src_simaticml_decoder_init_py", + "community": 4, "norm_label": "__init__.py" }, { "label": "simaticml-decoder \u2014 SimaticML LAD/FBD -> readable SCL + JSON metadata sidecar.", "file_type": "rationale", - "source_file": "__init__.py", + "source_file": "src/simaticml_decoder/__init__.py", "source_location": "L1", "id": "simaticml_decoder_init_rationale_1", - "community": 5, + "community": 4, "norm_label": "simaticml-decoder \u2014 simaticml lad/fbd -> readable scl + json metadata sidecar." }, { - "label": "Render the SCL text artifact. Raises until implemented (Phase 3).", - "file_type": "rationale", - "source_file": "emit.py", - "source_location": "L27", - "community": 3, - "norm_label": "render the scl text artifact. raises until implemented (phase 3).", - "id": "simaticml_decoder_emit_rationale_27" + "label": "conftest.py", + "file_type": "code", + "source_file": "tests/conftest.py", + "source_location": "L1", + "id": "tests_conftest_py", + "community": 7, + "norm_label": "conftest.py" }, { - "label": "Build the JSON-serialisable sidecar dict. Raises until implemented.", - "file_type": "rationale", - "source_file": "emit.py", - "source_location": "L32", - "community": 3, - "norm_label": "build the json-serialisable sidecar dict. raises until implemented.", - "id": "simaticml_decoder_emit_rationale_32" - } - ], - "links": [ + "label": "_require()", + "file_type": "code", + "source_file": "tests/conftest.py", + "source_location": "L25", + "id": "tests_conftest_require", + "community": 7, + "norm_label": "_require()" + }, { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L16", - "weight": 1.0, - "confidence_score": 1.0, - "source": "cli_py", - "target": "init_py" + "label": "fixture_file()", + "file_type": "code", + "source_file": "tests/conftest.py", + "source_location": "L33", + "id": "tests_conftest_fixture_file", + "community": 7, + "norm_label": "fixture_file()" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L19", - "weight": 1.0, - "confidence_score": 1.0, - "source": "cli_py", - "target": "simaticml_decoder_cli_build_parser" + "label": "load_fixture()", + "file_type": "code", + "source_file": "tests/conftest.py", + "source_location": "L39", + "id": "tests_conftest_load_fixture", + "community": 7, + "norm_label": "load_fixture()" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L28", - "weight": 1.0, - "confidence_score": 1.0, - "source": "cli_py", - "target": "simaticml_decoder_cli_main" + "label": "Shared pytest setup and fixture-corpus helpers. The sample XML exports live in", + "file_type": "rationale", + "source_file": "tests/conftest.py", + "source_location": "L1", + "id": "tests_conftest_rationale_1", + "community": 7, + "norm_label": "shared pytest setup and fixture-corpus helpers. the sample xml exports live in" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L96", - "weight": 1.0, - "source": "cli_py", - "target": "simaticml_decoder_cli_write", - "confidence_score": 1.0 + "label": "Return a callable name -> Path, skipping if the fixture is absent.", + "file_type": "rationale", + "source_file": "tests/conftest.py", + "source_location": "L34", + "id": "tests_conftest_rationale_34", + "community": 7, + "norm_label": "return a callable name -> path, skipping if the fixture is absent." }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L101", - "weight": 1.0, - "source": "cli_py", - "target": "simaticml_decoder_cli_report", - "confidence_score": 1.0 + "label": "Return a callable name -> model.Document, skipping if the fixture is absent.", + "file_type": "rationale", + "source_file": "tests/conftest.py", + "source_location": "L40", + "id": "tests_conftest_rationale_40", + "community": 7, + "norm_label": "return a callable name -> model.document, skipping if the fixture is absent." }, { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "cli.py", + "label": "test_cli.py", + "file_type": "code", + "source_file": "tests/test_cli.py", "source_location": "L1", - "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_cli_rationale_1", - "target": "cli_py" + "id": "tests_test_cli_py", + "community": 7, + "norm_label": "test_cli.py" }, { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L29", - "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_cli_main", - "target": "simaticml_decoder_cli_build_parser" + "label": "test_missing_file_returns_2()", + "file_type": "code", + "source_file": "tests/test_cli.py", + "source_location": "L11", + "id": "tests_test_cli_test_missing_file_returns_2", + "community": 7, + "norm_label": "test_missing_file_returns_2()" }, { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L86", - "weight": 1.0, - "source": "simaticml_decoder_cli_main", - "target": "simaticml_decoder_cli_write", - "confidence_score": 1.0 + "label": "test_malformed_xml_returns_1()", + "file_type": "code", + "source_file": "tests/test_cli.py", + "source_location": "L17", + "id": "tests_test_cli_test_malformed_xml_returns_1", + "community": 7, + "norm_label": "test_malformed_xml_returns_1()" }, { - "relation": "calls", - "context": "call", - "confidence": "EXTRACTED", - "source_file": "cli.py", - "source_location": "L92", - "weight": 1.0, - "source": "simaticml_decoder_cli_main", - "target": "simaticml_decoder_cli_report", - "confidence_score": 1.0 + "label": "test_happy_path_writes_both()", + "file_type": "code", + "source_file": "tests/test_cli.py", + "source_location": "L25", + "id": "tests_test_cli_test_happy_path_writes_both", + "community": 7, + "norm_label": "test_happy_path_writes_both()" }, { - "relation": "imports_from", - "context": "import", - "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L23", - "weight": 1.0, - "confidence_score": 1.0, - "source": "emit_py", - "target": "init_py" + "label": "test_format_scl_only()", + "file_type": "code", + "source_file": "tests/test_cli.py", + "source_location": "L34", + "id": "tests_test_cli_test_format_scl_only", + "community": 7, + "norm_label": "test_format_scl_only()" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L26", - "weight": 1.0, - "confidence_score": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_emit_scl" + "label": "test_quiet_suppresses_stderr()", + "file_type": "code", + "source_file": "tests/test_cli.py", + "source_location": "L41", + "id": "tests_test_cli_test_quiet_suppresses_stderr", + "community": 7, + "norm_label": "test_quiet_suppresses_stderr()" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L49", - "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_render_network", - "confidence_score": 1.0 - }, + "label": "Unit tests for the CLI. Error paths are self-contained; happy paths use the fixt", + "file_type": "rationale", + "source_file": "tests/test_cli.py", + "source_location": "L1", + "id": "tests_test_cli_rationale_1", + "community": 7, + "norm_label": "unit tests for the cli. error paths are self-contained; happy paths use the fixt" + }, + { + "label": "test_emit.py", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L1", + "id": "tests_test_emit_py", + "community": 6, + "norm_label": "test_emit.py" + }, + { + "label": "_scl_of()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L13", + "id": "tests_test_emit_scl_of", + "community": 6, + "norm_label": "_scl_of()" + }, + { + "label": "test_normal_assign()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L19", + "id": "tests_test_emit_test_normal_assign", + "community": 6, + "norm_label": "test_normal_assign()" + }, + { + "label": "test_precedence_not_binds_tightest_or_parenthesised()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L23", + "id": "tests_test_emit_test_precedence_not_binds_tightest_or_parenthesised", + "community": 6, + "norm_label": "test_precedence_not_binds_tightest_or_parenthesised()" + }, + { + "label": "test_or_wraps_and_groups_for_readability()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L30", + "id": "tests_test_emit_test_or_wraps_and_groups_for_readability", + "community": 6, + "norm_label": "test_or_wraps_and_groups_for_readability()" + }, + { + "label": "test_negated_assign()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L36", + "id": "tests_test_emit_test_negated_assign", + "community": 6, + "norm_label": "test_negated_assign()" + }, + { + "label": "test_reset_coil_emits_if_guard()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L42", + "id": "tests_test_emit_test_reset_coil_emits_if_guard", + "community": 6, + "norm_label": "test_reset_coil_emits_if_guard()" + }, + { + "label": "test_latch_is_called_out()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L48", + "id": "tests_test_emit_test_latch_is_called_out", + "community": 6, + "norm_label": "test_latch_is_called_out()" + }, + { + "label": "test_flipflop_reset_priority()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L55", + "id": "tests_test_emit_test_flipflop_reset_priority", + "community": 6, + "norm_label": "test_flipflop_reset_priority()" + }, + { + "label": "test_box_move_assignment_form()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L63", + "id": "tests_test_emit_test_box_move_assignment_form", + "community": 6, + "norm_label": "test_box_move_assignment_form()" + }, + { + "label": "test_box_add_with_enable_guard()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L69", + "id": "tests_test_emit_test_box_add_with_enable_guard", + "community": 6, + "norm_label": "test_box_add_with_enable_guard()" + }, + { + "label": "test_box_inc_under_rising_edge()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L76", + "id": "tests_test_emit_test_box_inc_under_rising_edge", + "community": 6, + "norm_label": "test_box_inc_under_rising_edge()" + }, + { + "label": "test_box_timer_instance_call_form()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L83", + "id": "tests_test_emit_test_box_timer_instance_call_form", + "community": 6, + "norm_label": "test_box_timer_instance_call_form()" + }, + { + "label": "test_user_call_fc()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L90", + "id": "tests_test_emit_test_user_call_fc", + "community": 6, + "norm_label": "test_user_call_fc()" + }, + { + "label": "test_unhandled_statement_is_loud()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L96", + "id": "tests_test_emit_test_unhandled_statement_is_loud", + "community": 6, + "norm_label": "test_unhandled_statement_is_loud()" + }, + { + "label": "test_scl_has_block_and_network_headers_and_trailing_newline()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L101", + "id": "tests_test_emit_test_scl_has_block_and_network_headers_and_trailing_newline", + "community": 6, + "norm_label": "test_scl_has_block_and_network_headers_and_trailing_newline()" + }, + { + "label": "test_empty_network_marker()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L112", + "id": "tests_test_emit_test_empty_network_marker", + "community": 6, + "norm_label": "test_empty_network_marker()" + }, + { + "label": "test_sidecar_schema_interface_and_xref()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L118", + "id": "tests_test_emit_test_sidecar_schema_interface_and_xref", + "community": 6, + "norm_label": "test_sidecar_schema_interface_and_xref()" + }, + { + "label": "test_sidecar_trace_maps_statement_uid()", + "file_type": "code", + "source_file": "tests/test_emit.py", + "source_location": "L144", + "id": "tests_test_emit_test_sidecar_trace_maps_statement_uid", + "community": 6, + "norm_label": "test_sidecar_trace_maps_statement_uid()" + }, + { + "label": "Unit tests for emit \u2014 ir.* -> SCL text + JSON sidecar. IR objects are construct", + "file_type": "rationale", + "source_file": "tests/test_emit.py", + "source_location": "L1", + "id": "tests_test_emit_rationale_1", + "community": 6, + "norm_label": "unit tests for emit \u2014 ir.* -> scl text + json sidecar. ir objects are construct" + }, + { + "label": "test_fixtures_regression.py", + "file_type": "code", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L1", + "id": "tests_test_fixtures_regression_py", + "community": 7, + "norm_label": "test_fixtures_regression.py" + }, + { + "label": "test_decode_pipeline_runs()", + "file_type": "code", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L20", + "id": "tests_test_fixtures_regression_test_decode_pipeline_runs", + "community": 7, + "norm_label": "test_decode_pipeline_runs()" + }, + { + "label": "test_motor_is_combinational_no_latch()", + "file_type": "code", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L30", + "id": "tests_test_fixtures_regression_test_motor_is_combinational_no_latch", + "community": 7, + "norm_label": "test_motor_is_combinational_no_latch()" + }, + { + "label": "test_singlealarm_constructs()", + "file_type": "code", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L41", + "id": "tests_test_fixtures_regression_test_singlealarm_constructs", + "community": 7, + "norm_label": "test_singlealarm_constructs()" + }, + { + "label": "test_fbsystem_scl_network_and_slices()", + "file_type": "code", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L51", + "id": "tests_test_fixtures_regression_test_fbsystem_scl_network_and_slices", + "community": 7, + "norm_label": "test_fbsystem_scl_network_and_slices()" + }, + { + "label": "Regression tests over the real V21 sample corpus. These skip when tests/fixture", + "file_type": "rationale", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L1", + "id": "tests_test_fixtures_regression_rationale_1", + "community": 7, + "norm_label": "regression tests over the real v21 sample corpus. these skip when tests/fixture" + }, + { + "label": "test_fold.py", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L1", + "id": "tests_test_fold_py", + "community": 8, + "norm_label": "test_fold.py" + }, + { + "label": "_net()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L15", + "id": "tests_test_fold_net", + "community": 8, + "norm_label": "_net()" + }, + { + "label": "_sym()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L20", + "id": "tests_test_fold_sym", + "community": 8, + "norm_label": "_sym()" + }, + { + "label": "_pr()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L25", + "id": "tests_test_fold_pr", + "community": 8, + "norm_label": "_pr()" + }, + { + "label": "_ic()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L29", + "id": "tests_test_fold_ic", + "community": 8, + "norm_label": "_ic()" + }, + { + "label": "_nc()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L33", + "id": "tests_test_fold_nc", + "community": 8, + "norm_label": "_nc()" + }, + { + "label": "test_contact_drives_coil()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L37", + "id": "tests_test_fold_test_contact_drives_coil", + "community": 8, + "norm_label": "test_contact_drives_coil()" + }, + { + "label": "test_negated_contact_is_not()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L56", + "id": "tests_test_fold_test_negated_contact_is_not", + "community": 8, + "norm_label": "test_negated_contact_is_not()" + }, + { + "label": "test_or_junction_is_nary_or()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L71", + "id": "tests_test_fold_test_or_junction_is_nary_or", + "community": 8, + "norm_label": "test_or_junction_is_nary_or()" + }, + { + "label": "test_latch_detected_when_coil_feeds_back()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L92", + "id": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "community": 8, + "norm_label": "test_latch_detected_when_coil_feeds_back()" + }, + { + "label": "test_daisy_chained_coils_share_upstream_flow()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L115", + "id": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "community": 8, + "norm_label": "test_daisy_chained_coils_share_upstream_flow()" + }, + { + "label": "test_unknown_instruction_folds_to_unhandled_and_warns()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L134", + "id": "tests_test_fold_test_unknown_instruction_folds_to_unhandled_and_warns", + "community": 8, + "norm_label": "test_unknown_instruction_folds_to_unhandled_and_warns()" + }, + { + "label": "test_empty_network_has_no_statements()", + "file_type": "code", + "source_file": "tests/test_fold.py", + "source_location": "L143", + "id": "tests_test_fold_test_empty_network_has_no_statements", + "community": 8, + "norm_label": "test_empty_network_has_no_statements()" + }, + { + "label": "Unit tests for fold \u2014 model.* -> ir.* (the wire-graph folding). Networks are bu", + "file_type": "rationale", + "source_file": "tests/test_fold.py", + "source_location": "L1", + "id": "tests_test_fold_rationale_1", + "community": 8, + "norm_label": "unit tests for fold \u2014 model.* -> ir.* (the wire-graph folding). networks are bu" + }, + { + "label": "test_operand.py", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L1", + "id": "tests_test_operand_py", + "community": 9, + "norm_label": "test_operand.py" + }, + { + "label": "_access()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L8", + "id": "tests_test_operand_access", + "community": 9, + "norm_label": "_access()" + }, + { + "label": "test_local_variable_symbol()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L12", + "id": "tests_test_operand_test_local_variable_symbol", + "community": 9, + "norm_label": "test_local_variable_symbol()" + }, + { + "label": "test_dotted_local_path()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L17", + "id": "tests_test_operand_test_dotted_local_path", + "community": 9, + "norm_label": "test_dotted_local_path()" + }, + { + "label": "test_global_variable_quotes_root_only()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L23", + "id": "tests_test_operand_test_global_variable_quotes_root_only", + "community": 9, + "norm_label": "test_global_variable_quotes_root_only()" + }, + { + "label": "test_bit_slice_renders_percent_x()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L29", + "id": "tests_test_operand_test_bit_slice_renders_percent_x", + "community": 9, + "norm_label": "test_bit_slice_renders_percent_x()" + }, + { + "label": "test_array_index()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L35", + "id": "tests_test_operand_test_array_index", + "community": 9, + "norm_label": "test_array_index()" + }, + { + "label": "test_address_word()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L42", + "id": "tests_test_operand_test_address_word", + "community": 9, + "norm_label": "test_address_word()" + }, + { + "label": "test_address_bool_byte_bit()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L47", + "id": "tests_test_operand_test_address_bool_byte_bit", + "community": 9, + "norm_label": "test_address_bool_byte_bit()" + }, + { + "label": "test_literal_constant_verbatim()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L52", + "id": "tests_test_operand_test_literal_constant_verbatim", + "community": 9, + "norm_label": "test_literal_constant_verbatim()" + }, + { + "label": "test_unresolved_scope_is_loud_placeholder()", + "file_type": "code", + "source_file": "tests/test_operand.py", + "source_location": "L57", + "id": "tests_test_operand_test_unresolved_scope_is_loud_placeholder", + "community": 9, + "norm_label": "test_unresolved_scope_is_loud_placeholder()" + }, + { + "label": "Unit tests for operand.render \u2014 the Access -> TIA display-string conventions.", + "file_type": "rationale", + "source_file": "tests/test_operand.py", + "source_location": "L1", + "id": "tests_test_operand_rationale_1", + "community": 9, + "norm_label": "unit tests for operand.render \u2014 the access -> tia display-string conventions." + }, + { + "label": "test_release_version.py", + "file_type": "code", + "source_file": "tests/test_release_version.py", + "source_location": "L1", + "id": "tests_test_release_version_py", + "community": 12, + "norm_label": "test_release_version.py" + }, + { + "label": "_write_project()", + "file_type": "code", + "source_file": "tests/test_release_version.py", + "source_location": "L15", + "id": "tests_test_release_version_write_project", + "community": 12, + "norm_label": "_write_project()" + }, + { + "label": "test_check_release_version_accepts_matching_v_tag()", + "file_type": "code", + "source_file": "tests/test_release_version.py", + "source_location": "L29", + "id": "tests_test_release_version_test_check_release_version_accepts_matching_v_tag", + "community": 12, + "norm_label": "test_check_release_version_accepts_matching_v_tag()" + }, + { + "label": "test_check_release_version_reports_pyproject_mismatch()", + "file_type": "code", + "source_file": "tests/test_release_version.py", + "source_location": "L35", + "id": "tests_test_release_version_test_check_release_version_reports_pyproject_mismatch", + "community": 12, + "norm_label": "test_check_release_version_reports_pyproject_mismatch()" + }, + { + "label": "test_check_release_version_reports_init_mismatch()", + "file_type": "code", + "source_file": "tests/test_release_version.py", + "source_location": "L43", + "id": "tests_test_release_version_test_check_release_version_reports_init_mismatch", + "community": 12, + "norm_label": "test_check_release_version_reports_init_mismatch()" + }, + { + "label": "test_check_release_version_rejects_non_v_tag()", + "file_type": "code", + "source_file": "tests/test_release_version.py", + "source_location": "L51", + "id": "tests_test_release_version_test_check_release_version_rejects_non_v_tag", + "community": 12, + "norm_label": "test_check_release_version_rejects_non_v_tag()" + }, + { + "label": "cli.py", + "file_type": "code", + "source_file": "cli.py", + "source_location": "L1", + "community": 4, + "norm_label": "cli.py", + "id": "cli_py" + }, + { + "label": "emit.py", + "file_type": "code", + "source_file": "emit.py", + "source_location": "L1", + "community": 3, + "norm_label": "emit.py", + "id": "emit_py" + }, + { + "label": "fold.py", + "file_type": "code", + "source_file": "fold.py", + "source_location": "L1", + "community": 0, + "norm_label": "fold.py", + "id": "fold_py" + }, + { + "label": "instructions.py", + "file_type": "code", + "source_file": "instructions.py", + "source_location": "L1", + "community": 10, + "norm_label": "instructions.py", + "id": "instructions_py" + }, + { + "label": "ir.py", + "file_type": "code", + "source_file": "ir.py", + "source_location": "L1", + "community": 5, + "norm_label": "ir.py", + "id": "ir_py" + }, + { + "label": "model.py", + "file_type": "code", + "source_file": "model.py", + "source_location": "L1", + "community": 2, + "norm_label": "model.py", + "id": "model_py" + }, + { + "label": "operand.py", + "file_type": "code", + "source_file": "operand.py", + "source_location": "L1", + "community": 4, + "norm_label": "operand.py", + "id": "operand_py" + }, + { + "label": "parse.py", + "file_type": "code", + "source_file": "parse.py", + "source_location": "L1", + "community": 1, + "norm_label": "parse.py", + "id": "parse_py" + }, + { + "label": "scl_reconstruct.py", + "file_type": "code", + "source_file": "scl_reconstruct.py", + "source_location": "L1", + "community": 4, + "norm_label": "scl_reconstruct.py", + "id": "scl_reconstruct_py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "__init__.py", + "source_location": "L1", + "community": 4, + "norm_label": "__init__.py", + "id": "init_py" + }, + { + "label": "Render the SCL text artifact. Raises until implemented (Phase 3).", + "file_type": "rationale", + "source_file": "emit.py", + "source_location": "L27", + "community": 3, + "norm_label": "render the scl text artifact. raises until implemented (phase 3).", + "id": "simaticml_decoder_emit_rationale_27" + }, + { + "label": "Build the JSON-serialisable sidecar dict. Raises until implemented.", + "file_type": "rationale", + "source_file": "emit.py", + "source_location": "L32", + "community": 3, + "norm_label": "build the json-serialisable sidecar dict. raises until implemented.", + "id": "simaticml_decoder_emit_rationale_32" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L15", + "weight": 1.0, + "source": "scripts_check_release_version_py", + "target": "scripts_check_release_version_read_project_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L21", + "weight": 1.0, + "source": "scripts_check_release_version_py", + "target": "scripts_check_release_version_read_init_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L29", + "weight": 1.0, + "source": "scripts_check_release_version_py", + "target": "scripts_check_release_version_version_from_tag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L38", + "weight": 1.0, + "source": "scripts_check_release_version_py", + "target": "scripts_check_release_version_check_release_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L53", + "weight": 1.0, + "source": "scripts_check_release_version_py", + "target": "scripts_check_release_version_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L1", + "weight": 1.0, + "source": "scripts_check_release_version_rationale_1", + "target": "scripts_check_release_version_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L40", + "weight": 1.0, + "source": "scripts_check_release_version_check_release_version", + "target": "scripts_check_release_version_read_project_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L41", + "weight": 1.0, + "source": "scripts_check_release_version_check_release_version", + "target": "scripts_check_release_version_read_init_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L39", + "weight": 1.0, + "source": "scripts_check_release_version_check_release_version", + "target": "scripts_check_release_version_version_from_tag", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/check_release_version.py", + "source_location": "L61", + "weight": 1.0, + "source": "scripts_check_release_version_main", + "target": "scripts_check_release_version_check_release_version", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/cli.py", + "source_location": "L27", + "weight": 1.0, + "source": "src_simaticml_decoder_cli_py", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/cli.py", + "source_location": "L37", + "weight": 1.0, + "source": "src_simaticml_decoder_cli_py", + "target": "simaticml_decoder_cli_build_parser", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/cli.py", + "source_location": "L57", + "weight": 1.0, + "source": "src_simaticml_decoder_cli_py", + "target": "simaticml_decoder_cli_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/cli.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_simaticml_decoder_cli_py", + "target": "simaticml_decoder_cli_write", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/cli.py", + "source_location": "L101", + "weight": 1.0, + "source": "src_simaticml_decoder_cli_py", + "target": "simaticml_decoder_cli_report", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/cli.py", + "source_location": "L1", + "weight": 1.0, + "source": "simaticml_decoder_cli_rationale_1", + "target": "src_simaticml_decoder_cli_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L29", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_cli_main", + "target": "simaticml_decoder_cli_build_parser" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "cli_py", + "target": "simaticml_decoder_cli_build_parser" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_cli_main", + "target": "simaticml_decoder_cli_write" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_cli_main", + "target": "simaticml_decoder_cli_report" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "cli_py", + "target": "simaticml_decoder_cli_main" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "cli_py", + "target": "simaticml_decoder_cli_write" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "cli_py", + "target": "simaticml_decoder_cli_report" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "cli.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_cli_rationale_1", + "target": "cli_py" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L27", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L35", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_emit_scl", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_render_network", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L74", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_render_statement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L88", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_render_assign", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L108", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_render_flipflop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L130", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_render_box", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L142", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_box_body", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L165", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_box_call_form", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L180", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_render_user_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L202", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_expr", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L209", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_expr_core", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L235", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_wrap_if", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L242", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_guard_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L248", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_format_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L261", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L271", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_sorted_pins", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L276", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_pin_sort_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L283", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_unhandled_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L291", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_emit_sidecar", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L318", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_interface_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L327", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_member_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L340", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_build_trace", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L352", + "weight": 1.0, + "source": "src_simaticml_decoder_emit_py", + "target": "simaticml_decoder_emit_claim", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/emit.py", + "source_location": "L1", + "weight": 1.0, + "source": "simaticml_decoder_emit_rationale_1", + "target": "src_simaticml_decoder_emit_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_emit_scl", + "target": "simaticml_decoder_emit_render_network" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_rationale_36", + "target": "simaticml_decoder_emit_emit_scl" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_emit_scl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_rationale_27", + "target": "simaticml_decoder_emit_emit_scl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_network", + "target": "simaticml_decoder_emit_render_statement" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_render_network" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_statement", + "target": "simaticml_decoder_emit_render_assign" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L78", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_statement", + "target": "simaticml_decoder_emit_render_flipflop" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L80", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_statement", + "target": "simaticml_decoder_emit_render_box" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_statement", + "target": "simaticml_decoder_emit_render_user_call" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_statement", + "target": "simaticml_decoder_emit_unhandled_line" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_render_statement" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_assign", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L103", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_assign", + "target": "simaticml_decoder_emit_guard_block" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L88", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_render_assign" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_flipflop", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_render_flipflop" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_box", + "target": "simaticml_decoder_emit_box_body" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L138", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_box", + "target": "simaticml_decoder_emit_wrap_if" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_render_box" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_box_body", + "target": "simaticml_decoder_emit_first" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L146", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_box_body", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L148", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_box_body", + "target": "simaticml_decoder_emit_sorted_pins" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L162", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_box_body", + "target": "simaticml_decoder_emit_box_call_form" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L142", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_box_body" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L167", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_box_call_form", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L172", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_box_call_form", + "target": "simaticml_decoder_emit_format_call" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L165", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_box_call_form" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L182", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_user_call", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_user_call", + "target": "simaticml_decoder_emit_format_call" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L185", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_render_user_call", + "target": "simaticml_decoder_emit_wrap_if" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L180", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_render_user_call" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L215", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_expr_core", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L236", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_wrap_if", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L202", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_expr" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L209", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_expr_core" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L243", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_guard_block", + "target": "simaticml_decoder_emit_wrap_if" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L235", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_wrap_if" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_guard_block" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L248", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_format_call" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L261", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_first" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_sorted_pins" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_pin_sort_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L283", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_unhandled_line" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L295", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_emit_sidecar", + "target": "simaticml_decoder_emit_interface_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L314", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_emit_sidecar", + "target": "simaticml_decoder_emit_build_trace" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L292", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_rationale_292", + "target": "simaticml_decoder_emit_emit_sidecar" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_emit_sidecar" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_rationale_32", + "target": "simaticml_decoder_emit_emit_sidecar" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L322", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_interface_json", + "target": "simaticml_decoder_emit_member_json" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L318", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_interface_json" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L327", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_member_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L348", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_build_trace", + "target": "simaticml_decoder_emit_claim" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L341", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_rationale_341", + "target": "simaticml_decoder_emit_build_trace" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L340", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_build_trace" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L352", + "weight": 1.0, + "confidence_score": 1.0, + "source": "emit_py", + "target": "simaticml_decoder_emit_claim" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "emit.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_emit_rationale_1", + "target": "emit_py" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L40", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "src_simaticml_decoder_instructions_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L65", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_fold_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L89", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_fold_network", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_fold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L132", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_netfolder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L504", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_materialize", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L511", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_and", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L528", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_factor_or", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L574", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_expr_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L598", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_contains_var", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L622", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_render_instance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L632", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_tag_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L637", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_pin_sort_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L648", + "weight": 1.0, + "source": "src_simaticml_decoder_fold_py", + "target": "simaticml_decoder_fold_uid_key", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/fold.py", + "source_location": "L1", + "weight": 1.0, + "source": "simaticml_decoder_fold_rationale_1", + "target": "src_simaticml_decoder_fold_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L75", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_fold_block", + "target": "simaticml_decoder_fold_fold" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_66", + "target": "simaticml_decoder_fold_fold_block" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_fold_block" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_fold_network", + "target": "simaticml_decoder_fold_fold" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_90", + "target": "simaticml_decoder_fold_fold_network" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_fold_network" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_fold", + "target": "simaticml_decoder_fold_netfolder" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_96", + "target": "simaticml_decoder_fold_fold" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_fold" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_init" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_build_graph" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L171", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_build_inventory" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L176", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_eval_source" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L189", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_value_of_access" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L197", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_eval_part_out" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L211", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_eval_part_out_uncached" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L249", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_eval_edge" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L262", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_eval_or" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L271", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_driver_expr" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L276", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_contact_condition" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L282", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_operand_access" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L288", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_operand_varref" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L294", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_pin_varref" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L302", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_sorted_input_pins" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L306", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_box_label" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L312", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_build_statements" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L326", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_statement_for_part" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L343", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_make_assign" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L363", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_make_flipflop" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L378", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_make_box" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L417", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_statement_for_call" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L450", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_build_xref" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L465", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_role_for_input" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L487", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_fold_netfolder_add_xref" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_133", + "target": "simaticml_decoder_fold_netfolder" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "fold.py", + "source_location": "L40", + "weight": 0.8, + "confidence_score": 0.5, + "source": "simaticml_decoder_fold_netfolder", + "target": "simaticml_decoder_instructions_category" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L132", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_netfolder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_init", + "target": "simaticml_decoder_fold_netfolder_build_graph" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L153", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_init", + "target": "simaticml_decoder_fold_netfolder_build_inventory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_init", + "target": "simaticml_decoder_fold_netfolder_build_xref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_init", + "target": "simaticml_decoder_fold_netfolder_build_statements" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L183", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_source", + "target": "simaticml_decoder_fold_netfolder_value_of_access" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L185", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_source", + "target": "simaticml_decoder_fold_netfolder_eval_part_out" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L274", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_driver_expr", + "target": "simaticml_decoder_fold_netfolder_eval_source" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L386", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_box", + "target": "simaticml_decoder_fold_netfolder_eval_source" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L422", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_statement_for_call", + "target": "simaticml_decoder_fold_netfolder_eval_source" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L206", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out", + "target": "simaticml_decoder_fold_netfolder_eval_part_out_uncached" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L222", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_netfolder_operand_varref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L224", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_netfolder_driver_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L225", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_netfolder_contact_condition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L226", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_and" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L231", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L237", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_netfolder_eval_edge" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L239", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_netfolder_eval_or" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L245", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", + "target": "simaticml_decoder_fold_netfolder_box_label" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L251", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_edge", + "target": "simaticml_decoder_fold_netfolder_pin_varref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_edge", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L254", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_edge", + "target": "simaticml_decoder_fold_netfolder_driver_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L258", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_edge", + "target": "simaticml_decoder_fold_netfolder_operand_varref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L260", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_edge", + "target": "simaticml_decoder_fold_and" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L264", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_or", + "target": "simaticml_decoder_fold_netfolder_sorted_input_pins" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L265", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_or", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L265", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_or", + "target": "simaticml_decoder_fold_netfolder_driver_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L268", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_eval_or", + "target": "simaticml_decoder_fold_factor_or" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_assign", + "target": "simaticml_decoder_fold_netfolder_driver_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_flipflop", + "target": "simaticml_decoder_fold_netfolder_driver_expr" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L277", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_contact_condition", + "target": "simaticml_decoder_fold_netfolder_operand_varref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L289", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_operand_varref", + "target": "simaticml_decoder_fold_netfolder_operand_access" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L344", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_assign", + "target": "simaticml_decoder_fold_netfolder_operand_varref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L364", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_flipflop", + "target": "simaticml_decoder_fold_netfolder_operand_varref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L308", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_box_label", + "target": "simaticml_decoder_fold_render_instance" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L316", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_build_statements", + "target": "simaticml_decoder_fold_netfolder_statement_for_part" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L318", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_build_statements", + "target": "simaticml_decoder_fold_uid_key" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L321", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_build_statements", + "target": "simaticml_decoder_fold_netfolder_statement_for_call" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L335", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_statement_for_part", + "target": "simaticml_decoder_fold_netfolder_make_assign" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L337", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_statement_for_part", + "target": "simaticml_decoder_fold_netfolder_make_flipflop" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L339", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_statement_for_part", + "target": "simaticml_decoder_fold_netfolder_make_box" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L354", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_assign", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L355", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_assign", + "target": "simaticml_decoder_fold_contains_var" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L372", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_flipflop", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L389", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_box", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L404", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_make_box", + "target": "simaticml_decoder_fold_render_instance" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L422", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_statement_for_call", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L443", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_statement_for_call", + "target": "simaticml_decoder_fold_render_instance" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L458", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_build_xref", + "target": "simaticml_decoder_fold_netfolder_role_for_input" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L459", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_build_xref", + "target": "simaticml_decoder_fold_netfolder_add_xref" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L493", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_netfolder_add_xref", + "target": "simaticml_decoder_fold_tag_name" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L505", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_505", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L504", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_materialize" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L512", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_512", + "target": "simaticml_decoder_fold_and" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L511", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_and" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L552", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_factor_or", + "target": "simaticml_decoder_fold_expr_key" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L529", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_529", + "target": "simaticml_decoder_fold_factor_or" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L528", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_factor_or" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L575", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_575", + "target": "simaticml_decoder_fold_expr_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L574", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_expr_key" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L599", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_599", + "target": "simaticml_decoder_fold_contains_var" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L598", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_contains_var" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L623", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_623", + "target": "simaticml_decoder_fold_render_instance" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L622", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_render_instance" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L632", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_tag_name" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L638", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_638", + "target": "simaticml_decoder_fold_pin_sort_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L637", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_pin_sort_key" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L648", + "weight": 1.0, + "confidence_score": 1.0, + "source": "fold_py", + "target": "simaticml_decoder_fold_uid_key" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "fold.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_fold_rationale_1", + "target": "fold_py" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L18", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "enum", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L21", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_category", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L32", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L43", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_pf", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L47", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_coil", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_cmp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_box", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L103", + "weight": 1.0, + "source": "src_simaticml_decoder_instructions_py", + "target": "simaticml_decoder_instructions_lookup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/instructions.py", + "source_location": "L1", + "weight": 1.0, + "source": "simaticml_decoder_instructions_rationale_1", + "target": "src_simaticml_decoder_instructions_py", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_category", + "target": "str" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_category", + "target": "enum" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_category" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_edgekind", + "target": "str" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_assignkind", + "target": "str" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_blockkind", + "target": "str" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_language", + "target": "str" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_endpointkind", + "target": "str" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L16", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "enum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_edgekind", + "target": "enum" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_assignkind", + "target": "enum" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L17", + "weight": 1.0, + "source": "src_simaticml_decoder_model_py", + "target": "enum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_blockkind", + "target": "enum" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_language", + "target": "enum" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L169", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_endpointkind", + "target": "enum" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L18", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "enum" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "enum" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "model_py", + "target": "enum" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_pf", + "target": "simaticml_decoder_instructions_spec" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_coil", + "target": "simaticml_decoder_instructions_spec" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_cmp", + "target": "simaticml_decoder_instructions_spec" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L56", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_box", + "target": "simaticml_decoder_instructions_spec" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_spec" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_pf" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_coil" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_cmp" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_box" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_rationale_104", + "target": "simaticml_decoder_instructions_lookup" + }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L74", + "source_file": "instructions.py", + "source_location": "L103", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_render_statement", + "confidence_score": 1.0, + "source": "instructions_py", + "target": "simaticml_decoder_instructions_lookup" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "instructions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_instructions_rationale_1", + "target": "instructions_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L22", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_varref", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L88", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L30", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_render_assign", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_literal", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L108", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L36", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_render_flipflop", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_not", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L130", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L41", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_render_box", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_and", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L142", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L46", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_box_body", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_or", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L165", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L51", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_box_call_form", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_compare", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L180", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L58", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_render_user_call", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_edgekind", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L202", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L64", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_edge", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L209", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L72", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_expr_core", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_rawexpr", "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L235", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L80", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_wrap_if", + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_unhandled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_assignkind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L104", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_assign", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L114", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_flipflop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L125", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_boxcall", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L137", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_usercall", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L155", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_networklogic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L166", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_tagref", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L175", + "weight": 1.0, + "source": "src_simaticml_decoder_ir_py", + "target": "simaticml_decoder_ir_decodedblock", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/ir.py", + "source_location": "L1", + "weight": 1.0, + "source": "simaticml_decoder_ir_rationale_1", + "target": "src_simaticml_decoder_ir_py", "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_rationale_23", + "target": "simaticml_decoder_ir_varref" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_varref" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_literal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_not" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_and" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L46", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_or" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_compare" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L58", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_edgekind" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_edge" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L73", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_rationale_73", + "target": "simaticml_decoder_ir_rawexpr" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "ir.py", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_rawexpr" + }, + { + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L242", + "source_file": "ir.py", + "source_location": "L81", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_guard_block", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_rationale_81", + "target": "simaticml_decoder_ir_unhandled" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L248", + "source_file": "ir.py", + "source_location": "L80", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_format_call", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_unhandled" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L261", + "source_file": "ir.py", + "source_location": "L96", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_first", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_assignkind" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L271", + "source_file": "ir.py", + "source_location": "L104", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_sorted_pins", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_assign" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L276", + "source_file": "ir.py", + "source_location": "L115", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_pin_sort_key", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_rationale_115", + "target": "simaticml_decoder_ir_flipflop" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L283", + "source_file": "ir.py", + "source_location": "L114", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_unhandled_line", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_flipflop" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L31", + "source_file": "ir.py", + "source_location": "L126", "weight": 1.0, "confidence_score": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_emit_sidecar" + "source": "simaticml_decoder_ir_rationale_126", + "target": "simaticml_decoder_ir_boxcall" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L318", + "source_file": "ir.py", + "source_location": "L125", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_interface_json", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_boxcall" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L327", + "source_file": "ir.py", + "source_location": "L138", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_member_json", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "simaticml_decoder_ir_rationale_138", + "target": "simaticml_decoder_ir_usercall" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L340", + "source_file": "ir.py", + "source_location": "L137", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_build_trace", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_usercall" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L352", + "source_file": "ir.py", + "source_location": "L155", "weight": 1.0, - "source": "emit_py", - "target": "simaticml_decoder_emit_claim", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_networklogic" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L1", + "source_file": "ir.py", + "source_location": "L167", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_emit_rationale_1", - "target": "emit_py" + "source": "simaticml_decoder_ir_rationale_167", + "target": "simaticml_decoder_ir_tagref" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L43", + "source_file": "ir.py", + "source_location": "L166", "weight": 1.0, - "source": "simaticml_decoder_emit_emit_scl", - "target": "simaticml_decoder_emit_render_network", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_tagref" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L36", + "source_file": "ir.py", + "source_location": "L175", "weight": 1.0, - "source": "simaticml_decoder_emit_rationale_36", - "target": "simaticml_decoder_emit_emit_scl", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "ir_py", + "target": "simaticml_decoder_ir_decodedblock" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L27", + "source_file": "ir.py", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_emit_rationale_27", - "target": "simaticml_decoder_emit_emit_scl" + "source": "simaticml_decoder_ir_rationale_1", + "target": "ir_py" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L67", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L20", "weight": 1.0, - "source": "simaticml_decoder_emit_render_network", - "target": "simaticml_decoder_emit_render_statement", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_blockkind", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L76", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L28", "weight": 1.0, - "source": "simaticml_decoder_emit_render_statement", - "target": "simaticml_decoder_emit_render_assign", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_language", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L78", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L43", "weight": 1.0, - "source": "simaticml_decoder_emit_render_statement", - "target": "simaticml_decoder_emit_render_flipflop", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_member", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L80", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L56", "weight": 1.0, - "source": "simaticml_decoder_emit_render_statement", - "target": "simaticml_decoder_emit_render_box", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_section", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L82", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L62", "weight": 1.0, - "source": "simaticml_decoder_emit_render_statement", - "target": "simaticml_decoder_emit_render_user_call", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_interface", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L84", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L70", "weight": 1.0, - "source": "simaticml_decoder_emit_render_statement", - "target": "simaticml_decoder_emit_unhandled_line", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_component", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L90", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L81", "weight": 1.0, - "source": "simaticml_decoder_emit_render_assign", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_symbol", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L103", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L86", "weight": 1.0, - "source": "simaticml_decoder_emit_render_assign", - "target": "simaticml_decoder_emit_guard_block", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_constant", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L110", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L94", "weight": 1.0, - "source": "simaticml_decoder_emit_render_flipflop", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_address", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L133", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L106", "weight": 1.0, - "source": "simaticml_decoder_emit_render_box", - "target": "simaticml_decoder_emit_box_body", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_access", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L138", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L119", "weight": 1.0, - "source": "simaticml_decoder_emit_render_box", - "target": "simaticml_decoder_emit_wrap_if", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_templatevalue", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L144", - "weight": 1.0, - "source": "simaticml_decoder_emit_box_body", - "target": "simaticml_decoder_emit_first", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L126", + "weight": 1.0, + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_instance", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L146", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L134", "weight": 1.0, - "source": "simaticml_decoder_emit_box_body", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_part", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L148", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L149", "weight": 1.0, - "source": "simaticml_decoder_emit_box_body", - "target": "simaticml_decoder_emit_sorted_pins", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_parameter", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L162", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L157", "weight": 1.0, - "source": "simaticml_decoder_emit_box_body", - "target": "simaticml_decoder_emit_box_call_form", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_call", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L167", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L169", "weight": 1.0, - "source": "simaticml_decoder_emit_box_call_form", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_endpointkind", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L172", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L178", "weight": 1.0, - "source": "simaticml_decoder_emit_box_call_form", - "target": "simaticml_decoder_emit_format_call", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_endpoint", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L182", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L185", "weight": 1.0, - "source": "simaticml_decoder_emit_render_user_call", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_wire", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L183", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L193", "weight": 1.0, - "source": "simaticml_decoder_emit_render_user_call", - "target": "simaticml_decoder_emit_format_call", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_label", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L185", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L203", "weight": 1.0, - "source": "simaticml_decoder_emit_render_user_call", - "target": "simaticml_decoder_emit_wrap_if", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_flgnet", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", + "source_file": "src/simaticml_decoder/model.py", "source_location": "L215", "weight": 1.0, - "source": "simaticml_decoder_emit_expr_core", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_structuredtext", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L236", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L225", "weight": 1.0, - "source": "simaticml_decoder_emit_wrap_if", - "target": "simaticml_decoder_emit_expr", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_rawsource", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L243", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L234", "weight": 1.0, - "source": "simaticml_decoder_emit_guard_block", - "target": "simaticml_decoder_emit_wrap_if", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_network", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L295", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L246", "weight": 1.0, - "source": "simaticml_decoder_emit_emit_sidecar", - "target": "simaticml_decoder_emit_interface_json", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_block", "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L314", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L262", "weight": 1.0, - "source": "simaticml_decoder_emit_emit_sidecar", - "target": "simaticml_decoder_emit_build_trace", + "source": "src_simaticml_decoder_model_py", + "target": "simaticml_decoder_model_document", "confidence_score": 1.0 }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L292", + "source_file": "src/simaticml_decoder/model.py", + "source_location": "L1", "weight": 1.0, - "source": "simaticml_decoder_emit_rationale_292", - "target": "simaticml_decoder_emit_emit_sidecar", + "source": "simaticml_decoder_model_rationale_1", + "target": "src_simaticml_decoder_model_py", "confidence_score": 1.0 }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "model_py", + "target": "simaticml_decoder_model_blockkind" + }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L32", + "source_file": "model.py", + "source_location": "L29", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_emit_rationale_32", - "target": "simaticml_decoder_emit_emit_sidecar" + "source": "simaticml_decoder_model_rationale_29", + "target": "simaticml_decoder_model_language" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L322", + "source_file": "model.py", + "source_location": "L28", "weight": 1.0, - "source": "simaticml_decoder_emit_interface_json", - "target": "simaticml_decoder_emit_member_json", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "model_py", + "target": "simaticml_decoder_model_language" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L348", + "source_file": "model.py", + "source_location": "L43", "weight": 1.0, - "source": "simaticml_decoder_emit_build_trace", - "target": "simaticml_decoder_emit_claim", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "model_py", + "target": "simaticml_decoder_model_member" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L56", + "weight": 1.0, + "confidence_score": 1.0, + "source": "model_py", + "target": "simaticml_decoder_model_section" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L62", + "weight": 1.0, + "confidence_score": 1.0, + "source": "model_py", + "target": "simaticml_decoder_model_interface" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "emit.py", - "source_location": "L341", + "source_file": "model.py", + "source_location": "L71", "weight": 1.0, - "source": "simaticml_decoder_emit_rationale_341", - "target": "simaticml_decoder_emit_build_trace", - "confidence_score": 1.0 + "confidence_score": 1.0, + "source": "simaticml_decoder_model_rationale_71", + "target": "simaticml_decoder_model_component" }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L39", + "source_file": "model.py", + "source_location": "L70", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "init_py" + "source": "model_py", + "target": "simaticml_decoder_model_component" }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L40", + "source_file": "model.py", + "source_location": "L81", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "instructions_py" + "source": "model_py", + "target": "simaticml_decoder_model_symbol" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L65", + "source_file": "model.py", + "source_location": "L86", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_fold_block" + "source": "model_py", + "target": "simaticml_decoder_model_constant" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L89", + "source_file": "model.py", + "source_location": "L94", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_fold_network" + "source": "model_py", + "target": "simaticml_decoder_model_address" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_rationale_107", + "target": "simaticml_decoder_model_access" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L95", + "source_file": "model.py", + "source_location": "L106", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_fold" + "source": "model_py", + "target": "simaticml_decoder_model_access" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L132", + "source_file": "model.py", + "source_location": "L119", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_netfolder" + "source": "model_py", + "target": "simaticml_decoder_model_templatevalue" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "simaticml_decoder_model_rationale_127", + "target": "simaticml_decoder_model_instance" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L504", + "source_file": "model.py", + "source_location": "L126", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_materialize" + "source": "model_py", + "target": "simaticml_decoder_model_instance" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L511", + "source_file": "model.py", + "source_location": "L134", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_and" + "source": "model_py", + "target": "simaticml_decoder_model_part" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L528", + "source_file": "model.py", + "source_location": "L149", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_factor_or" + "source": "model_py", + "target": "simaticml_decoder_model_parameter" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L574", + "source_file": "model.py", + "source_location": "L157", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_expr_key" + "source": "model_py", + "target": "simaticml_decoder_model_call" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L598", + "source_file": "model.py", + "source_location": "L169", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_contains_var" + "source": "model_py", + "target": "simaticml_decoder_model_endpointkind" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L622", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L26", "weight": 1.0, - "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_render_instance" + "source": "tests_test_fold_pr", + "target": "simaticml_decoder_model_endpoint" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L632", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L30", "weight": 1.0, - "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_tag_name" + "source": "tests_test_fold_ic", + "target": "simaticml_decoder_model_endpoint" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L637", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L34", "weight": 1.0, - "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_pin_sort_key" + "source": "tests_test_fold_nc", + "target": "simaticml_decoder_model_endpoint" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L648", + "source_file": "model.py", + "source_location": "L178", "weight": 1.0, "confidence_score": 1.0, - "source": "fold_py", - "target": "simaticml_decoder_fold_uid_key" + "source": "model_py", + "target": "simaticml_decoder_model_endpoint" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L1", + "source_file": "model.py", + "source_location": "L186", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_1", - "target": "fold_py" + "source": "simaticml_decoder_model_rationale_186", + "target": "simaticml_decoder_model_wire" }, { "relation": "calls", "context": "call", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L75", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L42", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_fold_block", - "target": "simaticml_decoder_fold_fold" + "source": "tests_test_fold_test_contact_drives_coil", + "target": "simaticml_decoder_model_wire" }, { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L66", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L61", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_66", - "target": "simaticml_decoder_fold_fold_block" + "source": "tests_test_fold_test_negated_contact_is_not", + "target": "simaticml_decoder_model_wire" }, { "relation": "calls", "context": "call", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L91", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L78", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_fold_network", - "target": "simaticml_decoder_fold_fold" + "source": "tests_test_fold_test_or_junction_is_nary_or", + "target": "simaticml_decoder_model_wire" }, { - "relation": "rationale_for", - "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L90", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L101", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_90", - "target": "simaticml_decoder_fold_fold_network" + "source": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "target": "simaticml_decoder_model_wire" }, { "relation": "calls", "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fold.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "target": "simaticml_decoder_model_wire" + }, + { + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L114", + "source_file": "model.py", + "source_location": "L185", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_fold", - "target": "simaticml_decoder_fold_netfolder" + "source": "model_py", + "target": "simaticml_decoder_model_wire" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "model.py", + "source_location": "L193", + "weight": 1.0, + "confidence_score": 1.0, + "source": "model_py", + "target": "simaticml_decoder_model_label" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L96", + "source_file": "model.py", + "source_location": "L204", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_96", - "target": "simaticml_decoder_fold_fold" + "source": "simaticml_decoder_model_rationale_204", + "target": "simaticml_decoder_model_flgnet" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L135", + "source_file": "model.py", + "source_location": "L203", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_init" + "source": "model_py", + "target": "simaticml_decoder_model_flgnet" }, { - "relation": "method", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L158", + "source_file": "model.py", + "source_location": "L216", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_build_graph" + "source": "simaticml_decoder_model_rationale_216", + "target": "simaticml_decoder_model_structuredtext" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L171", + "source_file": "model.py", + "source_location": "L215", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_build_inventory" + "source": "model_py", + "target": "simaticml_decoder_model_structuredtext" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L176", + "source_file": "model.py", + "source_location": "L225", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_eval_source" + "source": "model_py", + "target": "simaticml_decoder_model_rawsource" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L189", + "source_file": "model.py", + "source_location": "L234", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_value_of_access" + "source": "model_py", + "target": "simaticml_decoder_model_network" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L197", + "source_file": "model.py", + "source_location": "L246", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_eval_part_out" + "source": "model_py", + "target": "simaticml_decoder_model_block" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L211", + "source_file": "model.py", + "source_location": "L262", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_eval_part_out_uncached" + "source": "model_py", + "target": "simaticml_decoder_model_document" }, { - "relation": "method", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L249", + "source_file": "model.py", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_eval_edge" + "source": "simaticml_decoder_model_rationale_1", + "target": "model_py" }, { - "relation": "method", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L21", + "weight": 1.0, + "source": "src_simaticml_decoder_operand_py", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L262", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L60", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_eval_or" + "source": "src_simaticml_decoder_operand_py", + "target": "simaticml_decoder_operand_render", + "confidence_score": 1.0 }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L271", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L78", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_driver_expr" + "source": "src_simaticml_decoder_operand_py", + "target": "simaticml_decoder_operand_render_symbol", + "confidence_score": 1.0 }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L276", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L94", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_contact_condition" + "source": "src_simaticml_decoder_operand_py", + "target": "simaticml_decoder_operand_render_component", + "confidence_score": 1.0 }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L282", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L111", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_operand_access" + "source": "src_simaticml_decoder_operand_py", + "target": "simaticml_decoder_operand_render_constant", + "confidence_score": 1.0 }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L288", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L122", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_operand_varref" + "source": "src_simaticml_decoder_operand_py", + "target": "simaticml_decoder_operand_render_address", + "confidence_score": 1.0 }, { - "relation": "method", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L294", + "source_file": "src/simaticml_decoder/operand.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_pin_varref" + "source": "simaticml_decoder_operand_rationale_1", + "target": "src_simaticml_decoder_operand_py", + "confidence_score": 1.0 }, { - "relation": "method", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L302", + "source_file": "operand.py", + "source_location": "L64", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_sorted_input_pins" + "source": "simaticml_decoder_operand_render", + "target": "simaticml_decoder_operand_render_symbol" }, { - "relation": "method", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L306", + "source_file": "operand.py", + "source_location": "L66", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_box_label" + "source": "simaticml_decoder_operand_render", + "target": "simaticml_decoder_operand_render_constant" }, { - "relation": "method", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L312", + "source_file": "operand.py", + "source_location": "L68", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_build_statements" + "source": "simaticml_decoder_operand_render", + "target": "simaticml_decoder_operand_render_address" }, { - "relation": "method", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L326", + "source_file": "operand.py", + "source_location": "L98", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_statement_for_part" + "source": "simaticml_decoder_operand_render_component", + "target": "simaticml_decoder_operand_render" }, { - "relation": "method", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L343", + "source_file": "operand.py", + "source_location": "L61", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_make_assign" + "source": "simaticml_decoder_operand_rationale_61", + "target": "simaticml_decoder_operand_render" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L363", + "source_file": "operand.py", + "source_location": "L60", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_make_flipflop" + "source": "operand_py", + "target": "simaticml_decoder_operand_render" }, { - "relation": "method", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L378", + "source_file": "operand.py", + "source_location": "L83", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_make_box" + "source": "simaticml_decoder_operand_render_symbol", + "target": "simaticml_decoder_operand_render_component" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L417", + "source_file": "operand.py", + "source_location": "L78", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_statement_for_call" + "source": "operand_py", + "target": "simaticml_decoder_operand_render_symbol" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L450", + "source_file": "operand.py", + "source_location": "L94", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_build_xref" + "source": "operand_py", + "target": "simaticml_decoder_operand_render_component" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L465", + "source_file": "operand.py", + "source_location": "L111", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_role_for_input" + "source": "operand_py", + "target": "simaticml_decoder_operand_render_constant" }, { - "relation": "method", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L487", + "source_file": "operand.py", + "source_location": "L122", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_fold_netfolder_add_xref" + "source": "operand_py", + "target": "simaticml_decoder_operand_render_address" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L133", + "source_file": "operand.py", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_133", - "target": "simaticml_decoder_fold_netfolder" - }, - { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "fold.py", - "source_location": "L40", - "weight": 0.8, - "confidence_score": 0.5, - "source": "simaticml_decoder_fold_netfolder", - "target": "simaticml_decoder_instructions_category" + "source": "simaticml_decoder_operand_rationale_1", + "target": "operand_py" }, { - "relation": "calls", - "context": "call", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L143", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L24", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_init", - "target": "simaticml_decoder_fold_netfolder_build_graph" + "source": "src_simaticml_decoder_parse_py", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L153", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L31", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_init", - "target": "simaticml_decoder_fold_netfolder_build_inventory" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_ln", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L154", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L38", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_init", - "target": "simaticml_decoder_fold_netfolder_build_xref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_children", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L155", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L43", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_init", - "target": "simaticml_decoder_fold_netfolder_build_statements" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_child", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L183", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L53", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_source", - "target": "simaticml_decoder_fold_netfolder_value_of_access" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_child_text", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L185", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L58", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_source", - "target": "simaticml_decoder_fold_netfolder_eval_part_out" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_first_element_child", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L274", - "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_driver_expr", - "target": "simaticml_decoder_fold_netfolder_eval_source" + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L67", + "weight": 1.0, + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_nz", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L386", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L75", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_box", - "target": "simaticml_decoder_fold_netfolder_eval_source" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_is_true", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L422", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L79", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_statement_for_call", - "target": "simaticml_decoder_fold_netfolder_eval_source" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_int_or_none", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L206", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L88", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out", - "target": "simaticml_decoder_fold_netfolder_eval_part_out_uncached" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_extra_attrs", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L222", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L98", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_netfolder_operand_varref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_document", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L224", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L112", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_netfolder_driver_expr" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_file", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L225", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L123", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_netfolder_contact_condition" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_find_block_element", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L226", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L130", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_and" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_block_kind", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L231", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L138", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_materialize" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_block", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L237", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L164", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_netfolder_eval_edge" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_language", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L239", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L184", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_netfolder_eval_or" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_interface", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L245", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L202", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_part_out_uncached", - "target": "simaticml_decoder_fold_netfolder_box_label" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_member", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L251", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L242", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_edge", - "target": "simaticml_decoder_fold_netfolder_pin_varref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_compile_unit", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L254", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L259", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_edge", - "target": "simaticml_decoder_fold_materialize" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_network_source", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L254", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L286", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_edge", - "target": "simaticml_decoder_fold_netfolder_driver_expr" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_flgnet", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L258", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L326", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_edge", - "target": "simaticml_decoder_fold_netfolder_operand_varref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_access", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L260", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L357", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_edge", - "target": "simaticml_decoder_fold_and" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_symbol", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L264", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L361", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_or", - "target": "simaticml_decoder_fold_netfolder_sorted_input_pins" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_component", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L265", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L374", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_or", - "target": "simaticml_decoder_fold_materialize" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_constant", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L265", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L396", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_or", - "target": "simaticml_decoder_fold_netfolder_driver_expr" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_address", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L268", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L408", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_eval_or", - "target": "simaticml_decoder_fold_factor_or" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_part", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L354", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L461", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_assign", - "target": "simaticml_decoder_fold_netfolder_driver_expr" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_instance", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L372", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L468", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_flipflop", - "target": "simaticml_decoder_fold_netfolder_driver_expr" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_call", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L277", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L511", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_contact_condition", - "target": "simaticml_decoder_fold_netfolder_operand_varref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_wire", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L289", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L528", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_operand_varref", - "target": "simaticml_decoder_fold_netfolder_operand_access" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_parse_structured_text", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L344", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L549", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_assign", - "target": "simaticml_decoder_fold_netfolder_operand_varref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_titles_and_comments", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L364", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L562", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_flipflop", - "target": "simaticml_decoder_fold_netfolder_operand_varref" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_multilingual_text", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L308", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L585", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_box_label", - "target": "simaticml_decoder_fold_render_instance" + "source": "src_simaticml_decoder_parse_py", + "target": "simaticml_decoder_parse_inline_comment", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L316", + "source_file": "src/simaticml_decoder/parse.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_build_statements", - "target": "simaticml_decoder_fold_netfolder_statement_for_part" + "source": "simaticml_decoder_parse_rationale_1", + "target": "src_simaticml_decoder_parse_py", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L318", + "source_file": "parse.py", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_build_statements", - "target": "simaticml_decoder_fold_uid_key" + "source": "simaticml_decoder_parse_children", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L321", + "source_file": "parse.py", + "source_location": "L48", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_build_statements", - "target": "simaticml_decoder_fold_netfolder_statement_for_call" + "source": "simaticml_decoder_parse_child", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L335", + "source_file": "parse.py", + "source_location": "L125", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_statement_for_part", - "target": "simaticml_decoder_fold_netfolder_make_assign" + "source": "simaticml_decoder_parse_find_block_element", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L337", + "source_file": "parse.py", + "source_location": "L143", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_statement_for_part", - "target": "simaticml_decoder_fold_netfolder_make_flipflop" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L339", + "source_file": "parse.py", + "source_location": "L271", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_statement_for_part", - "target": "simaticml_decoder_fold_netfolder_make_box" + "source": "simaticml_decoder_parse_parse_network_source", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L354", + "source_file": "parse.py", + "source_location": "L292", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_assign", - "target": "simaticml_decoder_fold_materialize" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L355", + "source_file": "parse.py", + "source_location": "L331", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_assign", - "target": "simaticml_decoder_fold_contains_var" + "source": "simaticml_decoder_parse_parse_access", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L372", + "source_file": "parse.py", + "source_location": "L418", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_flipflop", - "target": "simaticml_decoder_fold_materialize" + "source": "simaticml_decoder_parse_parse_part", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L389", + "source_file": "parse.py", + "source_location": "L479", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_box", - "target": "simaticml_decoder_fold_materialize" + "source": "simaticml_decoder_parse_parse_call", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L404", + "source_file": "parse.py", + "source_location": "L514", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_make_box", - "target": "simaticml_decoder_fold_render_instance" + "source": "simaticml_decoder_parse_parse_wire", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L422", + "source_file": "parse.py", + "source_location": "L537", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_statement_for_call", - "target": "simaticml_decoder_fold_materialize" + "source": "simaticml_decoder_parse_parse_structured_text", + "target": "simaticml_decoder_parse_ln" }, { - "relation": "calls", - "context": "call", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L443", + "source_file": "parse.py", + "source_location": "L32", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_statement_for_call", - "target": "simaticml_decoder_fold_render_instance" + "source": "simaticml_decoder_parse_rationale_32", + "target": "simaticml_decoder_parse_ln" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L458", + "source_file": "parse.py", + "source_location": "L31", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_build_xref", - "target": "simaticml_decoder_fold_netfolder_role_for_input" + "source": "parse_py", + "target": "simaticml_decoder_parse_ln" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L459", + "source_file": "parse.py", + "source_location": "L157", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_build_xref", - "target": "simaticml_decoder_fold_netfolder_add_xref" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_children" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L493", + "source_file": "parse.py", + "source_location": "L191", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_netfolder_add_xref", - "target": "simaticml_decoder_fold_tag_name" + "source": "simaticml_decoder_parse_parse_interface", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L505", + "source_file": "parse.py", + "source_location": "L219", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_505", - "target": "simaticml_decoder_fold_materialize" + "source": "simaticml_decoder_parse_parse_member", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L512", + "source_file": "parse.py", + "source_location": "L305", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_512", - "target": "simaticml_decoder_fold_and" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_children" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L552", + "source_file": "parse.py", + "source_location": "L358", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_factor_or", - "target": "simaticml_decoder_fold_expr_key" + "source": "simaticml_decoder_parse_parse_symbol", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L529", + "source_file": "parse.py", + "source_location": "L370", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_529", - "target": "simaticml_decoder_fold_factor_or" + "source": "simaticml_decoder_parse_parse_component", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L575", + "source_file": "parse.py", + "source_location": "L384", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_575", - "target": "simaticml_decoder_fold_expr_key" + "source": "simaticml_decoder_parse_parse_constant", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L599", + "source_file": "parse.py", + "source_location": "L464", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_599", - "target": "simaticml_decoder_fold_contains_var" + "source": "simaticml_decoder_parse_parse_instance", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L623", + "source_file": "parse.py", + "source_location": "L552", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_623", - "target": "simaticml_decoder_fold_render_instance" + "source": "simaticml_decoder_parse_titles_and_comments", + "target": "simaticml_decoder_parse_children" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "fold.py", - "source_location": "L638", + "source_file": "parse.py", + "source_location": "L572", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_fold_rationale_638", - "target": "simaticml_decoder_fold_pin_sort_key" + "source": "simaticml_decoder_parse_multilingual_text", + "target": "simaticml_decoder_parse_children" }, { - "relation": "imports_from", - "context": "import", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L18", + "source_file": "parse.py", + "source_location": "L590", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "enum" + "source": "simaticml_decoder_parse_inline_comment", + "target": "simaticml_decoder_parse_children" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L21", + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "parse.py", + "source_location": "L39", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_category" + "source": "simaticml_decoder_parse_rationale_39", + "target": "simaticml_decoder_parse_children" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L32", + "source_file": "parse.py", + "source_location": "L38", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_spec" + "source": "parse_py", + "target": "simaticml_decoder_parse_children" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L43", + "source_file": "parse.py", + "source_location": "L54", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_pf" + "source": "simaticml_decoder_parse_child_text", + "target": "simaticml_decoder_parse_child" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L47", + "source_file": "parse.py", + "source_location": "L102", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_coil" + "source": "simaticml_decoder_parse_parse_document", + "target": "simaticml_decoder_parse_child" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L51", + "source_file": "parse.py", + "source_location": "L139", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_cmp" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_child" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L55", + "source_file": "parse.py", + "source_location": "L188", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_box" + "source": "simaticml_decoder_parse_parse_interface", + "target": "simaticml_decoder_parse_child" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L103", + "source_file": "parse.py", + "source_location": "L215", "weight": 1.0, "confidence_score": 1.0, - "source": "instructions_py", - "target": "simaticml_decoder_instructions_lookup" + "source": "simaticml_decoder_parse_parse_member", + "target": "simaticml_decoder_parse_child" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L1", + "source_file": "parse.py", + "source_location": "L243", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_rationale_1", - "target": "instructions_py" + "source": "simaticml_decoder_parse_parse_compile_unit", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L21", + "source_file": "parse.py", + "source_location": "L289", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_category", - "target": "str" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L21", + "source_file": "parse.py", + "source_location": "L375", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_category", - "target": "enum" + "source": "simaticml_decoder_parse_parse_constant", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L58", + "source_file": "parse.py", + "source_location": "L469", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_edgekind", - "target": "str" + "source": "simaticml_decoder_parse_parse_call", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L96", + "source_file": "parse.py", + "source_location": "L568", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_assignkind", - "target": "str" + "source": "simaticml_decoder_parse_multilingual_text", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L20", + "source_file": "parse.py", + "source_location": "L44", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_blockkind", - "target": "str" + "source": "simaticml_decoder_parse_rationale_44", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L28", + "source_file": "parse.py", + "source_location": "L43", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_language", - "target": "str" + "source": "parse_py", + "target": "simaticml_decoder_parse_child" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L169", + "source_file": "parse.py", + "source_location": "L145", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_endpointkind", - "target": "str" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_child_text" }, { - "relation": "imports_from", - "context": "import", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L16", + "source_file": "parse.py", + "source_location": "L229", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "enum" + "source": "simaticml_decoder_parse_parse_member", + "target": "simaticml_decoder_parse_child_text" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L58", + "source_file": "parse.py", + "source_location": "L246", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_edgekind", - "target": "enum" + "source": "simaticml_decoder_parse_parse_compile_unit", + "target": "simaticml_decoder_parse_child_text" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L96", + "source_file": "parse.py", + "source_location": "L576", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_assignkind", - "target": "enum" + "source": "simaticml_decoder_parse_multilingual_text", + "target": "simaticml_decoder_parse_child_text" }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L17", + "source_file": "parse.py", + "source_location": "L53", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "enum" + "source": "parse_py", + "target": "simaticml_decoder_parse_child_text" }, { - "relation": "inherits", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L20", + "source_file": "parse.py", + "source_location": "L267", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_blockkind", - "target": "enum" + "source": "simaticml_decoder_parse_parse_network_source", + "target": "simaticml_decoder_parse_first_element_child" }, { - "relation": "inherits", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L28", + "source_file": "parse.py", + "source_location": "L59", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_language", - "target": "enum" + "source": "simaticml_decoder_parse_rationale_59", + "target": "simaticml_decoder_parse_first_element_child" }, { - "relation": "inherits", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L169", + "source_file": "parse.py", + "source_location": "L58", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_endpointkind", - "target": "enum" + "source": "parse_py", + "target": "simaticml_decoder_parse_first_element_child" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L44", + "source_file": "parse.py", + "source_location": "L145", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_pf", - "target": "simaticml_decoder_instructions_spec" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_nz" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L48", + "source_file": "parse.py", + "source_location": "L229", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_coil", - "target": "simaticml_decoder_instructions_spec" + "source": "simaticml_decoder_parse_parse_member", + "target": "simaticml_decoder_parse_nz" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L52", + "source_file": "parse.py", + "source_location": "L577", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_cmp", - "target": "simaticml_decoder_instructions_spec" + "source": "simaticml_decoder_parse_multilingual_text", + "target": "simaticml_decoder_parse_nz" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L56", + "source_file": "parse.py", + "source_location": "L591", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_box", - "target": "simaticml_decoder_instructions_spec" + "source": "simaticml_decoder_parse_inline_comment", + "target": "simaticml_decoder_parse_nz" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "instructions.py", - "source_location": "L104", - "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_instructions_rationale_104", - "target": "simaticml_decoder_instructions_lookup" - }, - { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L22", + "source_file": "parse.py", + "source_location": "L68", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_varref" + "source": "simaticml_decoder_parse_rationale_68", + "target": "simaticml_decoder_parse_nz" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L30", + "source_file": "parse.py", + "source_location": "L67", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_literal" + "source": "parse_py", + "target": "simaticml_decoder_parse_nz" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L36", + "source_file": "parse.py", + "source_location": "L150", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_not" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_is_true" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L41", + "source_file": "parse.py", + "source_location": "L378", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_and" + "source": "simaticml_decoder_parse_parse_constant", + "target": "simaticml_decoder_parse_is_true" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L46", + "source_file": "parse.py", + "source_location": "L449", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_or" + "source": "simaticml_decoder_parse_parse_part", + "target": "simaticml_decoder_parse_is_true" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L51", + "source_file": "parse.py", + "source_location": "L486", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_compare" + "source": "simaticml_decoder_parse_parse_call", + "target": "simaticml_decoder_parse_is_true" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L58", + "source_file": "parse.py", + "source_location": "L75", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_edgekind" + "source": "parse_py", + "target": "simaticml_decoder_parse_is_true" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L64", + "source_file": "parse.py", + "source_location": "L146", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_edge" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_int_or_none" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L72", + "source_file": "parse.py", + "source_location": "L400", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_rawexpr" + "source": "simaticml_decoder_parse_parse_address", + "target": "simaticml_decoder_parse_int_or_none" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L80", + "source_file": "parse.py", + "source_location": "L79", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_unhandled" + "source": "parse_py", + "target": "simaticml_decoder_parse_int_or_none" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L96", + "source_file": "parse.py", + "source_location": "L212", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_assignkind" + "source": "simaticml_decoder_parse_parse_member", + "target": "simaticml_decoder_parse_extra_attrs" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L104", + "source_file": "parse.py", + "source_location": "L345", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_assign" + "source": "simaticml_decoder_parse_parse_access", + "target": "simaticml_decoder_parse_extra_attrs" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L114", + "source_file": "parse.py", + "source_location": "L442", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_flipflop" + "source": "simaticml_decoder_parse_parse_part", + "target": "simaticml_decoder_parse_extra_attrs" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L125", + "source_file": "parse.py", + "source_location": "L89", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_boxcall" + "source": "simaticml_decoder_parse_rationale_89", + "target": "simaticml_decoder_parse_extra_attrs" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L137", + "source_file": "parse.py", + "source_location": "L88", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_usercall" + "source": "parse_py", + "target": "simaticml_decoder_parse_extra_attrs" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L155", + "source_file": "parse.py", + "source_location": "L105", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_networklogic" + "source": "simaticml_decoder_parse_parse_document", + "target": "simaticml_decoder_parse_find_block_element" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L166", + "source_file": "parse.py", + "source_location": "L109", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_tagref" + "source": "simaticml_decoder_parse_parse_document", + "target": "simaticml_decoder_parse_parse_block" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L175", + "source_file": "parse.py", + "source_location": "L115", "weight": 1.0, "confidence_score": 1.0, - "source": "ir_py", - "target": "simaticml_decoder_ir_decodedblock" + "source": "simaticml_decoder_parse_parse_file", + "target": "simaticml_decoder_parse_parse_document" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L1", + "source_file": "parse.py", + "source_location": "L99", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_1", - "target": "ir_py" + "source": "simaticml_decoder_parse_rationale_99", + "target": "simaticml_decoder_parse_parse_document" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L23", + "source_file": "parse.py", + "source_location": "L98", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_23", - "target": "simaticml_decoder_ir_varref" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_document" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L73", + "source_file": "parse.py", + "source_location": "L113", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_73", - "target": "simaticml_decoder_ir_rawexpr" + "source": "simaticml_decoder_parse_rationale_113", + "target": "simaticml_decoder_parse_parse_file" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L81", + "source_file": "parse.py", + "source_location": "L112", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_81", - "target": "simaticml_decoder_ir_unhandled" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_file" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L115", + "source_file": "parse.py", + "source_location": "L123", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_115", - "target": "simaticml_decoder_ir_flipflop" + "source": "parse_py", + "target": "simaticml_decoder_parse_find_block_element" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L126", + "source_file": "parse.py", + "source_location": "L143", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_126", - "target": "simaticml_decoder_ir_boxcall" + "confidence_score": 1.0, + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_block_kind" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L138", + "source_file": "parse.py", + "source_location": "L130", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_138", - "target": "simaticml_decoder_ir_usercall" + "source": "parse_py", + "target": "simaticml_decoder_parse_block_kind" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "ir.py", - "source_location": "L167", + "source_file": "parse.py", + "source_location": "L147", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_ir_rationale_167", - "target": "simaticml_decoder_ir_tagref" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_parse_language" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L20", + "source_file": "parse.py", + "source_location": "L151", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_blockkind" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_parse_interface" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L28", + "source_file": "parse.py", + "source_location": "L155", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_language" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_titles_and_comments" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L43", + "source_file": "parse.py", + "source_location": "L159", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_member" + "source": "simaticml_decoder_parse_parse_block", + "target": "simaticml_decoder_parse_parse_compile_unit" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L56", + "source_file": "parse.py", + "source_location": "L138", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_section" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_block" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L62", + "source_file": "parse.py", + "source_location": "L246", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_interface" + "source": "simaticml_decoder_parse_parse_compile_unit", + "target": "simaticml_decoder_parse_parse_language" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L70", + "source_file": "parse.py", + "source_location": "L165", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_component" + "source": "simaticml_decoder_parse_rationale_165", + "target": "simaticml_decoder_parse_parse_language" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L81", + "source_file": "parse.py", + "source_location": "L164", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_symbol" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_language" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L86", + "source_file": "parse.py", + "source_location": "L194", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_constant" + "source": "simaticml_decoder_parse_parse_interface", + "target": "simaticml_decoder_parse_parse_member" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L94", + "source_file": "parse.py", + "source_location": "L184", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_address" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_interface" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L106", + "source_file": "parse.py", + "source_location": "L231", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_access" + "source": "simaticml_decoder_parse_parse_member", + "target": "simaticml_decoder_parse_inline_comment" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L119", + "source_file": "parse.py", + "source_location": "L202", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_templatevalue" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_member" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L126", + "source_file": "parse.py", + "source_location": "L247", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_instance" + "source": "simaticml_decoder_parse_parse_compile_unit", + "target": "simaticml_decoder_parse_titles_and_comments" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L134", + "source_file": "parse.py", + "source_location": "L248", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_part" + "source": "simaticml_decoder_parse_parse_compile_unit", + "target": "simaticml_decoder_parse_parse_network_source" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L149", + "source_file": "parse.py", + "source_location": "L242", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_parameter" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_compile_unit" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L157", + "source_file": "parse.py", + "source_location": "L273", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_call" + "source": "simaticml_decoder_parse_parse_network_source", + "target": "simaticml_decoder_parse_parse_flgnet" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L169", + "source_file": "parse.py", + "source_location": "L275", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_endpointkind" + "source": "simaticml_decoder_parse_parse_network_source", + "target": "simaticml_decoder_parse_parse_structured_text" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L178", + "source_file": "parse.py", + "source_location": "L260", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_endpoint" + "source": "simaticml_decoder_parse_rationale_260", + "target": "simaticml_decoder_parse_parse_network_source" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L185", + "source_file": "parse.py", + "source_location": "L259", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_wire" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_network_source" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L193", + "source_file": "parse.py", + "source_location": "L294", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_label" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_parse_access" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L203", + "source_file": "parse.py", + "source_location": "L297", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_flgnet" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_parse_part" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L215", + "source_file": "parse.py", + "source_location": "L300", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_structuredtext" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_parse_call" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L225", + "source_file": "parse.py", + "source_location": "L311", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_rawsource" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_inline_comment" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L234", + "source_file": "parse.py", + "source_location": "L318", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_network" + "source": "simaticml_decoder_parse_parse_flgnet", + "target": "simaticml_decoder_parse_parse_wire" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L246", + "source_file": "parse.py", + "source_location": "L286", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_block" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_flgnet" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L262", + "source_file": "parse.py", + "source_location": "L333", "weight": 1.0, "confidence_score": 1.0, - "source": "model_py", - "target": "simaticml_decoder_model_document" + "source": "simaticml_decoder_parse_parse_access", + "target": "simaticml_decoder_parse_parse_symbol" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L1", + "source_file": "parse.py", + "source_location": "L335", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_1", - "target": "model_py" + "source": "simaticml_decoder_parse_parse_access", + "target": "simaticml_decoder_parse_parse_constant" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L29", + "source_file": "parse.py", + "source_location": "L337", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_29", - "target": "simaticml_decoder_model_language" + "source": "simaticml_decoder_parse_parse_access", + "target": "simaticml_decoder_parse_parse_address" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L71", + "source_file": "parse.py", + "source_location": "L370", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_71", - "target": "simaticml_decoder_model_component" + "source": "simaticml_decoder_parse_parse_component", + "target": "simaticml_decoder_parse_parse_access" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L107", + "source_file": "parse.py", + "source_location": "L538", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_107", - "target": "simaticml_decoder_model_access" + "source": "simaticml_decoder_parse_parse_structured_text", + "target": "simaticml_decoder_parse_parse_access" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L127", + "source_file": "parse.py", + "source_location": "L326", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_127", - "target": "simaticml_decoder_model_instance" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_access" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L186", + "source_file": "parse.py", + "source_location": "L358", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_186", - "target": "simaticml_decoder_model_wire" + "source": "simaticml_decoder_parse_parse_symbol", + "target": "simaticml_decoder_parse_parse_component" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L204", + "source_file": "parse.py", + "source_location": "L357", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_204", - "target": "simaticml_decoder_model_flgnet" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_symbol" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "model.py", - "source_location": "L216", + "source_file": "parse.py", + "source_location": "L464", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_model_rationale_216", - "target": "simaticml_decoder_model_structuredtext" + "source": "simaticml_decoder_parse_parse_instance", + "target": "simaticml_decoder_parse_parse_component" }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L21", + "source_file": "parse.py", + "source_location": "L361", "weight": 1.0, "confidence_score": 1.0, - "source": "operand_py", - "target": "init_py" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_component" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L60", + "source_file": "parse.py", + "source_location": "L374", "weight": 1.0, "confidence_score": 1.0, - "source": "operand_py", - "target": "simaticml_decoder_operand_render" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_constant" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L78", + "source_file": "parse.py", + "source_location": "L396", "weight": 1.0, "confidence_score": 1.0, - "source": "operand_py", - "target": "simaticml_decoder_operand_render_symbol" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_address" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L94", + "source_file": "parse.py", + "source_location": "L432", "weight": 1.0, "confidence_score": 1.0, - "source": "operand_py", - "target": "simaticml_decoder_operand_render_component" + "source": "simaticml_decoder_parse_parse_part", + "target": "simaticml_decoder_parse_parse_instance" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L111", + "source_file": "parse.py", + "source_location": "L436", "weight": 1.0, "confidence_score": 1.0, - "source": "operand_py", - "target": "simaticml_decoder_operand_render_constant" + "source": "simaticml_decoder_parse_parse_part", + "target": "simaticml_decoder_parse_inline_comment" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L122", + "source_file": "parse.py", + "source_location": "L408", "weight": 1.0, "confidence_score": 1.0, - "source": "operand_py", - "target": "simaticml_decoder_operand_render_address" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_part" }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L1", + "source_file": "parse.py", + "source_location": "L490", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_rationale_1", - "target": "operand_py" + "source": "simaticml_decoder_parse_parse_call", + "target": "simaticml_decoder_parse_parse_instance" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L64", + "source_file": "parse.py", + "source_location": "L461", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_render", - "target": "simaticml_decoder_operand_render_symbol" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_instance" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L66", + "source_file": "parse.py", + "source_location": "L498", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_render", - "target": "simaticml_decoder_operand_render_constant" + "source": "simaticml_decoder_parse_parse_call", + "target": "simaticml_decoder_parse_inline_comment" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L68", + "source_file": "parse.py", + "source_location": "L468", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_render", - "target": "simaticml_decoder_operand_render_address" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_call" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L98", + "source_file": "parse.py", + "source_location": "L511", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_render_component", - "target": "simaticml_decoder_operand_render" + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_wire" }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L61", + "source_file": "parse.py", + "source_location": "L529", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_rationale_61", - "target": "simaticml_decoder_operand_render" + "source": "simaticml_decoder_parse_rationale_529", + "target": "simaticml_decoder_parse_parse_structured_text" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "parse.py", + "source_location": "L528", + "weight": 1.0, + "confidence_score": 1.0, + "source": "parse_py", + "target": "simaticml_decoder_parse_parse_structured_text" }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "operand.py", - "source_location": "L83", + "source_file": "parse.py", + "source_location": "L554", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_operand_render_symbol", - "target": "simaticml_decoder_operand_render_component" + "source": "simaticml_decoder_parse_titles_and_comments", + "target": "simaticml_decoder_parse_multilingual_text" }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", "source_file": "parse.py", - "source_location": "L24", + "source_location": "L549", + "weight": 1.0, + "confidence_score": 1.0, + "source": "parse_py", + "target": "simaticml_decoder_parse_titles_and_comments" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "parse.py", + "source_location": "L563", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "init_py" + "source": "simaticml_decoder_parse_rationale_563", + "target": "simaticml_decoder_parse_multilingual_text" }, { "relation": "contains", "confidence": "EXTRACTED", "source_file": "parse.py", - "source_location": "L31", + "source_location": "L562", "weight": 1.0, "confidence_score": 1.0, "source": "parse_py", - "target": "simaticml_decoder_parse_ln" + "target": "simaticml_decoder_parse_multilingual_text" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "parse.py", - "source_location": "L38", + "source_location": "L586", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_children" + "source": "simaticml_decoder_parse_rationale_586", + "target": "simaticml_decoder_parse_inline_comment" }, { "relation": "contains", "confidence": "EXTRACTED", "source_file": "parse.py", - "source_location": "L43", + "source_location": "L585", "weight": 1.0, "confidence_score": 1.0, "source": "parse_py", - "target": "simaticml_decoder_parse_child" + "target": "simaticml_decoder_parse_inline_comment" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "parse.py", - "source_location": "L53", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_child_text" + "source": "simaticml_decoder_parse_rationale_1", + "target": "parse_py" }, { - "relation": "contains", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L58", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", + "source_location": "L14", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_first_element_child" + "source": "src_simaticml_decoder_scl_reconstruct_py", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L67", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", + "source_location": "L17", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_nz" + "source": "src_simaticml_decoder_scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_reconstruct", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L75", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", + "source_location": "L36", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_is_true" + "source": "src_simaticml_decoder_scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_local", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L79", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", + "source_location": "L40", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_int_or_none" + "source": "src_simaticml_decoder_scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_render_element", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L88", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", + "source_location": "L68", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_extra_attrs" + "source": "src_simaticml_decoder_scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_render_comment", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L98", + "source_file": "src/simaticml_decoder/scl_reconstruct.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_document" + "source": "simaticml_decoder_scl_reconstruct_rationale_1", + "target": "src_simaticml_decoder_scl_reconstruct_py", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L112", + "source_file": "scl_reconstruct.py", + "source_location": "L30", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_file" + "source": "simaticml_decoder_scl_reconstruct_reconstruct", + "target": "simaticml_decoder_scl_reconstruct_render_element" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L123", + "source_file": "scl_reconstruct.py", + "source_location": "L18", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_find_block_element" + "source": "simaticml_decoder_scl_reconstruct_rationale_18", + "target": "simaticml_decoder_scl_reconstruct_reconstruct" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L130", + "source_file": "scl_reconstruct.py", + "source_location": "L17", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_block_kind" + "source": "scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_reconstruct" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L138", + "source_file": "scl_reconstruct.py", + "source_location": "L41", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_block" + "source": "simaticml_decoder_scl_reconstruct_render_element", + "target": "simaticml_decoder_scl_reconstruct_local" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L164", + "source_file": "scl_reconstruct.py", + "source_location": "L36", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_language" + "source": "scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_local" }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L184", + "source_file": "scl_reconstruct.py", + "source_location": "L47", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_interface" + "source": "simaticml_decoder_scl_reconstruct_render_element", + "target": "simaticml_decoder_scl_reconstruct_render_comment" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L202", + "source_file": "scl_reconstruct.py", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_member" + "source": "scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_render_element" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L242", + "source_file": "scl_reconstruct.py", + "source_location": "L69", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_compile_unit" + "source": "simaticml_decoder_scl_reconstruct_rationale_69", + "target": "simaticml_decoder_scl_reconstruct_render_comment" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L259", + "source_file": "scl_reconstruct.py", + "source_location": "L68", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_network_source" + "source": "scl_reconstruct_py", + "target": "simaticml_decoder_scl_reconstruct_render_comment" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L286", + "source_file": "scl_reconstruct.py", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_flgnet" + "source": "simaticml_decoder_scl_reconstruct_rationale_1", + "target": "scl_reconstruct_py" }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L326", + "source_file": "src/simaticml_decoder/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "simaticml_decoder_init_rationale_1", + "target": "src_simaticml_decoder_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "__init__.py", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_access" + "source": "simaticml_decoder_init_rationale_1", + "target": "init_py" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L357", + "source_file": "tests/conftest.py", + "source_location": "L25", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_symbol" + "source": "tests_conftest_py", + "target": "tests_conftest_require", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L361", + "source_file": "tests/conftest.py", + "source_location": "L33", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_component" + "source": "tests_conftest_py", + "target": "tests_conftest_fixture_file", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L374", + "source_file": "tests/conftest.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_conftest_py", + "target": "tests_conftest_load_fixture", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/conftest.py", + "source_location": "L1", + "weight": 1.0, + "source": "tests_conftest_rationale_1", + "target": "tests_conftest_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/conftest.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_conftest_rationale_34", + "target": "tests_conftest_fixture_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_cli.py", + "source_location": "L26", + "weight": 1.0, + "source": "tests_test_cli_test_happy_path_writes_both", + "target": "tests_conftest_fixture_file" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_cli.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_test_cli_test_format_scl_only", + "target": "tests_conftest_fixture_file" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_cli.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_test_cli_test_quiet_suppresses_stderr", + "target": "tests_conftest_fixture_file" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/conftest.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_conftest_rationale_40", + "target": "tests_conftest_load_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_test_fixtures_regression_test_decode_pipeline_runs", + "target": "tests_conftest_load_fixture" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L31", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_constant" + "source": "tests_test_fixtures_regression_test_motor_is_combinational_no_latch", + "target": "tests_conftest_load_fixture" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L396", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L42", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_address" + "source": "tests_test_fixtures_regression_test_singlealarm_constructs", + "target": "tests_conftest_load_fixture" }, { - "relation": "contains", - "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L408", + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L52", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_part" + "source": "tests_test_fixtures_regression_test_fbsystem_scl_network_and_slices", + "target": "tests_conftest_load_fixture" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L461", + "source_file": "tests/test_cli.py", + "source_location": "L11", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_instance" + "source": "tests_test_cli_py", + "target": "tests_test_cli_test_missing_file_returns_2", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L468", + "source_file": "tests/test_cli.py", + "source_location": "L17", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_call" + "source": "tests_test_cli_py", + "target": "tests_test_cli_test_malformed_xml_returns_1", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L511", + "source_file": "tests/test_cli.py", + "source_location": "L25", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_wire" + "source": "tests_test_cli_py", + "target": "tests_test_cli_test_happy_path_writes_both", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L528", + "source_file": "tests/test_cli.py", + "source_location": "L34", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_parse_structured_text" + "source": "tests_test_cli_py", + "target": "tests_test_cli_test_format_scl_only", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L549", + "source_file": "tests/test_cli.py", + "source_location": "L41", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_titles_and_comments" + "source": "tests_test_cli_py", + "target": "tests_test_cli_test_quiet_suppresses_stderr", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L562", + "source_file": "tests/test_cli.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_multilingual_text" + "source": "tests_test_cli_rationale_1", + "target": "tests_test_cli_py", + "confidence_score": 1.0 }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L585", + "source_file": "tests/test_emit.py", + "source_location": "L13", "weight": 1.0, - "confidence_score": 1.0, - "source": "parse_py", - "target": "simaticml_decoder_parse_inline_comment" + "source": "tests_test_emit_py", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L1", + "source_file": "tests/test_emit.py", + "source_location": "L19", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_1", - "target": "parse_py" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_normal_assign", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L40", + "source_file": "tests/test_emit.py", + "source_location": "L23", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_children", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_precedence_not_binds_tightest_or_parenthesised", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L48", + "source_file": "tests/test_emit.py", + "source_location": "L30", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_child", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_or_wraps_and_groups_for_readability", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L125", + "source_file": "tests/test_emit.py", + "source_location": "L36", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_find_block_element", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_negated_assign", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L143", + "source_file": "tests/test_emit.py", + "source_location": "L42", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_reset_coil_emits_if_guard", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L271", + "source_file": "tests/test_emit.py", + "source_location": "L48", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_network_source", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_latch_is_called_out", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L292", + "source_file": "tests/test_emit.py", + "source_location": "L55", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_flipflop_reset_priority", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L331", + "source_file": "tests/test_emit.py", + "source_location": "L63", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_access", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_box_move_assignment_form", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L418", + "source_file": "tests/test_emit.py", + "source_location": "L69", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_part", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_box_add_with_enable_guard", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L479", + "source_file": "tests/test_emit.py", + "source_location": "L76", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_call", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_box_inc_under_rising_edge", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L514", + "source_file": "tests/test_emit.py", + "source_location": "L83", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_wire", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_box_timer_instance_call_form", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L537", + "source_file": "tests/test_emit.py", + "source_location": "L90", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_structured_text", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_user_call_fc", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L32", + "source_file": "tests/test_emit.py", + "source_location": "L96", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_32", - "target": "simaticml_decoder_parse_ln" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_unhandled_statement_is_loud", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L157", + "source_file": "tests/test_emit.py", + "source_location": "L101", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_scl_has_block_and_network_headers_and_trailing_newline", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L191", + "source_file": "tests/test_emit.py", + "source_location": "L112", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_interface", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_empty_network_marker", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L219", + "source_file": "tests/test_emit.py", + "source_location": "L118", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_member", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_sidecar_schema_interface_and_xref", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L305", + "source_file": "tests/test_emit.py", + "source_location": "L144", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_py", + "target": "tests_test_emit_test_sidecar_trace_maps_statement_uid", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L358", + "source_file": "tests/test_emit.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_symbol", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_rationale_1", + "target": "tests_test_emit_py", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L370", - "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_component", - "target": "simaticml_decoder_parse_children" + "source_file": "tests/test_emit.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_test_emit_test_normal_assign", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L384", + "source_file": "tests/test_emit.py", + "source_location": "L26", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_constant", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_test_precedence_not_binds_tightest_or_parenthesised", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L464", + "source_file": "tests/test_emit.py", + "source_location": "L33", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_instance", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_test_or_wraps_and_groups_for_readability", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L552", + "source_file": "tests/test_emit.py", + "source_location": "L37", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_titles_and_comments", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_test_negated_assign", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L572", + "source_file": "tests/test_emit.py", + "source_location": "L43", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_multilingual_text", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_test_reset_coil_emits_if_guard", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L590", + "source_file": "tests/test_emit.py", + "source_location": "L49", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_inline_comment", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_test_latch_is_called_out", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L39", + "source_file": "tests/test_emit.py", + "source_location": "L56", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_39", - "target": "simaticml_decoder_parse_children" + "source": "tests_test_emit_test_flipflop_reset_priority", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L54", + "source_file": "tests/test_emit.py", + "source_location": "L64", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_child_text", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_emit_test_box_move_assignment_form", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L102", + "source_file": "tests/test_emit.py", + "source_location": "L70", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_document", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_emit_test_box_add_with_enable_guard", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L139", + "source_file": "tests/test_emit.py", + "source_location": "L78", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_emit_test_box_inc_under_rising_edge", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L188", + "source_file": "tests/test_emit.py", + "source_location": "L84", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_interface", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_emit_test_box_timer_instance_call_form", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L215", + "source_file": "tests/test_emit.py", + "source_location": "L91", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_member", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_emit_test_user_call_fc", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L243", + "source_file": "tests/test_emit.py", + "source_location": "L97", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_compile_unit", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_emit_test_unhandled_statement_is_loud", + "target": "tests_test_emit_scl_of", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L289", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L20", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_fixtures_regression_py", + "target": "tests_test_fixtures_regression_test_decode_pipeline_runs", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L375", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L30", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_constant", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_fixtures_regression_py", + "target": "tests_test_fixtures_regression_test_motor_is_combinational_no_latch", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L469", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L41", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_call", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_fixtures_regression_py", + "target": "tests_test_fixtures_regression_test_singlealarm_constructs", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L568", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L51", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_multilingual_text", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_fixtures_regression_py", + "target": "tests_test_fixtures_regression_test_fbsystem_scl_network_and_slices", + "confidence_score": 1.0 }, { "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L44", + "source_file": "tests/test_fixtures_regression.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_44", - "target": "simaticml_decoder_parse_child" + "source": "tests_test_fixtures_regression_rationale_1", + "target": "tests_test_fixtures_regression_py", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L145", + "source_file": "tests/test_fold.py", + "source_location": "L15", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_child_text" + "source": "tests_test_fold_py", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L229", + "source_file": "tests/test_fold.py", + "source_location": "L20", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_member", - "target": "simaticml_decoder_parse_child_text" + "source": "tests_test_fold_py", + "target": "tests_test_fold_sym", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L246", + "source_file": "tests/test_fold.py", + "source_location": "L25", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_compile_unit", - "target": "simaticml_decoder_parse_child_text" + "source": "tests_test_fold_py", + "target": "tests_test_fold_pr", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L576", + "source_file": "tests/test_fold.py", + "source_location": "L29", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_multilingual_text", - "target": "simaticml_decoder_parse_child_text" + "source": "tests_test_fold_py", + "target": "tests_test_fold_ic", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L267", + "source_file": "tests/test_fold.py", + "source_location": "L33", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_network_source", - "target": "simaticml_decoder_parse_first_element_child" + "source": "tests_test_fold_py", + "target": "tests_test_fold_nc", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L59", + "source_file": "tests/test_fold.py", + "source_location": "L37", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_59", - "target": "simaticml_decoder_parse_first_element_child" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_contact_drives_coil", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L145", + "source_file": "tests/test_fold.py", + "source_location": "L56", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_nz" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_negated_contact_is_not", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L229", + "source_file": "tests/test_fold.py", + "source_location": "L71", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_member", - "target": "simaticml_decoder_parse_nz" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_or_junction_is_nary_or", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L577", + "source_file": "tests/test_fold.py", + "source_location": "L92", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_multilingual_text", - "target": "simaticml_decoder_parse_nz" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L591", + "source_file": "tests/test_fold.py", + "source_location": "L115", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_inline_comment", - "target": "simaticml_decoder_parse_nz" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L68", + "source_file": "tests/test_fold.py", + "source_location": "L134", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_68", - "target": "simaticml_decoder_parse_nz" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_unknown_instruction_folds_to_unhandled_and_warns", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L150", + "source_file": "tests/test_fold.py", + "source_location": "L143", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_is_true" + "source": "tests_test_fold_py", + "target": "tests_test_fold_test_empty_network_has_no_statements", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/test_fold.py", + "source_location": "L1", + "weight": 1.0, + "source": "tests_test_fold_rationale_1", + "target": "tests_test_fold_py", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L378", + "source_file": "tests/test_fold.py", + "source_location": "L47", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_constant", - "target": "simaticml_decoder_parse_is_true" + "source": "tests_test_fold_test_contact_drives_coil", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L449", + "source_file": "tests/test_fold.py", + "source_location": "L66", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_part", - "target": "simaticml_decoder_parse_is_true" + "source": "tests_test_fold_test_negated_contact_is_not", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L486", + "source_file": "tests/test_fold.py", + "source_location": "L87", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_call", - "target": "simaticml_decoder_parse_is_true" + "source": "tests_test_fold_test_or_junction_is_nary_or", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L146", + "source_file": "tests/test_fold.py", + "source_location": "L110", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_int_or_none" + "source": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L400", + "source_file": "tests/test_fold.py", + "source_location": "L129", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_address", - "target": "simaticml_decoder_parse_int_or_none" + "source": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L212", + "source_file": "tests/test_fold.py", + "source_location": "L136", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_member", - "target": "simaticml_decoder_parse_extra_attrs" + "source": "tests_test_fold_test_unknown_instruction_folds_to_unhandled_and_warns", + "target": "tests_test_fold_net", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L345", + "source_file": "tests/test_fold.py", + "source_location": "L40", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_access", - "target": "simaticml_decoder_parse_extra_attrs" + "source": "tests_test_fold_test_contact_drives_coil", + "target": "tests_test_fold_sym", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L442", + "source_file": "tests/test_fold.py", + "source_location": "L59", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_part", - "target": "simaticml_decoder_parse_extra_attrs" + "source": "tests_test_fold_test_negated_contact_is_not", + "target": "tests_test_fold_sym", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L89", + "source_file": "tests/test_fold.py", + "source_location": "L76", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_89", - "target": "simaticml_decoder_parse_extra_attrs" + "source": "tests_test_fold_test_or_junction_is_nary_or", + "target": "tests_test_fold_sym", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L105", + "source_file": "tests/test_fold.py", + "source_location": "L99", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_document", - "target": "simaticml_decoder_parse_find_block_element" + "source": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "target": "tests_test_fold_sym", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L109", + "source_file": "tests/test_fold.py", + "source_location": "L120", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_document", - "target": "simaticml_decoder_parse_parse_block" + "source": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "target": "tests_test_fold_sym", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L115", + "source_file": "tests/test_fold.py", + "source_location": "L42", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_file", - "target": "simaticml_decoder_parse_parse_document" + "source": "tests_test_fold_test_contact_drives_coil", + "target": "tests_test_fold_pr", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L99", + "source_file": "tests/test_fold.py", + "source_location": "L61", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_99", - "target": "simaticml_decoder_parse_parse_document" + "source": "tests_test_fold_test_negated_contact_is_not", + "target": "tests_test_fold_pr", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L113", + "source_file": "tests/test_fold.py", + "source_location": "L78", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_113", - "target": "simaticml_decoder_parse_parse_file" + "source": "tests_test_fold_test_or_junction_is_nary_or", + "target": "tests_test_fold_pr", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L143", + "source_file": "tests/test_fold.py", + "source_location": "L101", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_block_kind" + "source": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "target": "tests_test_fold_pr", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L147", + "source_file": "tests/test_fold.py", + "source_location": "L122", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_parse_language" + "source": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "target": "tests_test_fold_pr", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L151", + "source_file": "tests/test_fold.py", + "source_location": "L43", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_parse_interface" + "source": "tests_test_fold_test_contact_drives_coil", + "target": "tests_test_fold_ic", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L155", + "source_file": "tests/test_fold.py", + "source_location": "L62", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_titles_and_comments" + "source": "tests_test_fold_test_negated_contact_is_not", + "target": "tests_test_fold_ic", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L159", + "source_file": "tests/test_fold.py", + "source_location": "L79", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_block", - "target": "simaticml_decoder_parse_parse_compile_unit" + "source": "tests_test_fold_test_or_junction_is_nary_or", + "target": "tests_test_fold_ic", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L246", + "source_file": "tests/test_fold.py", + "source_location": "L102", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_compile_unit", - "target": "simaticml_decoder_parse_parse_language" + "source": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "target": "tests_test_fold_ic", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L165", + "source_file": "tests/test_fold.py", + "source_location": "L123", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_165", - "target": "simaticml_decoder_parse_parse_language" + "source": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "target": "tests_test_fold_ic", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L194", + "source_file": "tests/test_fold.py", + "source_location": "L42", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_interface", - "target": "simaticml_decoder_parse_parse_member" + "source": "tests_test_fold_test_contact_drives_coil", + "target": "tests_test_fold_nc", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L231", + "source_file": "tests/test_fold.py", + "source_location": "L61", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_member", - "target": "simaticml_decoder_parse_inline_comment" + "source": "tests_test_fold_test_negated_contact_is_not", + "target": "tests_test_fold_nc", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L247", + "source_file": "tests/test_fold.py", + "source_location": "L78", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_compile_unit", - "target": "simaticml_decoder_parse_titles_and_comments" + "source": "tests_test_fold_test_or_junction_is_nary_or", + "target": "tests_test_fold_nc", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L248", + "source_file": "tests/test_fold.py", + "source_location": "L101", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_compile_unit", - "target": "simaticml_decoder_parse_parse_network_source" + "source": "tests_test_fold_test_latch_detected_when_coil_feeds_back", + "target": "tests_test_fold_nc", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L273", + "source_file": "tests/test_fold.py", + "source_location": "L122", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_network_source", - "target": "simaticml_decoder_parse_parse_flgnet" + "source": "tests_test_fold_test_daisy_chained_coils_share_upstream_flow", + "target": "tests_test_fold_nc", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L275", + "source_file": "tests/test_operand.py", + "source_location": "L8", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_network_source", - "target": "simaticml_decoder_parse_parse_structured_text" + "source": "tests_test_operand_py", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L260", + "source_file": "tests/test_operand.py", + "source_location": "L12", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_260", - "target": "simaticml_decoder_parse_parse_network_source" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_local_variable_symbol", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L294", + "source_file": "tests/test_operand.py", + "source_location": "L17", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_parse_access" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_dotted_local_path", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L297", + "source_file": "tests/test_operand.py", + "source_location": "L23", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_parse_part" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_global_variable_quotes_root_only", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L300", + "source_file": "tests/test_operand.py", + "source_location": "L29", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_parse_call" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_bit_slice_renders_percent_x", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L311", + "source_file": "tests/test_operand.py", + "source_location": "L35", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_inline_comment" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_array_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/test_operand.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_address_word", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/test_operand.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_address_bool_byte_bit", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L318", + "source_file": "tests/test_operand.py", + "source_location": "L52", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_flgnet", - "target": "simaticml_decoder_parse_parse_wire" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_literal_constant_verbatim", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L333", + "source_file": "tests/test_operand.py", + "source_location": "L57", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_access", - "target": "simaticml_decoder_parse_parse_symbol" + "source": "tests_test_operand_py", + "target": "tests_test_operand_test_unresolved_scope_is_loud_placeholder", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "rationale_for", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L335", + "source_file": "tests/test_operand.py", + "source_location": "L1", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_access", - "target": "simaticml_decoder_parse_parse_constant" + "source": "tests_test_operand_rationale_1", + "target": "tests_test_operand_py", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L337", + "source_file": "tests/test_operand.py", + "source_location": "L13", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_access", - "target": "simaticml_decoder_parse_parse_address" + "source": "tests_test_operand_test_local_variable_symbol", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L370", + "source_file": "tests/test_operand.py", + "source_location": "L18", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_component", - "target": "simaticml_decoder_parse_parse_access" + "source": "tests_test_operand_test_dotted_local_path", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L538", + "source_file": "tests/test_operand.py", + "source_location": "L24", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_structured_text", - "target": "simaticml_decoder_parse_parse_access" + "source": "tests_test_operand_test_global_variable_quotes_root_only", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L358", + "source_file": "tests/test_operand.py", + "source_location": "L30", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_symbol", - "target": "simaticml_decoder_parse_parse_component" + "source": "tests_test_operand_test_bit_slice_renders_percent_x", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L464", + "source_file": "tests/test_operand.py", + "source_location": "L36", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_instance", - "target": "simaticml_decoder_parse_parse_component" + "source": "tests_test_operand_test_array_index", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L432", + "source_file": "tests/test_operand.py", + "source_location": "L43", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_part", - "target": "simaticml_decoder_parse_parse_instance" + "source": "tests_test_operand_test_address_word", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L436", + "source_file": "tests/test_operand.py", + "source_location": "L48", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_part", - "target": "simaticml_decoder_parse_inline_comment" + "source": "tests_test_operand_test_address_bool_byte_bit", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L490", + "source_file": "tests/test_operand.py", + "source_location": "L53", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_call", - "target": "simaticml_decoder_parse_parse_instance" + "source": "tests_test_operand_test_literal_constant_verbatim", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { "relation": "calls", "context": "call", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L498", + "source_file": "tests/test_operand.py", + "source_location": "L58", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_parse_call", - "target": "simaticml_decoder_parse_inline_comment" + "source": "tests_test_operand_test_unresolved_scope_is_loud_placeholder", + "target": "tests_test_operand_access", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L529", + "source_file": "tests/test_release_version.py", + "source_location": "L15", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_529", - "target": "simaticml_decoder_parse_parse_structured_text" + "source": "tests_test_release_version_py", + "target": "tests_test_release_version_write_project", + "confidence_score": 1.0 }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L554", + "source_file": "tests/test_release_version.py", + "source_location": "L29", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_titles_and_comments", - "target": "simaticml_decoder_parse_multilingual_text" + "source": "tests_test_release_version_py", + "target": "tests_test_release_version_test_check_release_version_accepts_matching_v_tag", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L563", + "source_file": "tests/test_release_version.py", + "source_location": "L35", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_563", - "target": "simaticml_decoder_parse_multilingual_text" + "source": "tests_test_release_version_py", + "target": "tests_test_release_version_test_check_release_version_reports_pyproject_mismatch", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "parse.py", - "source_location": "L586", + "source_file": "tests/test_release_version.py", + "source_location": "L43", "weight": 1.0, - "confidence_score": 1.0, - "source": "simaticml_decoder_parse_rationale_586", - "target": "simaticml_decoder_parse_inline_comment" + "source": "tests_test_release_version_py", + "target": "tests_test_release_version_test_check_release_version_reports_init_mismatch", + "confidence_score": 1.0 }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L14", + "source_file": "tests/test_release_version.py", + "source_location": "L51", "weight": 1.0, - "confidence_score": 1.0, - "source": "scl_reconstruct_py", - "target": "init_py" + "source": "tests_test_release_version_py", + "target": "tests_test_release_version_test_check_release_version_rejects_non_v_tag", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L17", + "source_file": "tests/test_release_version.py", + "source_location": "L30", "weight": 1.0, - "confidence_score": 1.0, - "source": "scl_reconstruct_py", - "target": "simaticml_decoder_scl_reconstruct_reconstruct" + "source": "tests_test_release_version_test_check_release_version_accepts_matching_v_tag", + "target": "tests_test_release_version_write_project", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", + "source_file": "tests/test_release_version.py", "source_location": "L36", "weight": 1.0, - "confidence_score": 1.0, - "source": "scl_reconstruct_py", - "target": "simaticml_decoder_scl_reconstruct_local" + "source": "tests_test_release_version_test_check_release_version_reports_pyproject_mismatch", + "target": "tests_test_release_version_write_project", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L40", + "source_file": "tests/test_release_version.py", + "source_location": "L44", "weight": 1.0, - "confidence_score": 1.0, - "source": "scl_reconstruct_py", - "target": "simaticml_decoder_scl_reconstruct_render_element" + "source": "tests_test_release_version_test_check_release_version_reports_init_mismatch", + "target": "tests_test_release_version_write_project", + "confidence_score": 1.0 }, { - "relation": "contains", + "relation": "calls", + "context": "call", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L68", + "source_file": "tests/test_release_version.py", + "source_location": "L52", "weight": 1.0, - "confidence_score": 1.0, - "source": "scl_reconstruct_py", - "target": "simaticml_decoder_scl_reconstruct_render_comment" + "source": "tests_test_release_version_test_check_release_version_rejects_non_v_tag", + "target": "tests_test_release_version_write_project", + "confidence_score": 1.0 }, { - "relation": "rationale_for", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L1", + "source_file": "cli.py", + "source_location": "L16", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_scl_reconstruct_rationale_1", - "target": "scl_reconstruct_py" + "source": "cli_py", + "target": "init_py" }, { - "relation": "calls", - "context": "call", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L30", + "source_file": "emit.py", + "source_location": "L23", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_scl_reconstruct_reconstruct", - "target": "simaticml_decoder_scl_reconstruct_render_element" + "source": "emit_py", + "target": "init_py" }, { - "relation": "rationale_for", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L18", + "source_file": "fold.py", + "source_location": "L39", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_scl_reconstruct_rationale_18", - "target": "simaticml_decoder_scl_reconstruct_reconstruct" + "source": "fold_py", + "target": "init_py" }, { - "relation": "calls", - "context": "call", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L41", + "source_file": "fold.py", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_scl_reconstruct_render_element", - "target": "simaticml_decoder_scl_reconstruct_local" + "source": "fold_py", + "target": "instructions_py" }, { - "relation": "calls", - "context": "call", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L47", + "source_file": "operand.py", + "source_location": "L21", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_scl_reconstruct_render_element", - "target": "simaticml_decoder_scl_reconstruct_render_comment" + "source": "operand_py", + "target": "init_py" }, { - "relation": "rationale_for", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "scl_reconstruct.py", - "source_location": "L69", + "source_file": "parse.py", + "source_location": "L24", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_scl_reconstruct_rationale_69", - "target": "simaticml_decoder_scl_reconstruct_render_comment" + "source": "parse_py", + "target": "init_py" }, { - "relation": "rationale_for", + "relation": "imports_from", + "context": "import", "confidence": "EXTRACTED", - "source_file": "__init__.py", - "source_location": "L1", + "source_file": "scl_reconstruct.py", + "source_location": "L14", "weight": 1.0, "confidence_score": 1.0, - "source": "simaticml_decoder_init_rationale_1", + "source": "scl_reconstruct_py", "target": "init_py" } ], "hyperedges": [], - "built_at_commit": "806b0f113f8a53a1a11f31582b27772be62f307d" + "built_at_commit": "5babe40082149863b12a7d1a2b5c7c6d9c3e873f" } \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index e577584..0b4a5a6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,12 +8,37 @@ version = "0.1.0" description = "Translate exported SimaticML LAD/FBD blocks (TIA V21) into readable SCL plus a JSON metadata sidecar." requires-python = ">=3.11" readme = "README.md" +authors = [{ name = "Czarnak" }] +keywords = ["simatic", "simaticml", "tia-portal", "scl", "plc"] +classifiers = [ + "Development Status :: 3 - Alpha", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Manufacturing", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Text Processing", + "Topic :: Utilities", +] # stdlib-only runtime (xml.etree.ElementTree). Keeping zero runtime deps makes the # eventual PyInstaller/Nuitka freeze small and the PowerShell-subprocess call trivial. dependencies = [] +[project.urls] +Homepage = "https://github.com/Czarnak/simaticml-decoder" +Issues = "https://github.com/Czarnak/simaticml-decoder/issues" +Repository = "https://github.com/Czarnak/simaticml-decoder" + [project.optional-dependencies] -dev = ["ruff", "pytest"] +dev = [ + "build", + "pytest", + "pytest-cov", + "ruff", + "twine", +] [project.scripts] simaticml-decode = "simaticml_decoder.cli:main" diff --git a/scripts/check_release_version.py b/scripts/check_release_version.py new file mode 100644 index 0000000..124f8a0 --- /dev/null +++ b/scripts/check_release_version.py @@ -0,0 +1,76 @@ +"""Validate that a release tag matches the package versions.""" + +from __future__ import annotations + +import os +import re +import sys +import tomllib +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +INIT_VERSION_RE = re.compile(r'^__version__\s*=\s*["\']([^"\']+)["\']', re.MULTILINE) + + +def read_project_version(root: Path) -> str: + with (root / "pyproject.toml").open("rb") as handle: + pyproject = tomllib.load(handle) + return pyproject["project"]["version"] + + +def read_init_version(root: Path) -> str: + init_path = root / "src" / "simaticml_decoder" / "__init__.py" + match = INIT_VERSION_RE.search(init_path.read_text(encoding="utf-8")) + if match is None: + raise ValueError(f"{init_path} does not define __version__") + return match.group(1) + + +def version_from_tag(tag: str) -> str: + if not tag.startswith("v"): + raise ValueError(f"release tag must start with 'v': {tag}") + version = tag[1:] + if not version: + raise ValueError("release tag must include a version after 'v'") + return version + + +def check_release_version(root: Path, tag: str) -> tuple[str, ...]: + tag_version = version_from_tag(tag) + project_version = read_project_version(root) + init_version = read_init_version(root) + + errors: list[str] = [] + if tag_version != project_version: + errors.append( + f"tag version {tag_version!r} does not match pyproject.toml {project_version!r}" + ) + if tag_version != init_version: + errors.append(f"tag version {tag_version!r} does not match __version__ {init_version!r}") + return tuple(errors) + + +def main(argv: list[str] | None = None) -> int: + args = list(sys.argv[1:] if argv is None else argv) + tag = args[0] if args else os.environ.get("GITHUB_REF_NAME", "") + if not tag: + print("release tag is required as an argument or GITHUB_REF_NAME", file=sys.stderr) + return 2 + + try: + errors = check_release_version(ROOT, tag) + except (OSError, KeyError, ValueError) as exc: + print(f"release version check failed: {exc}", file=sys.stderr) + return 1 + + if errors: + for error in errors: + print(f"release version check failed: {error}", file=sys.stderr) + return 1 + + print(f"release version check passed for {tag}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/fixtures/InvertBit.xml b/tests/fixtures/InvertBit.xml new file mode 100644 index 0000000..20bf087 --- /dev/null +++ b/tests/fixtures/InvertBit.xml @@ -0,0 +1,144 @@ + + + + + + false + + +
+
+
+ +
+
+
+
+ +
+ + + Optimized + InvertBit + + 901 + LAD + false + + + + + + + en-US + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + en-US + + + + + + + + + + en-US + + + + + + + + + + + LAD + + + + + + + en-US + + + + + + + + + + en-US + + + + + + + + + + + + en-US + + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/SimpleDevice.xml b/tests/fixtures/SimpleDevice.xml new file mode 100644 index 0000000..9eeb671 --- /dev/null +++ b/tests/fixtures/SimpleDevice.xml @@ -0,0 +1,280 @@ + + + + + + false + + +
+ + +
+
+ +
+
+ + +
+
+ +
+
+
+ +
+ + + Optimized + SimpleDevice + + 580 + LAD + false + + + + + + + en-US + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + en-US + + + + + + + + + + en-US + OUTPUT + + + + + + + + + + + + + + Bool + false + + + + + Bool + false + + + + + + + + + + Bool + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + en-US + + + + + + + + + + en-US + Device state integer value calculation + + + + + + + + + + + en-US + + + + + + + + \ No newline at end of file diff --git a/tests/test_fixtures_regression.py b/tests/test_fixtures_regression.py index af8b158..a0b5734 100644 --- a/tests/test_fixtures_regression.py +++ b/tests/test_fixtures_regression.py @@ -12,8 +12,7 @@ from simaticml_decoder import emit, fold, ir -FIXTURE_NAMES = ["InvertBit", "SimpleDevice", "deviceState", - "SingleAlarm_FB", "Motor", "FB_SYSTEM"] +FIXTURE_NAMES = ["InvertBit", "SimpleDevice"] @pytest.mark.parametrize("name", FIXTURE_NAMES) @@ -23,15 +22,23 @@ def test_decode_pipeline_runs(name, load_fixture): assert isinstance(scl, str) and scl.endswith("\n") side = emit.emit_sidecar(decoded) json.dumps(side) # serialisable - assert set(side) >= {"block", "interface", "networks", "xref", - "instruction_inventory", "warnings", "trace"} + assert set(side) >= { + "block", + "interface", + "networks", + "xref", + "instruction_inventory", + "warnings", + "trace", + } def test_motor_is_combinational_no_latch(load_fixture): decoded = fold.fold_block(load_fixture("Motor")) assert len(decoded.networks) == 5 - latched = [s for n in decoded.networks for s in n.statements - if isinstance(s, ir.Assign) and s.is_latch] + latched = [ + s for n in decoded.networks for s in n.statements if isinstance(s, ir.Assign) and s.is_latch + ] assert latched == [] # plan §9: Motor has no seal-in latch scl = emit.emit_scl(decoded) assert "#START_MOTOR := #FQ_FWD OR #FQ_REV;" in scl @@ -44,15 +51,19 @@ def test_singlealarm_constructs(load_fixture): assert any(isinstance(s, ir.FlipFlop) for s in stmts) assert any(isinstance(s, ir.BoxCall) and s.instruction == "TON" for s in stmts) scl = emit.emit_scl(decoded) - assert "R_TRIG(" in scl # rising edge - assert "#Counter < #MaxCounter" in scl # Lt comparison + assert "R_TRIG(" in scl # rising edge + assert "#Counter < #MaxCounter" in scl # Lt comparison def test_fbsystem_scl_network_and_slices(load_fixture): decoded = fold.fold_block(load_fixture("FB_SYSTEM")) - assert any(n.scl_text for n in decoded.networks) # reconstructed SCL network + assert any(n.scl_text for n in decoded.networks) # reconstructed SCL network scl = emit.emit_scl(decoded) - assert ".%X0" in scl # bit slice - resets = [s for n in decoded.networks for s in n.statements - if isinstance(s, ir.Assign) and s.kind is ir.AssignKind.RESET] - assert resets # RCoil -> reset + assert ".%X0" in scl # bit slice + resets = [ + s + for n in decoded.networks + for s in n.statements + if isinstance(s, ir.Assign) and s.kind is ir.AssignKind.RESET + ] + assert resets # RCoil -> reset diff --git a/tests/test_release_version.py b/tests/test_release_version.py new file mode 100644 index 0000000..ba409f2 --- /dev/null +++ b/tests/test_release_version.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +import importlib.util +from pathlib import Path + + +SCRIPT_PATH = Path(__file__).resolve().parent.parent / "scripts" / "check_release_version.py" +SPEC = importlib.util.spec_from_file_location("check_release_version", SCRIPT_PATH) +assert SPEC is not None +release_version = importlib.util.module_from_spec(SPEC) +assert SPEC.loader is not None +SPEC.loader.exec_module(release_version) + + +def _write_project(root: Path, project_version: str, init_version: str) -> Path: + package_dir = root / "src" / "simaticml_decoder" + package_dir.mkdir(parents=True) + (root / "pyproject.toml").write_text( + f'[project]\nname = "simaticml-decoder"\nversion = "{project_version}"\n', + encoding="utf-8", + ) + (package_dir / "__init__.py").write_text( + f'__version__ = "{init_version}"\n', + encoding="utf-8", + ) + return root + + +def test_check_release_version_accepts_matching_v_tag(tmp_path: Path) -> None: + root = _write_project(tmp_path, "1.2.3", "1.2.3") + + assert release_version.check_release_version(root, "v1.2.3") == () + + +def test_check_release_version_reports_pyproject_mismatch(tmp_path: Path) -> None: + root = _write_project(tmp_path, "1.2.4", "1.2.3") + + errors = release_version.check_release_version(root, "v1.2.3") + + assert errors == ("tag version '1.2.3' does not match pyproject.toml '1.2.4'",) + + +def test_check_release_version_reports_init_mismatch(tmp_path: Path) -> None: + root = _write_project(tmp_path, "1.2.3", "1.2.4") + + errors = release_version.check_release_version(root, "v1.2.3") + + assert errors == ("tag version '1.2.3' does not match __version__ '1.2.4'",) + + +def test_check_release_version_rejects_non_v_tag(tmp_path: Path) -> None: + root = _write_project(tmp_path, "1.2.3", "1.2.3") + + try: + release_version.check_release_version(root, "1.2.3") + except ValueError as exc: + assert str(exc) == "release tag must start with 'v': 1.2.3" + else: + raise AssertionError("expected non-v release tag to fail")