pineforge-codegen 0.10.3__tar.gz → 0.10.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/PKG-INFO +1 -1
  2. pineforge_codegen-0.10.4/VERSION +1 -0
  3. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/base.py +13 -1
  4. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/call_handlers.py +8 -2
  5. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/base.py +11 -3
  6. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/emit_top.py +15 -0
  7. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/ta.py +10 -1
  8. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/tables.py +12 -0
  9. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/types.py +195 -6
  10. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/visit_call.py +9 -0
  11. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/visit_expr.py +28 -7
  12. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/visit_stmt.py +15 -3
  13. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/symbols.py +4 -2
  14. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_anchor_vwap.py +4 -2
  15. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_new.py +1 -1
  16. pineforge_codegen-0.10.4/tests/test_sparse_atr_prev_close.py +65 -0
  17. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_transpile_tr_handle_na.py +1 -1
  18. pineforge_codegen-0.10.4/tests/test_vwap_property_source.py +127 -0
  19. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_vwap_tuple_unpack.py +3 -2
  20. pineforge_codegen-0.10.4/tests/test_wide_int_arrays_and_literals.py +84 -0
  21. pineforge_codegen-0.10.3/VERSION +0 -1
  22. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.claude/settings.json +0 -0
  23. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.github/dependabot.yml +0 -0
  24. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.github/workflows/gate.yml +0 -0
  25. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.github/workflows/promote-baseline.yml +0 -0
  26. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.github/workflows/publish-pyodide.yml +0 -0
  27. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.github/workflows/release.yml +0 -0
  28. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.github/workflows/test.yml +0 -0
  29. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/.gitignore +0 -0
  30. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/AGENTS.md +0 -0
  31. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/CLAUDE.md +0 -0
  32. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/LEGAL.md +0 -0
  33. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/LICENSE +0 -0
  34. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/PYODIDE_TARGET +0 -0
  35. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/README.md +0 -0
  36. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/docs/codegen-coverage-gaps.md +0 -0
  37. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/gate/compare.mjs +0 -0
  38. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/gate/glue.py +0 -0
  39. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/gate/oracle.py +0 -0
  40. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/gate/run-gate.mjs +0 -0
  41. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/gate/selftest.mjs +0 -0
  42. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/npm/README.md +0 -0
  43. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/npm/index.mjs +0 -0
  44. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/npm/package.json +0 -0
  45. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/package-lock.json +0 -0
  46. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/package.json +0 -0
  47. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/__init__.py +0 -0
  48. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/__init__.py +0 -0
  49. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/contracts.py +0 -0
  50. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/diagnostics.py +0 -0
  51. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/tables.py +0 -0
  52. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/analyzer/types.py +0 -0
  53. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/ast_nodes.py +0 -0
  54. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/__init__.py +0 -0
  55. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/drawing.py +0 -0
  56. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/helpers.py +0 -0
  57. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/helpers_syminfo.py +0 -0
  58. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/input.py +0 -0
  59. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/codegen/security.py +0 -0
  60. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/errors.py +0 -0
  61. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/finite_ta_length.py +0 -0
  62. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/lexer.py +0 -0
  63. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/method_binding.py +0 -0
  64. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/parser.py +0 -0
  65. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/pragmas.py +0 -0
  66. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/signatures.py +0 -0
  67. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/support_checker.py +0 -0
  68. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/tokens.py +0 -0
  69. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pineforge_codegen/tv_input_choices.py +0 -0
  70. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/pyproject.toml +0 -0
  71. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/scripts/build-npm-package.mjs +0 -0
  72. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/scripts/dump-tables.py +0 -0
  73. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/scripts/worker-template.mjs +0 -0
  74. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/__init__.py +0 -0
  75. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/_compile.py +0 -0
  76. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/fixtures/matrix_eigen_pca.pine +0 -0
  77. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/const_ns_plot_style_free.pine +0 -0
  78. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/const_ns_shape_free.pine +0 -0
  79. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/export_func.pine +0 -0
  80. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/footprint_new.pine +0 -0
  81. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/hard_reject_dividends.pine +0 -0
  82. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/matrix_unknown_elem.pine +0 -0
  83. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/multi_error_one_line.pine +0 -0
  84. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/sec_tf_invalid.pine +0 -0
  85. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/unknown_color.pine +0 -0
  86. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/unknown_math.pine +0 -0
  87. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/unknown_str.pine +0 -0
  88. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/unknown_strategy_fn.pine +0 -0
  89. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/unknown_syminfo.pine +0 -0
  90. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/err/unknown_ta.pine +0 -0
  91. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/AAPL__session-ismarket-nyse-rth-01.pine +0 -0
  92. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/AAPL__time-tradingday-daily-reset-counter-01.pine +0 -0
  93. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/QQQ__session-ispremarket-nasdaq-01.pine +0 -0
  94. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/SPY__session-firstbar-vwap-anchor-01.pine +0 -0
  95. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/SPY__session-lastbar-flatten-01.pine +0 -0
  96. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/chart_bg_color.pine +0 -0
  97. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/crypto-htf__mtf-htf-monthly-ema-cross-01.pine +0 -0
  98. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/crypto-leverage__leverage-margin-call-perp-5x-01.pine +0 -0
  99. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/divergent_last_bar_index.pine +0 -0
  100. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/forex__symbol-fx-5dp-eurusd-01.pine +0 -0
  101. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/futures__symbol-futures-pointvalue-es-01.pine +0 -0
  102. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/tutorial__macd__strategy.pine +0 -0
  103. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/tutorial__mtf__strategy_htf.pine +0 -0
  104. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/tutorial__mtf__strategy_ltf.pine +0 -0
  105. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/us-equity__symbol-equity-rth-gaps-aapl-01.pine +0 -0
  106. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/us-equity__us-equity-exchange-tz-intraday-cap-01.pine +0 -0
  107. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__analyzer-parity-choch-bos-isolator-01.pine +0 -0
  108. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__analyzer-parity-edge-margin-50-pct-01.pine +0 -0
  109. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__analyzer-parity-percent-of-equity-sizing-01.pine +0 -0
  110. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__analyzer-parity-small-equity-fraction-01.pine +0 -0
  111. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__analyzer-parity-stop-limit-timing-01.pine +0 -0
  112. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__analyzer-self-test-multi-mode-01.pine +0 -0
  113. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__anomaly-equity-mirror-strategy-equity-01.pine +0 -0
  114. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__barstate-isconfirmed-magnifier-off-01b.pine +0 -0
  115. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__barstate-isconfirmed-magnifier-on-01a.pine +0 -0
  116. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-atr-trail-series-int-points-01.pine +0 -0
  117. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-atr-trailing-stop-state-01.pine +0 -0
  118. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-entry-exit-same-pass-attach-01.pine +0 -0
  119. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-exit-stop-limit-trail-same-bar-01.pine +0 -0
  120. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-exit-three-way-set-once-entry-01.pine +0 -0
  121. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-exit-tp-sl-fixed-01.pine +0 -0
  122. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-narrow-stop-limit-with-trail8-01.pine +0 -0
  123. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-partial-exit-qty-percent-01.pine +0 -0
  124. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-same-id-exit-replace-01.pine +0 -0
  125. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-tp-sl-oca-reduce-isolate-01.pine +0 -0
  126. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-trail-points-no-offset-explicit-01.pine +0 -0
  127. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-trail-points-with-offset-only-01.pine +0 -0
  128. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__bracket-trailing-activation-offset-path-01.pine +0 -0
  129. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__cap-max-intraday-filled-orders-isolate-01.pine +0 -0
  130. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__cap-risk-gates-allow-max-intraday-01.pine +0 -0
  131. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-4emarsi-integration-01.pine +0 -0
  132. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-4emarsi-quad-ema-stack-01.pine +0 -0
  133. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-4emarsi-rsi-pullback-latch-01.pine +0 -0
  134. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-4emarsi-session-window-nbar-exit-01.pine +0 -0
  135. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-boscurv-integration-01.pine +0 -0
  136. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-boscurv-linreg-slope-channel-01.pine +0 -0
  137. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-boscurv-pivot-bos-trigger-01.pine +0 -0
  138. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-bracket-cap-range-pending-stop-01.pine +0 -0
  139. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-adx-regime-classify-01.pine +0 -0
  140. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-bb-kc-squeeze-release-01.pine +0 -0
  141. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-cooldown-daily-cap-01.pine +0 -0
  142. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-equity-feedback-sizing-01.pine +0 -0
  143. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-integration-01.pine +0 -0
  144. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-pivot-liquidity-sweep-01.pine +0 -0
  145. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-pressure-gauge-01.pine +0 -0
  146. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-rsi-macd-momentum-01.pine +0 -0
  147. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-ies-three-ema-bias-score-01.pine +0 -0
  148. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kanuck-calc-on-every-tick-01.pine +0 -0
  149. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kanuck-integration-01.pine +0 -0
  150. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kanuck-kama-state-recurrence-01.pine +0 -0
  151. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kanuck-max-bars-back-500-01.pine +0 -0
  152. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kkb-ema-atr-breakout-band-01.pine +0 -0
  153. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kkb-integration-01.pine +0 -0
  154. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kkb-kalman-filter-1d-01.pine +0 -0
  155. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-kkb-margin-100-pct-01.pine +0 -0
  156. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-liqsweep-integration-01.pine +0 -0
  157. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-liqsweep-pivot-hh-ll-01.pine +0 -0
  158. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-liqsweep-wait-one-continuation-01.pine +0 -0
  159. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-liqsweep-wick-pierce-close-back-01.pine +0 -0
  160. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-marketshift-integration-01.pine +0 -0
  161. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-marketshift-pivot-state-machine-01.pine +0 -0
  162. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-marketshift-rolling-highest-lowest-01.pine +0 -0
  163. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-marketshift-state-edge-detector-01.pine +0 -0
  164. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-scalping-fast-ma-cross-trigger-01.pine +0 -0
  165. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-scalping-integration-01.pine +0 -0
  166. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-scalping-tight-tp-sl-points-01.pine +0 -0
  167. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-trendmaster-integration-01.pine +0 -0
  168. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-trendmaster-line-new-projection-01.pine +0 -0
  169. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-trendmaster-pivot-anchored-bracket-01.pine +0 -0
  170. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-trendmaster-three-tier-ema-state-01.pine +0 -0
  171. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-trendmaster-trend-momentum-structure-gate-01.pine +0 -0
  172. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-cumulative-volume-delta-01.pine +0 -0
  173. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-fvg-active-zones-01.pine +0 -0
  174. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-integration-01.pine +0 -0
  175. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-manual-adx-regime-01.pine +0 -0
  176. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-pivot-strength-5-01.pine +0 -0
  177. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-rsi-smooth-divergence-01.pine +0 -0
  178. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-session-tz-newyork-01.pine +0 -0
  179. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-vcp-vol-zscore-anomaly-01.pine +0 -0
  180. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-wunderscalper-alert-templates-01.pine +0 -0
  181. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-wunderscalper-explicit-reverse-01.pine +0 -0
  182. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__composite-wunderscalper-integration-01.pine +0 -0
  183. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__input-source-runtime-override-high-01.pine +0 -0
  184. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__input-source-subscript-hl2-01.pine +0 -0
  185. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ltf-bool-array-bull-majority-01.pine +0 -0
  186. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ltf-numeric-float-ratio15-01.pine +0 -0
  187. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__magnifier-tick-dist-endpoints-01.pine +0 -0
  188. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__magnifier-tick-dist-endpoints-rsi-cross-08a.pine +0 -0
  189. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__magnifier-tick-dist-volume-weighted-on-01.pine +0 -0
  190. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__matrix-bool-mask-explicit-utc-tz-01.pine +0 -0
  191. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__matrix-bool-mask-no-transpose-01.pine +0 -0
  192. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__matrix-bool-mask-transpose-roundtrip-01.pine +0 -0
  193. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__matrix-bool-regime-mask-24x7-01.pine +0 -0
  194. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__matrix-covariance-eigen-pca-01.pine +0 -0
  195. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__matrix-eigen-rank-deficient-cov-01.pine +0 -0
  196. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__max-bars-back-function-call-deep-history-01.pine +0 -0
  197. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-daily-array-median-percentrank-01.pine +0 -0
  198. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-daily-ema26-warmup-01.pine +0 -0
  199. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-daily-prev-high-break-01.pine +0 -0
  200. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-dual-tf-60-240-rising-01.pine +0 -0
  201. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-60-close-change-baseline-01.pine +0 -0
  202. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-60-close-roll-01.pine +0 -0
  203. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-60-gaps-on-roll-01.pine +0 -0
  204. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-60-rsi14-inside-security-01.pine +0 -0
  205. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-60-sma20-inside-security-01.pine +0 -0
  206. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-60-volume-spike-01.pine +0 -0
  207. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-confluence-manual-trail-01.pine +0 -0
  208. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-confluence-static-bracket-01.pine +0 -0
  209. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-htf-weekly-sma-cross-01.pine +0 -0
  210. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-roll-state-60-240-d-minimal-01.pine +0 -0
  211. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-triple-tf-close-confluence-01.pine +0 -0
  212. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__mtf-triple-tf-macd-hist-confluence-01.pine +0 -0
  213. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__na-deep-history-int-na-01.pine +0 -0
  214. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__na-nz-fixnan-history-chain-01.pine +0 -0
  215. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__oca-exit-bracket-internal-cancel-01.pine +0 -0
  216. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__oca-multi-bracket-isolation-01.pine +0 -0
  217. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__oca-raw-strategy-order-reduce-01.pine +0 -0
  218. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-close-all-cancel-all-01.pine +0 -0
  219. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-close-immediate-vs-next-bar-01.pine +0 -0
  220. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-cross-entry-cancel-same-pass-01.pine +0 -0
  221. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-cross-entry-close-same-pass-01.pine +0 -0
  222. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-cross-exit-close-same-pass-01.pine +0 -0
  223. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-deferred-flip-guaranteed-gap-stops-01.pine +0 -0
  224. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-deferred-flip-pooc-cross-bar-01.pine +0 -0
  225. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-four-bar-stop-no-close-01.pine +0 -0
  226. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-side-same-id-stop-no-cancel-01.pine +0 -0
  227. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-both-touch-priority-01.pine +0 -0
  228. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-cancel-rotation-01.pine +0 -0
  229. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-far-only-01.pine +0 -0
  230. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-near-only-01.pine +0 -0
  231. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-open-high-first-path-01.pine +0 -0
  232. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-open-low-first-path-01.pine +0 -0
  233. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-open-tie-01.pine +0 -0
  234. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-source-order-long-first-01.pine +0 -0
  235. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-dual-stop-source-order-short-first-01.pine +0 -0
  236. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-entry-implicit-reversal-exit-01.pine +0 -0
  237. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-flip-stop-no-paired-close-01.pine +0 -0
  238. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-market-close-fill-basis-01.pine +0 -0
  239. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-one-side-four-bar-far-opposite-01.pine +0 -0
  240. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-opposite-entry-close-same-pass-01.pine +0 -0
  241. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-percent-equity-cash-commission-01.pine +0 -0
  242. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-process-on-close-false-01.pine +0 -0
  243. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-process-on-close-true-01.pine +0 -0
  244. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-range-expansion-pending-stop-01.pine +0 -0
  245. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-entry-close-same-bar-01.pine +0 -0
  246. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-market-entry-repeat-01.pine +0 -0
  247. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-stop-after-flat-01.pine +0 -0
  248. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-stop-cross-before-modify-01.pine +0 -0
  249. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-stop-minute-zero-01.pine +0 -0
  250. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-stop-modification-01.pine +0 -0
  251. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-stop-raise-only-01.pine +0 -0
  252. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-same-id-stop-window-four-bars-01.pine +0 -0
  253. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-stale-stop-after-close-no-cancel-01.pine +0 -0
  254. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-stop-cancel-no-regime-close-01.pine +0 -0
  255. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-stop-entry-cancel-opposite-01.pine +0 -0
  256. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-stop-entry-reversal-grouping-01.pine +0 -0
  257. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__order-stop-entry-touch-boundary-01.pine +0 -0
  258. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__pyramid-cash-fractional-commission-01.pine +0 -0
  259. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__pyramid-close-id-grouping-01.pine +0 -0
  260. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__pyramid-deferred-flip-close-all-01.pine +0 -0
  261. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__pyramid-flip-stop-pyramiding-2-01.pine +0 -0
  262. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__recompute-alma-sar-corr-magnifier-01.pine +0 -0
  263. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__recompute-mtf-rsi-macd-bb-01.pine +0 -0
  264. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__risk-max-contracts-held-gate-pyramid-01.pine +0 -0
  265. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__session-hour-minute-pulse-filter-01.pine +0 -0
  266. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__session-ny-spring-forward-dst-01.pine +0 -0
  267. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__stats-eventrades-zero-pnl-count-01.pine +0 -0
  268. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-accdist-ema-cross-01.pine +0 -0
  269. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-bb-kc-squeeze-breakout-01.pine +0 -0
  270. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-bb-rsi-mean-reversion-01.pine +0 -0
  271. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-cci-threshold-cross-01.pine +0 -0
  272. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-chandelier-exit-direction-01.pine +0 -0
  273. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-closedtrades-risk-introspection-01.pine +0 -0
  274. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-cmo-9-zero-cross-01.pine +0 -0
  275. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-cog-10-signal-cross-01.pine +0 -0
  276. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-dmi-adx-di-cross-01.pine +0 -0
  277. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-donchian-channel-breakout-01.pine +0 -0
  278. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-dual-ma-switch-dispatch-01.pine +0 -0
  279. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-dual-thrust-open-anchored-range-01.pine +0 -0
  280. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-elder-ray-bull-bear-power-01.pine +0 -0
  281. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-ema-ribbon-stack-transition-01.pine +0 -0
  282. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-engulfing-candle-pattern-01.pine +0 -0
  283. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-highestbars-lowestbars-breakout-01.pine +0 -0
  284. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-hma-55-close-cross-01.pine +0 -0
  285. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-hma-fast-slow-cross-01.pine +0 -0
  286. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-inside-bar-engulfing-01.pine +0 -0
  287. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-kama-style-efficiency-ratio-01.pine +0 -0
  288. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-keltner-channel-break-01.pine +0 -0
  289. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-linreg-stdev-channel-revert-01.pine +0 -0
  290. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-macd-12-26-9-line-signal-cross-01.pine +0 -0
  291. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-macd-histogram-reversal-01.pine +0 -0
  292. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-macd-line-gt-signal-continuous-state-01.pine +0 -0
  293. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-map-regime-threshold-lookup-01.pine +0 -0
  294. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-median-vs-ema-cross-01.pine +0 -0
  295. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-mfi-14-bands-20-80-01.pine +0 -0
  296. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-momentum-roc-zero-cross-01.pine +0 -0
  297. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-multi-indicator-score-composite-01.pine +0 -0
  298. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-nvi-pvi-cross-01.pine +0 -0
  299. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-obv-ema-cross-01.pine +0 -0
  300. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-percentrank-mean-reversion-01.pine +0 -0
  301. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-pivot-array-unshift-pop-01.pine +0 -0
  302. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-pivot-atr-stop-target-01.pine +0 -0
  303. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-pivot-confirmed-break-01.pine +0 -0
  304. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-pivot-point-levels-break-01.pine +0 -0
  305. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-pvt-ema-cross-01.pine +0 -0
  306. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-range-filter-var-band-01.pine +0 -0
  307. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rci-14-zero-cross-01.pine +0 -0
  308. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi-bb-self-bands-01.pine +0 -0
  309. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi-ema-signal-cross-01.pine +0 -0
  310. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi-macd-and-continuous-state-01.pine +0 -0
  311. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi14-bands-30-70-01.pine +0 -0
  312. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi14-cross-50-01.pine +0 -0
  313. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi14-gt-50-continuous-state-01.pine +0 -0
  314. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-rsi14-gt60-lt45-no-matrix-01.pine +0 -0
  315. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-sar-flip-entry-01.pine +0 -0
  316. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-sma-152-close-cross-01.pine +0 -0
  317. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-sma-dual-cross-01.pine +0 -0
  318. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-stdev-sma-expansion-break-01.pine +0 -0
  319. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-stoch-slow-k-d-cross-01.pine +0 -0
  320. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-stochastic-rsi-cross-01.pine +0 -0
  321. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-str-match-regex-filter-01.pine +0 -0
  322. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-supertrend-adx-filter-01.pine +0 -0
  323. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-supertrend-direction-flip-01.pine +0 -0
  324. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-triple-sma-stack-latch-01.pine +0 -0
  325. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-tsi-25-13-signal-cross-01.pine +0 -0
  326. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-volume-spike-atr-breakout-01.pine +0 -0
  327. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-vwma-vs-sma-divergence-01.pine +0 -0
  328. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__ta-wpr-14-bands-01.pine +0 -0
  329. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__timeframe-main-period-self-adaptive-01.pine +0 -0
  330. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-calls-sibling-cumulative-01.pine +0 -0
  331. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-default-param-kwargs-01.pine +0 -0
  332. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-drives-strategy-entry-01.pine +0 -0
  333. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-extra-primitive-args-01.pine +0 -0
  334. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-feeds-strategy-exit-prices-01.pine +0 -0
  335. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-in-for-loop-01.pine +0 -0
  336. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-in-if-else-branch-01.pine +0 -0
  337. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-in-switch-arms-01.pine +0 -0
  338. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-in-while-loop-01.pine +0 -0
  339. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-mutating-self-ref-01.pine +0 -0
  340. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-on-array-element-01.pine +0 -0
  341. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-reads-strategy-state-01.pine +0 -0
  342. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-receives-ta-series-param-01.pine +0 -0
  343. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-scalar-return-01.pine +0 -0
  344. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-tuple-return-destructure-01.pine +0 -0
  345. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-udt-return-from-func-01.pine +0 -0
  346. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-uses-history-globals-01.pine +0 -0
  347. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-uses-math-funcs-01.pine +0 -0
  348. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-uses-na-nz-fixnan-01.pine +0 -0
  349. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-var-instance-streak-01.pine +0 -0
  350. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-method-windowed-method-chain-01.pine +0 -0
  351. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__udt-regime-stack-stress-01.pine +0 -0
  352. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__vwap-bands-breakout-1sigma-01.pine +0 -0
  353. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/gate-corpus/ok/validation__vwap-bands-mean-reversion-2sigma-01.pine +0 -0
  354. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/golden/matrix_eigen_pca.cpp +0 -0
  355. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_analyzer.py +0 -0
  356. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_analyzer_matrix_inference.py +0 -0
  357. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_analyzer_ta_return_types.py +0 -0
  358. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_anchor_tf_change.py +0 -0
  359. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_anchor_time.py +0 -0
  360. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_array_bounds_insert_fill_slice.py +0 -0
  361. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_array_checked_access.py +0 -0
  362. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_array_empty_aggregates.py +0 -0
  363. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_array_terminal_returns.py +0 -0
  364. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_calc_on_order_fills_codegen.py +0 -0
  365. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_callable_series_param_types.py +0 -0
  366. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_callable_ta_forwarded_length.py +0 -0
  367. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_callable_var_first_reach.py +0 -0
  368. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_audit_fixes.py +0 -0
  369. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_determinism.py +0 -0
  370. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_drawing_data.py +0 -0
  371. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_drawing_handles.py +0 -0
  372. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_fallthrough_guards.py +0 -0
  373. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_golden.py +0 -0
  374. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_input_getters.py +0 -0
  375. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_matrix_typed.py +0 -0
  376. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_string_escape.py +0 -0
  377. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_ta_derived_length.py +0 -0
  378. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_ta_finite_choice_length.py +0 -0
  379. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_ta_stable_var_literal.py +0 -0
  380. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_codegen_validation_fixes.py +0 -0
  381. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_collection_scope_isolation.py +0 -0
  382. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_compile_corpus.py +0 -0
  383. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_compile_smoke.py +0 -0
  384. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_errors.py +0 -0
  385. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_extract_inputs.py +0 -0
  386. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_float_relational_runtime.py +0 -0
  387. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_glue_smoke.py +0 -0
  388. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_hungpixi_regressions.py +0 -0
  389. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_import_all.py +0 -0
  390. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_input_time_int64.py +0 -0
  391. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_int64_reassign_promotion.py +0 -0
  392. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_int64_time_storage.py +0 -0
  393. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_lazy_edge_ta_every_bar.py +0 -0
  394. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_lazy_source_clock.py +0 -0
  395. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_lazy_source_clock_runtime.py +0 -0
  396. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_lexer.py +0 -0
  397. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_map_call_diagnostics.py +0 -0
  398. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_map_param_methods.py +0 -0
  399. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_map_terminal_returns.py +0 -0
  400. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_math_sign_na_codegen.py +0 -0
  401. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_matrix_identity_checkpoint.py +0 -0
  402. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_matrix_na_lifecycle.py +0 -0
  403. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_matrix_void_method_return.py +0 -0
  404. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_method_receiver_types.py +0 -0
  405. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_method_written_callsite_lifecycle.py +0 -0
  406. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_na_reassign_retype.py +0 -0
  407. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_na_relational_lowering.py +0 -0
  408. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_official_surface.py +0 -0
  409. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_parser.py +0 -0
  410. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_persistent_callable_owner_state.py +0 -0
  411. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_pinemap_boundaries_and_order.py +0 -0
  412. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_pinemap_cold_followups_history.py +0 -0
  413. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_pinemap_semantics.py +0 -0
  414. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_pinemap_temp_receiver_var.py +0 -0
  415. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_runtime_var_initialization.py +0 -0
  416. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_helper_local_var.py +0 -0
  417. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_lazy_ta_under_conditionals.py +0 -0
  418. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_math_reducer.py +0 -0
  419. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_ohlc_hist_is_complete.py +0 -0
  420. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_ta_input_history_offset.py +0 -0
  421. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_tf_input_derived.py +0 -0
  422. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_tf_literal.py +0 -0
  423. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_security_tuple_interactions.py +0 -0
  424. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_signatures.py +0 -0
  425. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_strategy_close_callsite_tokens.py +0 -0
  426. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker.py +0 -0
  427. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_chart_visible_bar_time.py +0 -0
  428. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_color_cast.py +0 -0
  429. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_const_namespaces.py +0 -0
  430. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_dividends_earnings.py +0 -0
  431. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_footprint.py +0 -0
  432. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_input_color.py +0 -0
  433. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_input_source.py +0 -0
  434. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_matrix.py +0 -0
  435. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_security_adjustment.py +0 -0
  436. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_syminfo_gap_fields.py +0 -0
  437. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_timeframe_from_seconds.py +0 -0
  438. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_varip.py +0 -0
  439. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_support_checker_volume_row.py +0 -0
  440. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_symbols.py +0 -0
  441. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_ta_official_surface.py +0 -0
  442. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_transpile_division.py +0 -0
  443. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_transpile_enum_order.py +0 -0
  444. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_transpile_pf_trace.py +0 -0
  445. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_transpiler_matrix_kwargs.py +0 -0
  446. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_typed_void_method_precedence.py +0 -0
  447. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_typespec_matrix.py +0 -0
  448. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_udf_series_parameter_history.py +0 -0
  449. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_udt_drawing_field_cleanup.py +0 -0
  450. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_udt_lvalue_alias.py +0 -0
  451. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_udt_na_lifecycle.py +0 -0
  452. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_udt_object_identity.py +0 -0
  453. {pineforge_codegen-0.10.3 → pineforge_codegen-0.10.4}/tests/test_unsupported_reporting.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pineforge-codegen
