pineforge-codegen 0.7.1__tar.gz → 0.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/.github/workflows/release.yml +29 -9
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/PKG-INFO +1 -1
- pineforge_codegen-0.7.2/VERSION +1 -0
- pineforge_codegen-0.7.2/gate/compare.mjs +69 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/gate/run-gate.mjs +19 -5
- pineforge_codegen-0.7.2/gate/selftest.mjs +57 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/base.py +22 -10
- pineforge_codegen-0.7.2/tests/test_codegen_determinism.py +136 -0
- pineforge_codegen-0.7.1/VERSION +0 -1
- pineforge_codegen-0.7.1/gate/compare.mjs +0 -29
- pineforge_codegen-0.7.1/gate/selftest.mjs +0 -29
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/.github/dependabot.yml +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/.github/workflows/gate.yml +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/.github/workflows/publish-pyodide.yml +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/.github/workflows/test.yml +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/.gitignore +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/CLAUDE.md +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/LEGAL.md +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/LICENSE +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/PYODIDE_TARGET +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/README.md +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/docs/codegen-coverage-gaps.md +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/gate/glue.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/gate/oracle.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/npm/README.md +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/npm/index.mjs +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/npm/package.json +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/package-lock.json +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/package.json +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/__init__.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/__init__.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/base.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/call_handlers.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/contracts.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/diagnostics.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/tables.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/types.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/ast_nodes.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/__init__.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/emit_top.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/helpers.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/helpers_syminfo.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/input.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/security.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/ta.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/tables.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/types.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/visit_call.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/visit_expr.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/visit_stmt.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/errors.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/lexer.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/parser.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/pragmas.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/signatures.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/support_checker.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/symbols.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/tokens.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/tv_input_choices.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pyproject.toml +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/scripts/build-npm-package.mjs +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/scripts/dump-tables.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/scripts/worker-template.mjs +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/__init__.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/_compile.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/chart_bg_color.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/const_ns_plot_style_free.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/const_ns_shape_free.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/export_func.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/footprint_new.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/hard_reject_dividends.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/matrix_unknown_elem.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/multi_error_one_line.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/sec_tf_invalid.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/unknown_color.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/unknown_math.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/unknown_str.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/unknown_strategy_fn.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/unknown_syminfo.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/err/unknown_ta.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/AAPL__session-ismarket-nyse-rth-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/AAPL__time-tradingday-daily-reset-counter-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/QQQ__session-ispremarket-nasdaq-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/SPY__session-firstbar-vwap-anchor-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/SPY__session-lastbar-flatten-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/crypto-htf__mtf-htf-monthly-ema-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/crypto-leverage__leverage-margin-call-perp-5x-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/forex__symbol-fx-5dp-eurusd-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/futures__symbol-futures-pointvalue-es-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/tutorial__macd__strategy.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/tutorial__mtf__strategy_htf.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/tutorial__mtf__strategy_ltf.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/us-equity__symbol-equity-rth-gaps-aapl-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/us-equity__us-equity-exchange-tz-intraday-cap-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__analyzer-parity-choch-bos-isolator-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__analyzer-parity-edge-margin-50-pct-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__analyzer-parity-percent-of-equity-sizing-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__analyzer-parity-small-equity-fraction-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__analyzer-parity-stop-limit-timing-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__analyzer-self-test-multi-mode-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__anomaly-equity-mirror-strategy-equity-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__barstate-isconfirmed-magnifier-off-01b.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__barstate-isconfirmed-magnifier-on-01a.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-atr-trail-series-int-points-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-atr-trailing-stop-state-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-entry-exit-same-pass-attach-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-exit-stop-limit-trail-same-bar-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-exit-three-way-set-once-entry-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-exit-tp-sl-fixed-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-narrow-stop-limit-with-trail8-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-partial-exit-qty-percent-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-same-id-exit-replace-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-tp-sl-oca-reduce-isolate-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-trail-points-no-offset-explicit-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-trail-points-with-offset-only-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__bracket-trailing-activation-offset-path-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__cap-max-intraday-filled-orders-isolate-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__cap-risk-gates-allow-max-intraday-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-4emarsi-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-4emarsi-quad-ema-stack-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-4emarsi-rsi-pullback-latch-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-4emarsi-session-window-nbar-exit-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-boscurv-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-boscurv-linreg-slope-channel-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-boscurv-pivot-bos-trigger-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-bracket-cap-range-pending-stop-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-adx-regime-classify-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-bb-kc-squeeze-release-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-cooldown-daily-cap-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-equity-feedback-sizing-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-pivot-liquidity-sweep-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-pressure-gauge-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-rsi-macd-momentum-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-ies-three-ema-bias-score-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kanuck-calc-on-every-tick-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kanuck-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kanuck-kama-state-recurrence-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kanuck-max-bars-back-500-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kkb-ema-atr-breakout-band-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kkb-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kkb-kalman-filter-1d-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-kkb-margin-100-pct-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-liqsweep-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-liqsweep-pivot-hh-ll-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-liqsweep-wait-one-continuation-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-liqsweep-wick-pierce-close-back-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-marketshift-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-marketshift-pivot-state-machine-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-marketshift-rolling-highest-lowest-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-marketshift-state-edge-detector-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-scalping-fast-ma-cross-trigger-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-scalping-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-scalping-tight-tp-sl-points-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-trendmaster-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-trendmaster-line-new-projection-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-trendmaster-pivot-anchored-bracket-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-trendmaster-three-tier-ema-state-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-trendmaster-trend-momentum-structure-gate-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-cumulative-volume-delta-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-fvg-active-zones-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-manual-adx-regime-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-pivot-strength-5-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-rsi-smooth-divergence-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-session-tz-newyork-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-vcp-vol-zscore-anomaly-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-wunderscalper-alert-templates-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-wunderscalper-explicit-reverse-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__composite-wunderscalper-integration-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__input-source-runtime-override-high-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__input-source-subscript-hl2-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ltf-bool-array-bull-majority-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ltf-numeric-float-ratio15-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__magnifier-tick-dist-endpoints-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__magnifier-tick-dist-endpoints-rsi-cross-08a.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__magnifier-tick-dist-volume-weighted-on-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__matrix-bool-mask-explicit-utc-tz-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__matrix-bool-mask-no-transpose-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__matrix-bool-mask-transpose-roundtrip-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__matrix-bool-regime-mask-24x7-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__matrix-covariance-eigen-pca-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__matrix-eigen-rank-deficient-cov-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-daily-array-median-percentrank-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-daily-ema26-warmup-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-daily-prev-high-break-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-dual-tf-60-240-rising-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-60-close-change-baseline-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-60-close-roll-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-60-gaps-on-roll-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-60-rsi14-inside-security-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-60-sma20-inside-security-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-60-volume-spike-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-confluence-manual-trail-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-confluence-static-bracket-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-htf-weekly-sma-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-roll-state-60-240-d-minimal-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-triple-tf-close-confluence-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__mtf-triple-tf-macd-hist-confluence-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__na-deep-history-int-na-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__na-nz-fixnan-history-chain-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__oca-exit-bracket-internal-cancel-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__oca-multi-bracket-isolation-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__oca-raw-strategy-order-reduce-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-close-all-cancel-all-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-close-immediate-vs-next-bar-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-cross-entry-cancel-same-pass-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-cross-entry-close-same-pass-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-cross-exit-close-same-pass-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-deferred-flip-guaranteed-gap-stops-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-deferred-flip-pooc-cross-bar-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-four-bar-stop-no-close-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-side-same-id-stop-no-cancel-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-both-touch-priority-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-cancel-rotation-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-far-only-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-near-only-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-open-high-first-path-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-open-low-first-path-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-open-tie-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-source-order-long-first-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-dual-stop-source-order-short-first-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-entry-implicit-reversal-exit-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-flip-stop-no-paired-close-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-market-close-fill-basis-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-one-side-four-bar-far-opposite-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-opposite-entry-close-same-pass-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-percent-equity-cash-commission-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-process-on-close-false-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-process-on-close-true-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-range-expansion-pending-stop-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-entry-close-same-bar-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-market-entry-repeat-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-stop-after-flat-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-stop-cross-before-modify-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-stop-minute-zero-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-stop-modification-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-stop-raise-only-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-same-id-stop-window-four-bars-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-stale-stop-after-close-no-cancel-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-stop-cancel-no-regime-close-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-stop-entry-cancel-opposite-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-stop-entry-reversal-grouping-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__order-stop-entry-touch-boundary-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__pyramid-cash-fractional-commission-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__pyramid-close-id-grouping-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__pyramid-deferred-flip-close-all-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__pyramid-flip-stop-pyramiding-2-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__recompute-alma-sar-corr-magnifier-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__recompute-mtf-rsi-macd-bb-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__risk-max-contracts-held-gate-pyramid-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__session-hour-minute-pulse-filter-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__session-ny-spring-forward-dst-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__stats-eventrades-zero-pnl-count-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-accdist-ema-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-bb-kc-squeeze-breakout-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-bb-rsi-mean-reversion-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-cci-threshold-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-chandelier-exit-direction-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-closedtrades-risk-introspection-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-cmo-9-zero-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-cog-10-signal-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-dmi-adx-di-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-donchian-channel-breakout-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-dual-ma-switch-dispatch-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-dual-thrust-open-anchored-range-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-elder-ray-bull-bear-power-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-ema-ribbon-stack-transition-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-engulfing-candle-pattern-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-highestbars-lowestbars-breakout-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-hma-55-close-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-hma-fast-slow-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-inside-bar-engulfing-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-kama-style-efficiency-ratio-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-keltner-channel-break-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-linreg-stdev-channel-revert-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-macd-12-26-9-line-signal-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-macd-histogram-reversal-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-macd-line-gt-signal-continuous-state-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-map-regime-threshold-lookup-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-median-vs-ema-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-mfi-14-bands-20-80-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-momentum-roc-zero-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-multi-indicator-score-composite-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-nvi-pvi-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-obv-ema-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-percentrank-mean-reversion-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-pivot-array-unshift-pop-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-pivot-atr-stop-target-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-pivot-confirmed-break-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-pivot-point-levels-break-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-pvt-ema-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-range-filter-var-band-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rci-14-zero-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi-bb-self-bands-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi-ema-signal-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi-macd-and-continuous-state-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi14-bands-30-70-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi14-cross-50-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi14-gt-50-continuous-state-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-rsi14-gt60-lt45-no-matrix-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-sar-flip-entry-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-sma-152-close-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-sma-dual-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-stdev-sma-expansion-break-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-stoch-slow-k-d-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-stochastic-rsi-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-str-match-regex-filter-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-supertrend-adx-filter-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-supertrend-direction-flip-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-triple-sma-stack-latch-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-tsi-25-13-signal-cross-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-volume-spike-atr-breakout-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-vwma-vs-sma-divergence-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__ta-wpr-14-bands-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__timeframe-main-period-self-adaptive-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-calls-sibling-cumulative-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-default-param-kwargs-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-drives-strategy-entry-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-extra-primitive-args-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-feeds-strategy-exit-prices-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-in-for-loop-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-in-if-else-branch-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-in-switch-arms-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-in-while-loop-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-mutating-self-ref-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-on-array-element-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-reads-strategy-state-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-receives-ta-series-param-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-scalar-return-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-tuple-return-destructure-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-udt-return-from-func-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-uses-history-globals-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-uses-math-funcs-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-uses-na-nz-fixnan-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-var-instance-streak-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-method-windowed-method-chain-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__udt-regime-stack-stress-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__vwap-bands-breakout-1sigma-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/gate-corpus/ok/validation__vwap-bands-mean-reversion-2sigma-01.pine +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/golden/matrix_eigen_pca.cpp +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_analyzer.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_analyzer_matrix_inference.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_analyzer_ta_return_types.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_codegen_audit_fixes.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_codegen_fallthrough_guards.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_codegen_golden.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_codegen_input_getters.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_codegen_matrix_typed.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_codegen_new.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_compile_corpus.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_compile_smoke.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_errors.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_import_all.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_input_time_int64.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_int64_time_storage.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_lexer.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_official_surface.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_parser.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_security_tf_literal.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_signatures.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_chart_visible_bar_time.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_color_cast.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_const_namespaces.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_dividends_earnings.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_footprint.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_input_color.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_input_source.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_matrix.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_security_adjustment.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_syminfo_gap_fields.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_timeframe_from_seconds.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_varip.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_support_checker_volume_row.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_symbols.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_ta_official_surface.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_transpile_division.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_transpile_enum_order.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_transpile_pf_trace.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_transpile_tr_handle_na.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_transpiler_matrix_kwargs.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_typespec_matrix.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_udt_drawing_field_cleanup.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_unsupported_reporting.py +0 -0
- {pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/tests/test_vwap_tuple_unpack.py +0 -0
|
@@ -36,8 +36,9 @@ jobs:
|
|
|
36
36
|
release:
|
|
37
37
|
runs-on: ubuntu-latest
|
|
38
38
|
env:
|
|
39
|
-
BUMP:
|
|
40
|
-
OVERRIDE:
|
|
39
|
+
BUMP: ${{ inputs.bump }}
|
|
40
|
+
OVERRIDE: ${{ inputs.override }}
|
|
41
|
+
PYTHONHASHSEED: "0" # deterministic gate runtime (match gate.yml)
|
|
41
42
|
steps:
|
|
42
43
|
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
43
44
|
with:
|
|
@@ -83,7 +84,22 @@ jobs:
|
|
|
83
84
|
|
|
84
85
|
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
85
86
|
with:
|
|
86
|
-
python-version: "3.
|
|
87
|
+
python-version: "3.14" # match the gate's runtime
|
|
88
|
+
|
|
89
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
90
|
+
with:
|
|
91
|
+
node-version: "22"
|
|
92
|
+
|
|
93
|
+
# Conformance gate (BLOCKING): the differential parity gate must pass
|
|
94
|
+
# before anything is built, published, or tagged. A gate-broken codegen
|
|
95
|
+
# fails the release here — nothing reaches PyPI, no tag is pushed (so the
|
|
96
|
+
# tag->npm trigger never fires), and no GitHub Release is created.
|
|
97
|
+
- name: Run conformance gate (blocking)
|
|
98
|
+
run: |
|
|
99
|
+
python -m pip install -e .
|
|
100
|
+
npm ci
|
|
101
|
+
npm run gate:selftest
|
|
102
|
+
npm run gate:full
|
|
87
103
|
|
|
88
104
|
- name: Build sdist + wheel
|
|
89
105
|
run: |
|
|
@@ -91,8 +107,16 @@ jobs:
|
|
|
91
107
|
python -m build
|
|
92
108
|
ls -l dist/
|
|
93
109
|
|
|
94
|
-
#
|
|
95
|
-
#
|
|
110
|
+
# Publish to PyPI BEFORE the tag is pushed. The tag push triggers
|
|
111
|
+
# publish-pyodide.yml (npm), so PyPI must land first — otherwise a PyPI
|
|
112
|
+
# failure would leave npm shipping a version PyPI never got.
|
|
113
|
+
- name: Publish to PyPI
|
|
114
|
+
if: ${{ !inputs.dry_run }}
|
|
115
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
|
|
116
|
+
|
|
117
|
+
# Commit + tag + push AFTER PyPI succeeds. The `git push --tags` triggers
|
|
118
|
+
# publish-pyodide.yml for npm (which re-runs the gate — defense in depth),
|
|
119
|
+
# so the tag only exists once the gate passed and PyPI published.
|
|
96
120
|
- name: Commit + tag + push
|
|
97
121
|
if: ${{ !inputs.dry_run }}
|
|
98
122
|
env:
|
|
@@ -105,10 +129,6 @@ jobs:
|
|
|
105
129
|
git tag "v${NEW_VERSION}"
|
|
106
130
|
git push origin HEAD --tags
|
|
107
131
|
|
|
108
|
-
- name: Publish to PyPI
|
|
109
|
-
if: ${{ !inputs.dry_run }}
|
|
110
|
-
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
|
|
111
|
-
|
|
112
132
|
- name: Create GitHub Release
|
|
113
133
|
if: ${{ !inputs.dry_run }}
|
|
114
134
|
env:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pineforge-codegen
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2
|
|
4
4
|
Summary: PineScript v6 to C++ transpiler that targets the pineforge-engine runtime.
|
|
5
5
|
Project-URL: Homepage, https://github.com/pineforge-4pass/pineforge-codegen-oss
|
|
6
6
|
Project-URL: Issues, https://github.com/pineforge-4pass/pineforge-codegen-oss/issues
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.7.2
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Pure, side-effect-free comparator for the gate. Both run-gate.mjs (the runner)
|
|
2
|
+
// and selftest.mjs (the canary) import this — so importing it never triggers a
|
|
3
|
+
// gate run. Each side is {json: "<transpile_json string>"} (normal return) or
|
|
4
|
+
// {unexpected: "Type: msg"} (non-CompileError exception). Returns a mismatch
|
|
5
|
+
// string, or null if the two sides agree.
|
|
6
|
+
export function compareResults(name, native, browser) {
|
|
7
|
+
if (!native) return `${name}: oracle produced no result`;
|
|
8
|
+
if (!browser) return `${name}: pyodide produced no result`;
|
|
9
|
+
if (native.unexpected || browser.unexpected) {
|
|
10
|
+
if (native.unexpected !== browser.unexpected) {
|
|
11
|
+
return `${name}: unexpected-exception mismatch\n native : ${native.unexpected ?? "<none>"}\n pyodide: ${browser.unexpected ?? "<none>"}`;
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
if (native.json !== browser.json) {
|
|
16
|
+
let detail = "";
|
|
17
|
+
try {
|
|
18
|
+
const n = JSON.parse(native.json);
|
|
19
|
+
const b = JSON.parse(browser.json);
|
|
20
|
+
if (n.ok !== b.ok) detail = `verdict ${b.ok} (pyodide) != ${n.ok} (native)`;
|
|
21
|
+
else if (n.ok) detail = "C++ output differs";
|
|
22
|
+
else detail = `error/diagnostics differ\n native : ${native.json}\n pyodide: ${browser.json}`;
|
|
23
|
+
} catch {
|
|
24
|
+
detail = `raw json differs\n native : ${native.json}\n pyodide: ${browser.json}`;
|
|
25
|
+
}
|
|
26
|
+
return `${name}: ${detail}`;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Expected verdict for a corpus branch: "ok/*" fixtures must transpile
|
|
32
|
+
// successfully (result.ok === true), "err/*" fixtures must be rejected
|
|
33
|
+
// (result.ok === false). Anything else — the wrong verdict, an unparseable
|
|
34
|
+
// payload, or an unexpected (non-CompileError) exception — is a gate failure
|
|
35
|
+
// even when native and wasm agree (two identical crashes must NOT pass).
|
|
36
|
+
//
|
|
37
|
+
// This is intentionally separate from compareResults so the gate enforces BOTH
|
|
38
|
+
// (a) native↔wasm parity and (b) the right answer. `side` is {json} or
|
|
39
|
+
// {unexpected}; `expectOk` is true for "ok", false for "err".
|
|
40
|
+
function verdictOf(side) {
|
|
41
|
+
if (!side) return { kind: "missing" };
|
|
42
|
+
if (side.unexpected) return { kind: "unexpected", detail: side.unexpected };
|
|
43
|
+
try {
|
|
44
|
+
const v = JSON.parse(side.json);
|
|
45
|
+
if (typeof v.ok !== "boolean") return { kind: "malformed", detail: side.json };
|
|
46
|
+
return { kind: "verdict", ok: v.ok };
|
|
47
|
+
} catch {
|
|
48
|
+
return { kind: "malformed", detail: side.json };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Returns a failure string if either side does not match the expected verdict
|
|
53
|
+
// for the fixture's branch, or null if both sides produced the expected verdict.
|
|
54
|
+
export function checkExpectedVerdict(name, expectOk, native, browser) {
|
|
55
|
+
for (const [label, side] of [["native", native], ["pyodide", browser]]) {
|
|
56
|
+
const r = verdictOf(side);
|
|
57
|
+
if (r.kind === "missing") return `${name}: ${label} produced no result`;
|
|
58
|
+
if (r.kind === "unexpected") {
|
|
59
|
+
return `${name}: ${label} threw an unexpected exception (expected ok=${expectOk}): ${r.detail}`;
|
|
60
|
+
}
|
|
61
|
+
if (r.kind === "malformed") {
|
|
62
|
+
return `${name}: ${label} returned a malformed result (expected ok=${expectOk}): ${r.detail}`;
|
|
63
|
+
}
|
|
64
|
+
if (r.ok !== expectOk) {
|
|
65
|
+
return `${name}: ${label} verdict ok=${r.ok} but corpus dir expects ok=${expectOk}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
@@ -13,7 +13,7 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from
|
|
|
13
13
|
import { createRequire } from "node:module";
|
|
14
14
|
import { dirname, join } from "node:path";
|
|
15
15
|
import { fileURLToPath } from "node:url";
|
|
16
|
-
import { compareResults } from "./compare.mjs";
|
|
16
|
+
import { checkExpectedVerdict, compareResults } from "./compare.mjs";
|
|
17
17
|
|
|
18
18
|
const require = createRequire(import.meta.url);
|
|
19
19
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
@@ -79,8 +79,14 @@ async function main() {
|
|
|
79
79
|
});
|
|
80
80
|
const native = JSON.parse(oracleOut);
|
|
81
81
|
|
|
82
|
-
// 4. Pyodide side + compare.
|
|
82
|
+
// 4. Pyodide side + compare. The gate enforces TWO independent properties:
|
|
83
|
+
// (a) native↔wasm parity (compareResults) and
|
|
84
|
+
// (b) the EXPECTED verdict by corpus dir (checkExpectedVerdict): ok/* must
|
|
85
|
+
// succeed, err/* must be rejected. A purely differential check would
|
|
86
|
+
// let two identical crashes — or an ok/ fixture that erroneously errors
|
|
87
|
+
// — slip through; (b) closes that gap.
|
|
83
88
|
const mismatches = [];
|
|
89
|
+
const verdictFailures = [];
|
|
84
90
|
for (const { name, src } of items) {
|
|
85
91
|
let browser;
|
|
86
92
|
try {
|
|
@@ -90,6 +96,9 @@ async function main() {
|
|
|
90
96
|
}
|
|
91
97
|
const m = compareResults(name, native[name], browser);
|
|
92
98
|
if (m) mismatches.push(m);
|
|
99
|
+
const expectOk = name.startsWith("ok/");
|
|
100
|
+
const v = checkExpectedVerdict(name, expectOk, native[name], browser);
|
|
101
|
+
if (v) verdictFailures.push(v);
|
|
93
102
|
}
|
|
94
103
|
|
|
95
104
|
// 5. release.json (versions derived from the loaded Pyodide lock).
|
|
@@ -106,11 +115,16 @@ async function main() {
|
|
|
106
115
|
writeFileSync(join(ROOT, "release.json"), JSON.stringify(release, null, 2) + "\n");
|
|
107
116
|
console.log("gate: release.json ->", JSON.stringify(release));
|
|
108
117
|
|
|
109
|
-
if (mismatches.length) {
|
|
110
|
-
|
|
118
|
+
if (mismatches.length || verdictFailures.length) {
|
|
119
|
+
if (mismatches.length) {
|
|
120
|
+
console.error(`gate: ${mismatches.length} PARITY MISMATCH(es):\n` + mismatches.join("\n"));
|
|
121
|
+
}
|
|
122
|
+
if (verdictFailures.length) {
|
|
123
|
+
console.error(`gate: ${verdictFailures.length} VERDICT FAILURE(s) (wrong ok/err result):\n` + verdictFailures.join("\n"));
|
|
124
|
+
}
|
|
111
125
|
process.exit(1);
|
|
112
126
|
}
|
|
113
|
-
console.log(`gate: PARITY OK over ${items.length} fixtures`);
|
|
127
|
+
console.log(`gate: PARITY OK over ${items.length} fixtures (verdicts asserted: ok/* succeed, err/* rejected)`);
|
|
114
128
|
}
|
|
115
129
|
|
|
116
130
|
main().catch((e) => {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Canary: prove the gate's checks actually catch divergences. Imports the PURE
|
|
2
|
+
// comparator + verdict checker (gate/compare.mjs) so it runs in <1s without
|
|
3
|
+
// loading Pyodide. Covers BOTH (a) native↔wasm parity (compareResults) and
|
|
4
|
+
// (b) expected-verdict-by-corpus-dir (checkExpectedVerdict).
|
|
5
|
+
import { checkExpectedVerdict, compareResults } from "./compare.mjs";
|
|
6
|
+
|
|
7
|
+
const OK = '{"ok":true,"cpp":"X"}';
|
|
8
|
+
const ERR = '{"ok":false,"error":"e","diagnostics":[]}';
|
|
9
|
+
|
|
10
|
+
// --- (a) differential comparator cases: [name, native, browser, mustFlag] ---
|
|
11
|
+
const cmpCases = [
|
|
12
|
+
["same-ok", { json: OK }, { json: OK }, false],
|
|
13
|
+
["cpp-differs", { json: '{"ok":true,"cpp":"X"}' }, { json: '{"ok":true,"cpp":"Y"}' }, true],
|
|
14
|
+
["verdict-differs", { json: OK }, { json: ERR }, true],
|
|
15
|
+
["error-differs", { json: '{"ok":false,"error":"a","diagnostics":[]}' }, { json: '{"ok":false,"error":"b","diagnostics":[]}' }, true],
|
|
16
|
+
["unexpected-one-side", { json: OK }, { unexpected: "TypeError: boom" }, true],
|
|
17
|
+
["unexpected-both-same", { unexpected: "TypeError: boom" }, { unexpected: "TypeError: boom" }, false],
|
|
18
|
+
["unexpected-both-diff", { unexpected: "TypeError: a" }, { unexpected: "ValueError: b" }, true],
|
|
19
|
+
["missing-native", undefined, { json: OK }, true],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
// --- (b) expected-verdict cases: [name, expectOk, native, browser, mustFlag] ---
|
|
23
|
+
// A native↔wasm match with the WRONG verdict (e.g. ok/ that errors, or a shared
|
|
24
|
+
// unexpected exception) must FAIL even though compareResults would pass it.
|
|
25
|
+
const verdictCases = [
|
|
26
|
+
["ok/good", true, { json: OK }, { json: OK }, false],
|
|
27
|
+
["err/bad", false, { json: ERR }, { json: ERR }, false],
|
|
28
|
+
["ok/that-errors-both-sides", true, { json: ERR }, { json: ERR }, true],
|
|
29
|
+
["err/that-succeeds-both-sides", false, { json: OK }, { json: OK }, true],
|
|
30
|
+
["ok/unexpected-both-same", true, { unexpected: "TypeError: boom" }, { unexpected: "TypeError: boom" }, true],
|
|
31
|
+
["err/unexpected-both-same", false, { unexpected: "TypeError: boom" }, { unexpected: "TypeError: boom" }, true],
|
|
32
|
+
["ok/native-wrong-only", true, { json: ERR }, { json: OK }, true],
|
|
33
|
+
["ok/pyodide-wrong-only", true, { json: OK }, { json: ERR }, true],
|
|
34
|
+
["ok/missing-native", true, undefined, { json: OK }, true],
|
|
35
|
+
["ok/malformed", true, { json: "not json" }, { json: OK }, true],
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
let failed = 0;
|
|
39
|
+
for (const [name, n, b, mustFlag] of cmpCases) {
|
|
40
|
+
const flagged = compareResults(name, n, b) !== null;
|
|
41
|
+
if (flagged !== mustFlag) {
|
|
42
|
+
console.error(`selftest FAIL (compareResults): ${name} expected mustFlag=${mustFlag} got ${flagged}`);
|
|
43
|
+
failed++;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
for (const [name, expectOk, n, b, mustFlag] of verdictCases) {
|
|
47
|
+
const flagged = checkExpectedVerdict(name, expectOk, n, b) !== null;
|
|
48
|
+
if (flagged !== mustFlag) {
|
|
49
|
+
console.error(`selftest FAIL (checkExpectedVerdict): ${name} expected mustFlag=${mustFlag} got ${flagged}`);
|
|
50
|
+
failed++;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (failed) {
|
|
54
|
+
console.error(`gate selftest: ${failed} case(s) failed`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
console.log(`gate selftest: ${cmpCases.length} comparator + ${verdictCases.length} verdict cases OK`);
|
|
@@ -185,19 +185,31 @@ class CodeGen(CallVisitor, ExprVisitor, StmtVisitor, TopLevelEmitter, SecurityEm
|
|
|
185
185
|
# This ensures sub-function series vars get cloned for the parent's call sites.
|
|
186
186
|
func_var_originals: dict[str, list[str]] = {} # func_name -> list of original var names
|
|
187
187
|
|
|
188
|
-
# First, collect all function-scoped series vars (union across all functions)
|
|
189
|
-
|
|
188
|
+
# First, collect all function-scoped series vars (union across all functions).
|
|
189
|
+
# Use an ordered, de-duplicated list (NOT a set): set iteration order is
|
|
190
|
+
# PYTHONHASHSEED-randomized, and this order reaches emitted C++ member
|
|
191
|
+
# declarations via ``orig_names`` -> ``func_var_originals`` ->
|
|
192
|
+
# ``_func_cs_var_remap``. ``ctx.func_series_vars`` is a dict whose VALUES
|
|
193
|
+
# are themselves sets (analyzer stores ``dict[str, set]``), so we must
|
|
194
|
+
# iterate each value in ``sorted`` order to be hash-seed independent.
|
|
195
|
+
all_func_scoped_series: list[str] = []
|
|
190
196
|
for svars in ctx.func_series_vars.values():
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
197
|
+
for sv in sorted(svars):
|
|
198
|
+
if sv not in all_func_scoped_series:
|
|
199
|
+
all_func_scoped_series.append(sv)
|
|
200
|
+
# Also include function-scoped var_members (same ordered-list rationale).
|
|
201
|
+
# ``ctx.func_var_members`` values are lists (already insertion-ordered).
|
|
202
|
+
all_func_scoped_vars: list[str] = []
|
|
194
203
|
for vlist in ctx.func_var_members.values():
|
|
195
204
|
for n, _, _ in vlist:
|
|
196
|
-
all_func_scoped_vars
|
|
205
|
+
if n not in all_func_scoped_vars:
|
|
206
|
+
all_func_scoped_vars.append(n)
|
|
197
207
|
|
|
198
208
|
# For each function with call-site cloning (has TA ranges or is called multiple times),
|
|
199
|
-
# include ALL function-scoped series/var vars that could be used in its body
|
|
200
|
-
|
|
209
|
+
# include ALL function-scoped series/var vars that could be used in its body.
|
|
210
|
+
# Iterate the dict directly (insertion-ordered) rather than ``set(...keys())``,
|
|
211
|
+
# which would randomize the order of emitted clones across hash seeds.
|
|
212
|
+
for fname in ctx.func_call_site_counts:
|
|
201
213
|
total_cs = ctx.func_call_site_counts[fname]
|
|
202
214
|
if total_cs <= 1:
|
|
203
215
|
continue # No cloning needed for single-call-site functions
|
|
@@ -207,9 +219,9 @@ class CodeGen(CallVisitor, ExprVisitor, StmtVisitor, TopLevelEmitter, SecurityEm
|
|
|
207
219
|
for n, _, _ in ctx.func_var_members[fname]:
|
|
208
220
|
if n not in orig_names:
|
|
209
221
|
orig_names.append(n)
|
|
210
|
-
# Include function's own series vars
|
|
222
|
+
# Include function's own series vars (set -> sorted for determinism)
|
|
211
223
|
if fname in ctx.func_series_vars:
|
|
212
|
-
for sv in ctx.func_series_vars[fname]:
|
|
224
|
+
for sv in sorted(ctx.func_series_vars[fname]):
|
|
213
225
|
if sv not in orig_names:
|
|
214
226
|
orig_names.append(sv)
|
|
215
227
|
# Include series vars from sub-functions (they share the same class members)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Regression: transpiler output must be byte-identical across PYTHONHASHSEED.
|
|
2
|
+
|
|
3
|
+
Background
|
|
4
|
+
---------
|
|
5
|
+
``CodeGen.__init__`` once iterated several Python ``set`` collections whose
|
|
6
|
+
iteration order is SipHash-randomized by ``PYTHONHASHSEED``. That order flowed
|
|
7
|
+
into the emitted C++ member declarations for *call-site-cloned* function-scoped
|
|
8
|
+
series/var members (``orig_names`` -> ``func_var_originals`` ->
|
|
9
|
+
``_func_cs_var_remap``). The same input therefore transpiled to byte-different
|
|
10
|
+
C++ depending on the (random) hash seed of the interpreter. Fixed in
|
|
11
|
+
``fix(codegen): deterministic member-clone ordering`` by making those
|
|
12
|
+
collections ordered + de-duplicated and ``sorted()``-ing the set-valued
|
|
13
|
+
``func_series_vars`` at the two base.py consumption points.
|
|
14
|
+
|
|
15
|
+
This test locks that fix so it cannot silently regress.
|
|
16
|
+
|
|
17
|
+
Why subprocesses
|
|
18
|
+
----------------
|
|
19
|
+
``PYTHONHASHSEED`` is read once, at interpreter startup; the seed of the
|
|
20
|
+
*already-running* pytest process is fixed and cannot be changed in-process.
|
|
21
|
+
To probe multiple seeds we must spawn fresh ``python3`` children, each with a
|
|
22
|
+
different ``PYTHONHASHSEED`` in its environment, and compare their stdout.
|
|
23
|
+
|
|
24
|
+
The fixture exercises the exact path that varied pre-fix: a multi-call-site
|
|
25
|
+
function (``calc``, 4 sites) whose body uses its own local history-accessed
|
|
26
|
+
series vars (``m``/``n``/``c``) *and* pulls series from a sub-function
|
|
27
|
+
(``sub``, which also has its own series vars). That makes the codegen clone
|
|
28
|
+
function-scoped series members per call site and union series across the
|
|
29
|
+
parent + sub-function -- the ``all_func_scoped_series`` union the fix repaired.
|
|
30
|
+
|
|
31
|
+
Self-contained: pure transpile, no engine headers, no compiler, no network --
|
|
32
|
+
so it runs in default CI. (Verified locally that it produces 1 distinct hash
|
|
33
|
+
on the fixed tree and >1 on pre-fix ``origin/main``.)
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
import os
|
|
39
|
+
import subprocess
|
|
40
|
+
import sys
|
|
41
|
+
from pathlib import Path
|
|
42
|
+
|
|
43
|
+
# Repo root = parent of this tests/ directory. Threaded into the child via
|
|
44
|
+
# PYTHONPATH so ``import pineforge_codegen`` resolves regardless of how/where
|
|
45
|
+
# pytest was launched.
|
|
46
|
+
_REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
47
|
+
|
|
48
|
+
# A strategy that drives the cloned-member path. ``calc`` is called from 4
|
|
49
|
+
# distinct sites (-> call-site cloning), uses its own local series vars, and
|
|
50
|
+
# pulls a series value from ``sub`` (which has its own series vars too). This
|
|
51
|
+
# is the shape that produced byte-different C++ across hash seeds pre-fix.
|
|
52
|
+
FIXTURE = """//@version=6
|
|
53
|
+
strategy("Determinism Fixture", overlay=true)
|
|
54
|
+
|
|
55
|
+
// Sub-function with its OWN history-accessed local series vars. Its series
|
|
56
|
+
// vars must be cloned into the parent's per-call-site members, exercising the
|
|
57
|
+
// parent <- sub-function series union the fix made deterministic.
|
|
58
|
+
sub(float x) =>
|
|
59
|
+
a = ta.sma(x, 5)
|
|
60
|
+
b = ta.ema(x, 8)
|
|
61
|
+
c = a - b
|
|
62
|
+
d = c[1] + c[2]
|
|
63
|
+
a + b + c + d
|
|
64
|
+
|
|
65
|
+
// Parent: own local series vars (m, n) PLUS a pull from sub(). Called from 4
|
|
66
|
+
// sites below -> call-site cloning (cs1..cs3) clones these function-scoped
|
|
67
|
+
// series members, whose declaration order is what regressed across seeds.
|
|
68
|
+
calc(float src, int len) =>
|
|
69
|
+
m = ta.sma(src, len)
|
|
70
|
+
n = ta.rma(src, len)
|
|
71
|
+
p = m[1] - n[2]
|
|
72
|
+
q = sub(src)
|
|
73
|
+
r = p + q + m[3] + n[4]
|
|
74
|
+
r
|
|
75
|
+
|
|
76
|
+
s1 = calc(close, 10)
|
|
77
|
+
s2 = calc(open, 14)
|
|
78
|
+
s3 = calc(high, 20)
|
|
79
|
+
s4 = calc(low, 7)
|
|
80
|
+
|
|
81
|
+
plot(s1 + s2 + s3 + s4)
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
# Child program: read the fixture on stdin, transpile, write the C++ to stdout
|
|
85
|
+
# verbatim. Any exception propagates as a non-zero exit + traceback on stderr.
|
|
86
|
+
_CHILD = (
|
|
87
|
+
"import sys\n"
|
|
88
|
+
"from pineforge_codegen import transpile\n"
|
|
89
|
+
"sys.stdout.write(transpile(sys.stdin.read()))\n"
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# Spread across the SipHash seed space: 0 disables randomization entirely;
|
|
93
|
+
# the rest are arbitrary fixed seeds. Pre-fix, this set yields >1 distinct
|
|
94
|
+
# output; post-fix it must yield exactly 1.
|
|
95
|
+
_SEEDS = [0, 1, 2, 7, 12345]
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _transpile_under_seed(seed: int) -> str:
|
|
99
|
+
"""Transpile FIXTURE in a fresh interpreter pinned to ``PYTHONHASHSEED=seed``."""
|
|
100
|
+
env = {
|
|
101
|
+
**os.environ,
|
|
102
|
+
"PYTHONHASHSEED": str(seed),
|
|
103
|
+
# Prepend repo root so the child imports the in-tree package even if
|
|
104
|
+
# an installed copy exists elsewhere on the path.
|
|
105
|
+
"PYTHONPATH": os.pathsep.join(
|
|
106
|
+
[str(_REPO_ROOT), os.environ.get("PYTHONPATH", "")]
|
|
107
|
+
).rstrip(os.pathsep),
|
|
108
|
+
}
|
|
109
|
+
proc = subprocess.run(
|
|
110
|
+
[sys.executable, "-c", _CHILD],
|
|
111
|
+
input=FIXTURE,
|
|
112
|
+
env=env,
|
|
113
|
+
capture_output=True,
|
|
114
|
+
text=True,
|
|
115
|
+
timeout=120,
|
|
116
|
+
)
|
|
117
|
+
assert proc.returncode == 0, (
|
|
118
|
+
f"transpile subprocess failed under PYTHONHASHSEED={seed} "
|
|
119
|
+
f"(exit={proc.returncode}).\n--- stderr (tail) ---\n"
|
|
120
|
+
+ "\n".join((proc.stderr or "").splitlines()[-40:])
|
|
121
|
+
)
|
|
122
|
+
assert proc.stdout, f"transpile produced empty output under PYTHONHASHSEED={seed}"
|
|
123
|
+
return proc.stdout
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def test_transpile_byte_identical_across_hash_seeds() -> None:
|
|
127
|
+
"""All seeds must yield byte-identical C++ (locks the member-clone fix)."""
|
|
128
|
+
outputs = [_transpile_under_seed(seed) for seed in _SEEDS]
|
|
129
|
+
distinct = set(outputs)
|
|
130
|
+
assert len(distinct) == 1, (
|
|
131
|
+
"Transpiler output is NOT deterministic across PYTHONHASHSEED: "
|
|
132
|
+
f"{len(distinct)} distinct outputs across seeds {_SEEDS}. "
|
|
133
|
+
"This is the hash-seed member-clone-ordering regression "
|
|
134
|
+
"(see fix(codegen): deterministic member-clone ordering). "
|
|
135
|
+
"Likely a set is being iterated into emitted C++ again."
|
|
136
|
+
)
|
pineforge_codegen-0.7.1/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.7.1
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// Pure, side-effect-free comparator for the gate. Both run-gate.mjs (the runner)
|
|
2
|
-
// and selftest.mjs (the canary) import this — so importing it never triggers a
|
|
3
|
-
// gate run. Each side is {json: "<transpile_json string>"} (normal return) or
|
|
4
|
-
// {unexpected: "Type: msg"} (non-CompileError exception). Returns a mismatch
|
|
5
|
-
// string, or null if the two sides agree.
|
|
6
|
-
export function compareResults(name, native, browser) {
|
|
7
|
-
if (!native) return `${name}: oracle produced no result`;
|
|
8
|
-
if (!browser) return `${name}: pyodide produced no result`;
|
|
9
|
-
if (native.unexpected || browser.unexpected) {
|
|
10
|
-
if (native.unexpected !== browser.unexpected) {
|
|
11
|
-
return `${name}: unexpected-exception mismatch\n native : ${native.unexpected ?? "<none>"}\n pyodide: ${browser.unexpected ?? "<none>"}`;
|
|
12
|
-
}
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
if (native.json !== browser.json) {
|
|
16
|
-
let detail = "";
|
|
17
|
-
try {
|
|
18
|
-
const n = JSON.parse(native.json);
|
|
19
|
-
const b = JSON.parse(browser.json);
|
|
20
|
-
if (n.ok !== b.ok) detail = `verdict ${b.ok} (pyodide) != ${n.ok} (native)`;
|
|
21
|
-
else if (n.ok) detail = "C++ output differs";
|
|
22
|
-
else detail = `error/diagnostics differ\n native : ${native.json}\n pyodide: ${browser.json}`;
|
|
23
|
-
} catch {
|
|
24
|
-
detail = `raw json differs\n native : ${native.json}\n pyodide: ${browser.json}`;
|
|
25
|
-
}
|
|
26
|
-
return `${name}: ${detail}`;
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// Canary: prove the gate's comparator actually catches a divergence. Imports the
|
|
2
|
-
// PURE comparator (gate/compare.mjs) so it runs in <1s without loading Pyodide.
|
|
3
|
-
import { compareResults } from "./compare.mjs";
|
|
4
|
-
|
|
5
|
-
const cases = [
|
|
6
|
-
// [name, native, browser, mustFlag]
|
|
7
|
-
["same-ok", { json: '{"ok":true,"cpp":"X"}' }, { json: '{"ok":true,"cpp":"X"}' }, false],
|
|
8
|
-
["cpp-differs", { json: '{"ok":true,"cpp":"X"}' }, { json: '{"ok":true,"cpp":"Y"}' }, true],
|
|
9
|
-
["verdict-differs", { json: '{"ok":true,"cpp":"X"}' }, { json: '{"ok":false,"error":"e","diagnostics":[]}' }, true],
|
|
10
|
-
["error-differs", { json: '{"ok":false,"error":"a","diagnostics":[]}' }, { json: '{"ok":false,"error":"b","diagnostics":[]}' }, true],
|
|
11
|
-
["unexpected-one-side", { json: '{"ok":true,"cpp":"X"}' }, { unexpected: "TypeError: boom" }, true],
|
|
12
|
-
["unexpected-both-same", { unexpected: "TypeError: boom" }, { unexpected: "TypeError: boom" }, false],
|
|
13
|
-
["unexpected-both-diff", { unexpected: "TypeError: a" }, { unexpected: "ValueError: b" }, true],
|
|
14
|
-
["missing-native", undefined, { json: '{"ok":true,"cpp":"X"}' }, true],
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
let failed = 0;
|
|
18
|
-
for (const [name, n, b, mustFlag] of cases) {
|
|
19
|
-
const flagged = compareResults(name, n, b) !== null;
|
|
20
|
-
if (flagged !== mustFlag) {
|
|
21
|
-
console.error(`selftest FAIL: ${name} expected mustFlag=${mustFlag} got ${flagged}`);
|
|
22
|
-
failed++;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (failed) {
|
|
26
|
-
console.error(`gate selftest: ${failed} case(s) failed`);
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
console.log(`gate selftest: ${cases.length} comparator cases OK`);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/call_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
{pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/analyzer/diagnostics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pineforge_codegen-0.7.1 → pineforge_codegen-0.7.2}/pineforge_codegen/codegen/helpers_syminfo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|