3
- Version: 0.10.3
3
+ Version: 0.10.4
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.10.4
@@ -5973,7 +5973,19 @@ class Analyzer(CallHandlers, DiagnosticsHelper, TypeHelper):
5973
5973
  callee=MemberAccess(object=Identifier(name="ta"), member=node.member),
5974
5974
  args=[], kwargs={},
5975
5975
  )
5976
- return self._handle_ta_call(node.member, synthetic_call)
5976
+ before = len(self._ta_call_sites)
5977
+ result = self._handle_ta_call(node.member, synthetic_call)
5978
+ # The site belongs to THIS read: key it on the AST node the
5979
+ # codegen will meet (the MemberAccess), not on the synthetic
5980
+ # call nobody else holds. Without this a bare ``ta.vwap``
5981
+ # inside request.security() could not find its own site and
5982
+ # was lowered to the first live CHART member (advanced by the
5983
+ # chart bar AND every requested sub-bar, read through
5984
+ # history_advances_new_bar()); a second top-level read bound
5985
+ # to the first read's member as well.
5986
+ if len(self._ta_call_sites) > before:
5987
+ self._ta_call_sites[-1].node = node
5988
+ return result
5977
5989
  return PineType.FLOAT
5978
5990
 
5979
5991
  # math.* properties
@@ -437,9 +437,15 @@ class CallHandlers:
437
437
  all_args = [default_arg]
438
438
 
439
439
  if func_name == "vwap" and not all_args:
440
- default_src = Identifier(name="close")
440
+ # The bare ``ta.vwap`` property is the VWAP of hlc3 (Pine v6
441
+ # reference: "It uses hlc3 as its source series"); TradingView's
442
+ # own read equals hlc3 on a daily bar (lab tv
443
+ # notrade-session-vwap-f1d, NYSE:F 1D 2025-07-01..08-31, 42/42,
444
+ # 2026-09-05), where the engine used to read the bar's close.
445
+ default_src = Identifier(name="hlc3")
441
446
  self._visit(default_src)
442
- self._series_bar_fields.add("close")
447
+ for field in ("high", "low", "close"):
448
+ self._series_bar_fields.add(field)
443
449
  all_args = [default_src]
444
450
 
445
451
  # Handle ta.highest(length) / ta.lowest(length) with 1 arg:
@@ -1914,7 +1914,10 @@ class CodeGen(CallVisitor, ExprVisitor, StmtVisitor, TopLevelEmitter, SecurityEm
1914
1914
  self._collection_types[name] = spec
1915
1915
  elif ns == "array" and fn in ({"new", "from"} | set(ARRAY_NEW_CTORS)):
1916
1916
  self._array_vars.add(name)
1917
- spec = self._type_spec_from_expr(expr) or self._array_spec_for_name(name)
1917
+ spec = self._widen_array_spec_for_name(
1918
+ name,
1919
+ self._type_spec_from_expr(expr) or self._array_spec_for_name(name),
1920
+ )
1918
1921
  self._collection_types[name] = spec
1919
1922
  elif ns == "map" and fn == "new":
1920
1923
  self._map_vars.add(name)
@@ -1934,7 +1937,10 @@ class CodeGen(CallVisitor, ExprVisitor, StmtVisitor, TopLevelEmitter, SecurityEm
1934
1937
  fn2, ns2 = self._resolve_callee(expr.callee)
1935
1938
  if ns2 == "array" and fn2 in ({"new", "from"} | set(ARRAY_NEW_CTORS)):
1936
1939
  self._array_vars.add(name)
1937
- spec2 = self._type_spec_from_expr(expr) or self._array_spec_for_name(name)
1940
+ spec2 = self._widen_array_spec_for_name(
1941
+ name,
1942
+ self._type_spec_from_expr(expr) or self._array_spec_for_name(name),
1943
+ )
1938
1944
  self._collection_types[name] = spec2
1939
1945
  continue
1940
1946
  if name in self._matrix_specs:
@@ -4275,7 +4281,9 @@ class CodeGen(CallVisitor, ExprVisitor, StmtVisitor, TopLevelEmitter, SecurityEm
4275
4281
  )
4276
4282
  ):
4277
4283
  self._array_vars.add(name)
4278
- array_spec = exact_member_spec or self._array_spec_for_name(name)
4284
+ array_spec = self._widen_array_spec_for_name(
4285
+ name, exact_member_spec or self._array_spec_for_name(name)
4286
+ )
4279
4287
  lines.append(
4280
4288
  f" {self._type_spec_to_cpp(array_spec)} {safe};"
4281
4289
  )
@@ -89,6 +89,7 @@ from ..analyzer import FuncInfo
89
89
  from ..symbols import PineType, method_receiver_cpp_token
90
90
  from .tables import (
91
91
  BAR_SERIES_PUSH,
92
+ TA_CHART_PREV_CLOSE_ARG,
92
93
  DRAWING_TYPE_TO_CPP,
93
94
  PINE_TYPE_TO_CPP,
94
95
  RUNTIME_REGISTER_SECURITY_EVAL_FN,
@@ -1035,6 +1036,11 @@ class TopLevelEmitter:
1035
1036
  # declaration statements, not in the global on_bar preamble.
1036
1037
  if name in getattr(self, "_func_local_var_names", ()):
1037
1038
  continue
1039
+ # A wide int array member (``std::vector<int64_t>``, see
1040
+ # ``_wide_int_array_names``) needs its first-bar constructor
1041
+ # spelled with the same element type: name the target for
1042
+ # visit_call's ``array.new_*`` / ``array.from`` lowering.
1043
+ self._array_ctor_target_name = name
1038
1044
  safe = self._safe_name(name)
1039
1045
  runtime_info = self._runtime_scalar_var_init_by_member.get(name)
1040
1046
  if (runtime_info is not None
@@ -1131,6 +1137,7 @@ class TopLevelEmitter:
1131
1137
  if cloned not in init_emitted:
1132
1138
  init_emitted.add(cloned)
1133
1139
  lines.append(f" {cloned}.push({cpp_val});")
1140
+ self._array_ctor_target_name = None
1134
1141
  lines.append(" _var_initialized = true;")
1135
1142
  lines.append(" } else {")
1136
1143
  for name, _, _ in self.ctx.var_members:
@@ -1976,6 +1983,14 @@ class TopLevelEmitter:
1976
1983
  if self._ta_site_uses_precalc(site):
1977
1984
  compute_args = self._ta_compute_args_for_site(site)
1978
1985
  compute_args_bars = compute_args.replace("current_bar_.", "bars[i].")
1986
+ # issue #178: the precalc pre-pass walks the bar array
1987
+ # itself, so the previous CHART close is bars[i - 1]
1988
+ # (the engine's prev_chart_close() tracker only advances
1989
+ # at on_bar dispatch).
1990
+ compute_args_bars = compute_args_bars.replace(
1991
+ TA_CHART_PREV_CLOSE_ARG,
1992
+ "(i > 0 ? bars[i - 1].close : na<double>())",
1993
+ )
1979
1994
  lines.append(f" _precalc_{site.member_name}[i] = {site.member_name}.compute({compute_args_bars});")
1980
1995
  finally:
1981
1996
  self._precalc_loop_active = False
@@ -31,7 +31,12 @@ from ..ast_nodes import (
31
31
  Ternary, TupleAssign, TupleLiteral, TypeDecl, TypeField, UnaryOp, VarDecl,
32
32
  WhileStmt,
33
33
  )
34
- from .tables import TA_IMPLICIT_APPEND, TA_IMPLICIT_COMPUTE_FULL
34
+ from .tables import (
35
+ TA_CHART_PREV_CLOSE,
36
+ TA_CHART_PREV_CLOSE_ARG,
37
+ TA_IMPLICIT_APPEND,
38
+ TA_IMPLICIT_COMPUTE_FULL,
39
+ )
35
40
 
36
41
  if TYPE_CHECKING:
37
42
  from ..analyzer import TACallSite
@@ -113,6 +118,10 @@ class TaSiteHelper:
113
118
 
114
119
  if ta_name in TA_IMPLICIT_COMPUTE_FULL:
115
120
  implicit = TA_IMPLICIT_COMPUTE_FULL[ta_name]
121
+ # issue #178: chart-context atr / tr take the previous CHART
122
+ # bar's close as a 4th argument (see TA_CHART_PREV_CLOSE).
123
+ if ta_name in TA_CHART_PREV_CLOSE:
124
+ implicit = f"{implicit}, {TA_CHART_PREV_CLOSE_ARG}"
116
125
  if site.compute_args:
117
126
  explicit = ", ".join(self._visit_expr(a) for a in site.compute_args)
118
127
  if ta_name in self._TA_IMPLICIT_REPLACE:
@@ -222,6 +222,18 @@ TA_COMPUTE_ARGS = {
222
222
  "max": [0], "min": [0], "rci": [0],
223
223
  }
224
224
 
225
+ # issue #178: ta.atr / ta.tr read their true range against the previous
226
+ # CHART bar's close (close[1]) even when the call site executes sparsely —
227
+ # the RMA advances on the executions only (TradingView pin 2026-09-06,
228
+ # lab tv i178-sparse-atr-sense, BINANCE:BTCUSDT 60: 398/398 executions equal
229
+ # the chart-close model, 0/398 the previous-execution model). The chart
230
+ # context therefore passes ``BacktestEngine::prev_chart_close()`` as the
231
+ # 4th compute() argument (the engine's always-on tracker); the per-object
232
+ # prev_close (3-arg form) remains for request.security contexts, whose
233
+ # ``bar.`` rewrite has no chart-close tracker.
234
+ TA_CHART_PREV_CLOSE = {"atr", "tr"}
235
+ TA_CHART_PREV_CLOSE_ARG = "prev_chart_close()"
236
+
225
237
  # TA functions whose ``.compute()`` always receives bar OHLC implicitly.
226
238
  TA_IMPLICIT_COMPUTE_FULL = {
227
239
  "atr": "current_bar_.high, current_bar_.low, current_bar_.close",
@@ -135,8 +135,9 @@ class TypeInferer:
135
135
  if spec is None:
136
136
  return "double"
137
137
  if spec.kind == "primitive":
138
- return {"float": "double", "int": "int", "bool": "bool",
139
- "string": "std::string", "color": "int"}.get(spec.name or "float", "double")
138
+ return {"float": "double", "int": "int", "int64": "int64_t",
139
+ "bool": "bool", "string": "std::string",
140
+ "color": "int"}.get(spec.name or "float", "double")
140
141
  if spec.kind == "udt" and spec.name:
141
142
  # Drawing handle structs (P1): map BEFORE the _udt_defs check so
142
143
  # array<line> -> std::vector<Line> and scalar line -> Line instead
@@ -269,6 +270,175 @@ class TypeInferer:
269
270
  return self._default_for_type(cpp_type)
270
271
 
271
272
  def _collection_spec_for_name(self, name: str) -> TypeSpec | None:
273
+ """``_collection_spec_for_name_raw`` with the wide-int element applied
274
+ (``_widen_array_spec_for_name``): an ``array<int>`` that stores epoch
275
+ milliseconds resolves as ``std::vector<int64_t>`` everywhere it is
276
+ read, declared or passed."""
277
+ return self._widen_array_spec_for_name(
278
+ name, self._collection_spec_for_name_raw(name)
279
+ )
280
+
281
+ # Element-returning array reads whose result carries the receiver's wide
282
+ # provenance (``_expr_returns_wide_int``).
283
+ _WIDE_ARRAY_ELEMENT_READS = frozenset({
284
+ "get", "first", "last", "pop", "shift", "remove", "max", "min",
285
+ })
286
+ # Writers whose VALUE argument decides whether an int array is wide:
287
+ # name -> (functional-form value index, method-form value index).
288
+ _ARRAY_ELEMENT_WRITERS = {
289
+ "push": (1, 0), "unshift": (1, 0), "set": (2, 1), "insert": (2, 1),
290
+ "fill": (1, 0),
291
+ }
292
+
293
+ @staticmethod
294
+ def _int_fits_int32(value: int) -> bool:
295
+ return -(1 << 31) <= value < (1 << 31)
296
+
297
+ def _pure_int_literal_value(self, node) -> int | None:
298
+ """Exact value of an expression built only from int literals and
299
+ ``+ - *`` / unary minus, else ``None``.
300
+
301
+ Pine ``int`` is 64-bit: ``90 * 24 * 60 * 60 * 1000`` (three months in
302
+ milliseconds) is 7 776 000 000 on TradingView. Emitted as C++ ``int``
303
+ literal arithmetic the same product overflows (wraps to -813 934 592),
304
+ so a ``(time - t0) > threeMonths`` expiry fires on every bar (round 8
305
+ family U: latibonit15 execution-signals-confluence, six lanes; lab tv
306
+ u-lati-levels-nq15 vs the engine, 2026-09-05). Folding the literal
307
+ subtree in Python keeps the exact value; the caller emits it as a
308
+ 64-bit literal only when it does not fit ``int32`` so every in-range
309
+ expression is byte-identical to before.
310
+ """
311
+ if isinstance(node, NumberLiteral):
312
+ return node.value if isinstance(node.value, int) and not isinstance(node.value, bool) else None
313
+ if isinstance(node, UnaryOp) and node.op == "-":
314
+ inner = self._pure_int_literal_value(node.operand)
315
+ return -inner if inner is not None else None
316
+ if isinstance(node, BinOp) and node.op in ("+", "-", "*"):
317
+ left = self._pure_int_literal_value(node.left)
318
+ if left is None:
319
+ return None
320
+ right = self._pure_int_literal_value(node.right)
321
+ if right is None:
322
+ return None
323
+ if node.op == "+":
324
+ return left + right
325
+ if node.op == "-":
326
+ return left - right
327
+ return left * right
328
+ return None
329
+
330
+ def _literal_overflows_int32(self, node) -> bool:
331
+ value = self._pure_int_literal_value(node)
332
+ return value is not None and not self._int_fits_int32(value)
333
+
334
+ def _array_receiver_and_value(self, call):
335
+ """``(receiver_name, value_node)`` of an element-writing array call in
336
+ either form (``array.push(a, v)`` / ``a.push(v)``), else ``None``."""
337
+ if not isinstance(call, FuncCall):
338
+ return None
339
+ func_name, namespace = self._resolve_callee(call.callee)
340
+ if func_name not in self._ARRAY_ELEMENT_WRITERS:
341
+ return None
342
+ functional_idx, method_idx = self._ARRAY_ELEMENT_WRITERS[func_name]
343
+ if namespace == "array":
344
+ receiver = call.args[0] if call.args else call.kwargs.get("id")
345
+ value = (call.args[functional_idx]
346
+ if len(call.args) > functional_idx
347
+ else call.kwargs.get("value"))
348
+ elif (isinstance(call.callee, MemberAccess)
349
+ and isinstance(call.callee.object, Identifier)):
350
+ receiver = call.callee.object
351
+ value = (call.args[method_idx]
352
+ if len(call.args) > method_idx
353
+ else call.kwargs.get("value"))
354
+ else:
355
+ return None
356
+ if not isinstance(receiver, Identifier) or value is None:
357
+ return None
358
+ return receiver.name, value
359
+
360
+ def _wide_int_array_names(self) -> set[str]:
361
+ """Names of int arrays that hold a wide integer: one that receives an
362
+ epoch-millisecond value (``time``, ``time_close``, ``timestamp(...)``,
363
+ a wide callable result, ...) through ``array.push`` / ``unshift`` /
364
+ ``set`` / ``insert`` / ``fill``, or is built by ``array.new_int`` /
365
+ ``array.new<int>`` / ``array.from`` from one. Their element type is
366
+ ``int64_t`` (TypeSpec primitive ``int64``): Pine's ``int`` holds the
367
+ epoch, ``std::vector<int>`` truncates it. Cached on the instance."""
368
+ cached = getattr(self, "_wide_int_array_cache", None)
369
+ if cached is not None:
370
+ return cached
371
+ # The scan below asks ``_expr_returns_wide_int``, whose receiver typing
372
+ # resolves collection specs through ``_collection_spec_for_name`` and so
373
+ # back here: publish the (growing) set first so the recursion reads the
374
+ # partial answer instead of re-entering, then iterate to the fixpoint so
375
+ # an array filled from another wide array's elements widens too.
376
+ names: set[str] = set()
377
+ self._wide_int_array_cache = names
378
+
379
+ def scan(nodes, owner_info):
380
+ for child in nodes:
381
+ if isinstance(child, FuncCall):
382
+ pair = self._array_receiver_and_value(child)
383
+ if pair is not None and self._expr_returns_wide_int(
384
+ pair[1], owner_info, set(), None
385
+ ):
386
+ names.add(pair[0])
387
+ continue
388
+ target = None
389
+ value = None
390
+ if isinstance(child, VarDecl):
391
+ target, value = child.name, child.value
392
+ elif (isinstance(child, Assignment)
393
+ and isinstance(child.target, Identifier)):
394
+ target, value = child.target.name, child.value
395
+ if target is None or not isinstance(value, FuncCall):
396
+ continue
397
+ fn, ns = self._resolve_callee(value.callee)
398
+ if ns != "array":
399
+ continue
400
+ candidates = []
401
+ if fn in ("new_int", "new"):
402
+ if fn == "new":
403
+ targs = (self._template_args_from_call(value)
404
+ if hasattr(value, "annotations") else [])
405
+ if not targs or targs[0] != "int":
406
+ continue
407
+ if len(value.args) > 1:
408
+ candidates.append(value.args[1])
409
+ if "initial_value" in value.kwargs:
410
+ candidates.append(value.kwargs["initial_value"])
411
+ elif fn == "from":
412
+ candidates = list(value.args)
413
+ if any(self._expr_returns_wide_int(c, owner_info, set(), None)
414
+ for c in candidates):
415
+ names.add(target)
416
+
417
+ ast = getattr(self.ctx, "ast", None)
418
+ for _round in range(8):
419
+ before = len(names)
420
+ if ast is not None:
421
+ scan(self._walk_ast(ast), None)
422
+ for info in getattr(self.ctx, "func_infos", ()):
423
+ node = getattr(info, "node", None)
424
+ if node is not None:
425
+ scan(self._walk_ast_list(node.body), info)
426
+ if len(names) == before:
427
+ break
428
+ return names
429
+
430
+ def _widen_array_spec_for_name(self, name, spec):
431
+ """``array<int>`` -> ``array<int64>`` when ``name`` is a wide int
432
+ array; every other spec (and ``None``) passes through unchanged."""
433
+ if (spec is None or spec.kind != "array" or spec.element is None
434
+ or spec.element.kind != "primitive"
435
+ or spec.element.name != "int"):
436
+ return spec
437
+ if name in self._wide_int_array_names():
438
+ return TypeSpec.array(TypeSpec.primitive("int64"))
439
+ return spec
440
+
441
+ def _collection_spec_for_name_raw(self, name: str) -> TypeSpec | None:
272
442
  """Resolve collection metadata with lexical precedence.
273
443
 
274
444
  Source-ordered callable locals shadow loop bindings and parameters once
@@ -417,7 +587,9 @@ class TypeInferer:
417
587
  return TypeSpec.primitive("string")
418
588
  if node.op == "/" or left.name == "float" or right.name == "float":
419
589
  return TypeSpec.primitive("float")
420
- if left.name == "int" and right.name == "int":
590
+ if left.name in ("int", "int64") and right.name in ("int", "int64"):
591
+ if "int64" in (left.name, right.name):
592
+ return TypeSpec.primitive("int64")
421
593
  return TypeSpec.primitive("int")
422
594
  return None
423
595
  spec = self._type_spec_from_expr(node)
@@ -976,7 +1148,7 @@ class TypeInferer:
976
1148
  "percentrank", "abs", "standardize", "covariance", "binary_search",
977
1149
  "binary_search_leftmost", "binary_search_rightmost", "sort_indices",
978
1150
  }
979
- if method in numeric_only and elem_cpp not in ("double", "int"):
1151
+ if method in numeric_only and elem_cpp not in ("double", "int", "int64_t"):
980
1152
  self._codegen_error(
981
1153
  None,
982
1154
  f"array.{method} requires a numeric array",
@@ -1187,7 +1359,7 @@ class TypeInferer:
1187
1359
  # truly untyped slot may consult the per-callsite specialization map.
1188
1360
  spec = declared_spec
1189
1361
  if spec is not None and spec.kind == "primitive":
1190
- if spec.name == "int":
1362
+ if spec.name in ("int", "int64"):
1191
1363
  return "int64_t"
1192
1364
  if spec.name == "bool":
1193
1365
  return "bool"
@@ -1217,7 +1389,7 @@ class TypeInferer:
1217
1389
  specs = list(getattr(func_info, "param_type_specs", ()) or ())
1218
1390
  spec = specs[index] if index < len(specs) else None
1219
1391
  if spec is not None and spec.kind == "primitive":
1220
- if spec.name == "int":
1392
+ if spec.name in ("int", "int64"):
1221
1393
  return "int64_t"
1222
1394
  if spec.name == "bool":
1223
1395
  return "bool"
@@ -1352,8 +1524,25 @@ class TypeInferer:
1352
1524
  return self._expr_is_int64_builtin(expr)
1353
1525
  if self._expr_is_int64_builtin(expr):
1354
1526
  return True
1527
+ if isinstance(expr, (BinOp, UnaryOp)) and self._literal_overflows_int32(expr):
1528
+ # ``90 * 24 * 60 * 60 * 1000``: an int-literal product beyond
1529
+ # int32 is a 64-bit value in Pine (``_pure_int_literal_value``).
1530
+ return True
1355
1531
  if isinstance(expr, FuncCall):
1356
1532
  func_name, namespace = self._resolve_callee(expr.callee)
1533
+ if func_name in self._WIDE_ARRAY_ELEMENT_READS:
1534
+ # An element read off a wide int array (``array.get(times, i)``
1535
+ # / ``times.get(i)``) carries the epoch: the destination must
1536
+ # not narrow it (``_wide_int_array_names``).
1537
+ receiver = None
1538
+ if namespace == "array":
1539
+ receiver = expr.args[0] if expr.args else expr.kwargs.get("id")
1540
+ elif (isinstance(expr.callee, MemberAccess)
1541
+ and isinstance(expr.callee.object, Identifier)):
1542
+ receiver = expr.callee.object
1543
+ if (isinstance(receiver, Identifier)
1544
+ and receiver.name in self._wide_int_array_names()):
1545
+ return True
1357
1546
  if namespace is None and func_name in {
1358
1547
  "int",
1359
1548
  "float",
@@ -1555,6 +1555,12 @@ class CallVisitor:
1555
1555
  if namespace == "array":
1556
1556
  if func_name in ("new", "new_float", "new_int", "new_bool", "new_string") or func_name in ARRAY_DRAWING_NEW_CTORS:
1557
1557
  spec = self._type_spec_from_expr(node) or TypeSpec.array(TypeSpec.primitive("float"))
1558
+ # The constructor of a wide int array (``_wide_int_array_names``)
1559
+ # must spell the declared ``std::vector<int64_t>``: the
1560
+ # declaration site names its target here.
1561
+ target = getattr(self, "_array_ctor_target_name", None)
1562
+ if target is not None:
1563
+ spec = self._widen_array_spec_for_name(target, spec)
1558
1564
  cpp_type = self._type_spec_to_cpp(spec)
1559
1565
  elem_spec = spec.element if spec.element is not None else TypeSpec.primitive("float")
1560
1566
  init_default = self._default_for_spec(elem_spec)
@@ -1568,6 +1574,9 @@ class CallVisitor:
1568
1574
  return f"{cpp_type}()"
1569
1575
  if func_name == "from":
1570
1576
  spec = self._type_spec_from_expr(node) or TypeSpec.array(TypeSpec.primitive("float"))
1577
+ target = getattr(self, "_array_ctor_target_name", None)
1578
+ if target is not None:
1579
+ spec = self._widen_array_spec_for_name(target, spec)
1571
1580
  elems = ", ".join(self._visit_expr(a) for a in node.args)
1572
1581
  return f"{self._type_spec_to_cpp(spec)}{{{elems}}}"
1573
1582
  # Method calls: array.method(arr, args...)
@@ -673,26 +673,40 @@ class ExprVisitor:
673
673
  # to dead ``f5``'s first-in-order ``_ta_vwap_10`` and emitted
674
674
  # ``use of undeclared identifier '_ta_vwap_10'``. A live read
675
675
  # must bind to a live site.
676
- for _i, site in enumerate(self.ctx.ta_call_sites):
677
- if _i in self._dead_ta_indices:
676
+ # The read's OWN site first (the analyzer keys the
677
+ # synthetic call-site on this MemberAccess node), so two
678
+ # bare reads are two sites, each advanced once per bar;
679
+ # the first-live-site scan below stays as the fallback.
680
+ _own = self._get_ta_site(node)
681
+ _candidates = (
682
+ [(self._ta_index_by_site_id.get(id(_own)), _own)]
683
+ if _own is not None else []
684
+ ) + list(enumerate(self.ctx.ta_call_sites))
685
+ for _i, site in _candidates:
686
+ if _i is None or _i in self._dead_ta_indices:
678
687
  continue
679
688
  ta_short = site.class_name.split("::")[-1].lower()
680
689
  if site.member_name.startswith(f"_ta_{node.member}_"):
681
690
  if node.member == "vwap":
682
691
  # Same implicit tail as TA_IMPLICIT_APPEND["vwap"]:
683
692
  # the symbol clock keys the Daily anchor reset.
693
+ # The bare property is the VWAP of hlc3 (Pine
694
+ # v6 reference; lab tv notrade-session-vwap-f1d,
695
+ # 2026-09-05: TradingView's read equals hlc3 on
696
+ # a daily bar), never of the close.
697
+ _hlc3 = "((current_bar_.high + current_bar_.low + current_bar_.close) / 3.0)"
684
698
  return (
685
- f"(history_advances_new_bar() ? {site.member_name}.compute("
686
- "current_bar_.close, current_bar_.volume, current_bar_.timestamp"
699
+ f"(history_advances_new_bar() ? {self._ta_member_name(site)}.compute("
700
+ f"{_hlc3}, current_bar_.volume, current_bar_.timestamp"
687
701
  " PF_VWAP_SESSION_ANCHOR_ARGS(syminfo_.timezone, syminfo_.session)) "
688
- f": {site.member_name}.recompute(current_bar_.close, "
702
+ f": {self._ta_member_name(site)}.recompute({_hlc3}, "
689
703
  "current_bar_.volume, current_bar_.timestamp"
690
704
  " PF_VWAP_SESSION_ANCHOR_ARGS(syminfo_.timezone, syminfo_.session)))"
691
705
  )
692
706
  return (
693
- f"(history_advances_new_bar() ? {site.member_name}.compute("
707
+ f"(history_advances_new_bar() ? {self._ta_member_name(site)}.compute("
694
708
  f"{TA_IMPLICIT_COMPUTE_FULL[node.member]}) : "
695
- f"{site.member_name}.recompute("
709
+ f"{self._ta_member_name(site)}.recompute("
696
710
  f"{TA_IMPLICIT_COMPUTE_FULL[node.member]}))"
697
711
  )
698
712
  # No registered call site for this TA property read —
@@ -1037,6 +1051,13 @@ class ExprVisitor:
1037
1051
  return f"({left_cpp} {op} {right_cpp})"
1038
1052
 
1039
1053
  def _visit_binop(self, node: BinOp) -> str:
1054
+ # An int-literal-only ``+ - *`` tree whose exact value leaves int32 is
1055
+ # a 64-bit Pine int (``90 * 24 * 60 * 60 * 1000`` = 7 776 000 000);
1056
+ # C++ ``int`` literal arithmetic would wrap it. Fold it here and spell
1057
+ # the value as a 64-bit literal. In-range trees are emitted as before.
1058
+ folded = self._pure_int_literal_value(node)
1059
+ if folded is not None and not self._int_fits_int32(folded):
1060
+ return f"static_cast<int64_t>({folded}LL)"
1040
1061
  left = self._visit_expr(node.left)
1041
1062
  right = self._visit_expr(node.right)
1042
1063
  cpp_ops = {"and": "&&", "or": "||"}
@@ -495,6 +495,11 @@ class StmtVisitor:
495
495
  )
496
496
  previous_input_name = self._current_input_var_name
497
497
  self._current_input_var_name = node.name
498
+ # A ``var`` int array that stores epoch milliseconds is declared
499
+ # ``std::vector<int64_t>``; its one-shot constructor here must
500
+ # spell the same type (visit_call array.new_* / array.from).
501
+ previous_ctor_target = getattr(self, "_array_ctor_target_name", None)
502
+ self._array_ctor_target_name = node.name
498
503
  try:
499
504
  type_spec = info.get("type_spec")
500
505
  target_cpp_type = info.get("drawing_cpp")
@@ -535,6 +540,7 @@ class StmtVisitor:
535
540
  init_cpp = self._visit_expr(node.value)
536
541
  finally:
537
542
  self._current_input_var_name = previous_input_name
543
+ self._array_ctor_target_name = previous_ctor_target
538
544
  if info.get("drawing_cpp") is None:
539
545
  init_cpp = self._typed_na_init(
540
546
  init_cpp, member_name, info["ptype"]
@@ -618,13 +624,19 @@ class StmtVisitor:
618
624
  func_name, namespace = self._resolve_callee(node.value.callee)
619
625
  if namespace == "array" and func_name in ARRAY_NEW_CTORS | {"new", "from", "copy", "slice"}:
620
626
  captured = self._callable_collection_bindings.get(id(node))
621
- spec = (
627
+ spec = self._widen_array_spec_for_name(
628
+ node.name,
622
629
  captured
623
630
  if captured is not None and captured.kind == "array"
624
631
  else self._type_spec_from_expr(node.value)
625
- or self._array_spec_for_name(node.name)
632
+ or self._array_spec_for_name(node.name),
626
633
  )
627
- init = self._visit_expr(node.value)
634
+ previous_target = getattr(self, "_array_ctor_target_name", None)
635
+ self._array_ctor_target_name = node.name
636
+ try:
637
+ init = self._visit_expr(node.value)
638
+ finally:
639
+ self._array_ctor_target_name = previous_target
628
640
  self._array_vars.add(node.name)
629
641
  self._collection_types.setdefault(node.name, spec)
630
642
  cpp_type = self._type_spec_to_cpp(spec)
@@ -75,7 +75,9 @@ def method_receiver_type_name(spec: TypeSpec | None) -> str | None:
75
75
  if spec is None:
76
76
  return None
77
77
  if spec.kind in {"primitive", "udt"}:
78
- return spec.name
78
+ # A wide (epoch-millisecond) element is still Pine ``int`` to the
79
+ # source: a user method declared on ``array<int>`` binds to it.
80
+ return "int" if spec.name == "int64" else spec.name
79
81
  if spec.kind == "array" and spec.element is not None:
80
82
  element = method_receiver_type_name(spec.element)
81
83
  return f"array<{element}>" if element is not None else None
@@ -106,7 +108,7 @@ def method_receiver_cpp_token(
106
108
 
107
109
  if spec is not None:
108
110
  if spec.kind in {"primitive", "udt"} and spec.name:
109
- return spec.name
111
+ return "int" if spec.name == "int64" else spec.name
110
112
  if spec.kind == "array" and spec.element is not None:
111
113
  return f"array_{method_receiver_cpp_token(spec.element)}"
112
114
  if spec.kind == "map" and spec.key is not None and spec.value is not None:
@@ -52,11 +52,13 @@ def test_ta_vwap_precalc_path_threads_symbol_clock():
52
52
 
53
53
 
54
54
  def test_ta_vwap_bare_property_read_threads_symbol_clock():
55
+ # The bare property is the VWAP of hlc3 (tests/test_vwap_property_source.py).
55
56
  cpp = transpile(_pine("v = ta.vwap\nw = ta.vwap"))
56
- calls = [c for c in _calls(cpp, "compute") if "current_bar_.close" in c and "vwap" in c]
57
+ hlc3 = "((current_bar_.high + current_bar_.low + current_bar_.close) / 3.0)"
58
+ calls = [c for c in _calls(cpp, "compute") if hlc3 in c and "vwap" in c]
57
59
  assert calls, cpp
58
60
  for call in calls:
59
- assert "current_bar_.close, current_bar_.volume, current_bar_.timestamp " + SYM_TAIL in call, call
61
+ assert hlc3 + ", current_bar_.volume, current_bar_.timestamp " + SYM_TAIL in call, call
60
62
 
61
63
 
62
64
  def test_ta_vwap_bands_form_threads_symbol_clock():
@@ -168,7 +168,7 @@ x = ta.tr(false)
168
168
  assert re.search(r"_ta_tr_\d+\(false\)", cpp), cpp
169
169
  # Compute is invoked with the bar OHLC implicitly threaded in.
170
170
  assert (
171
- "_ta_tr_1.compute(current_bar_.high, current_bar_.low, current_bar_.close)"
171
+ "_ta_tr_1.compute(current_bar_.high, current_bar_.low, current_bar_.close, prev_chart_close())"
172
172
  in cpp
173
173
  )
174
174