pineforge-codegen 0.7.4__py3-none-any.whl → 0.7.6__py3-none-any.whl

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.
@@ -611,17 +611,27 @@ class TopLevelEmitter:
611
611
  lines.append(" static_cast<MagnifierDistribution>(magnifier_dist));")
612
612
  else:
613
613
  # The magnifier-aware run() overload handles ratio=1 (no
614
- # aggregation) and empty itf/stf (auto-detect) on its own, so
615
- # we only need to fall back to the simple ``run(bars, n)``
616
- # path when the caller explicitly opted out of magnifier AND
617
- # there is no timeframe aggregation in play. Previously the
618
- # short-circuit ``itf.empty() || stf.empty() || itf == stf``
619
- # silently dropped the bar_magnifier flag whenever the host
620
- # passed empty TFs (the validator's default) turning every
621
- # magnifier-opt-in run into a non-magnifier run and producing
622
- # 0.21% exit-price drift on the magnifier-distribution probes.
614
+ # aggregation), empty itf (auto-detect from bar timestamps),
615
+ # and empty stf (default-to-input) entirely on its own, so we
616
+ # route through it whenever ANY TF/magnifier knob is set. We
617
+ # only fall back to the simple ``run(bars, n)`` path when the
618
+ # caller passed NO magnifier AND NO timeframe at all.
619
+ #
620
+ # The previous guard ``(!itf.empty() && !stf.empty() && itf != stf)``
621
+ # required BOTH timeframes to be present before aggregating.
622
+ # The cloud caller passes ``input_tf=""`` (auto-detect) with a
623
+ # concrete ``script_tf="240"``; that made the guard false and
624
+ # the chosen ``script_tf`` was silently ignored — the strategy
625
+ # ran on raw 1m bars with no aggregation. It also dropped the
626
+ # bar_magnifier flag whenever the host passed empty TFs,
627
+ # producing 0.21% exit-price drift on the magnifier probes.
628
+ #
629
+ # Over-approximating to ``!itf.empty() || !stf.empty()`` is
630
+ # always correct: the TF-aware overload is a no-op when the
631
+ # ratio resolves to 1, so the only thing lost in that case is
632
+ # the precalc optimization — never correctness.
623
633
  lines.append(" bool needs_full_run = (bar_magnifier != 0)")
624
- lines.append(" || (!itf.empty() && !stf.empty() && itf != stf);")
634
+ lines.append(" || !itf.empty() || !stf.empty();")
625
635
  lines.append(" if (!needs_full_run) {")
626
636
  lines.append(" strat->run(bars, n);")
627
637
  lines.append(" } else {")
@@ -865,7 +875,7 @@ class TopLevelEmitter:
865
875
  lines.append(" bool bar_magnifier = false,")
866
876
  lines.append(" int magnifier_samples = 4,")
867
877
  lines.append(" MagnifierDistribution magnifier_dist = MagnifierDistribution::ENDPOINTS) {")
868
- lines.append(" bool needs_dynamic = bar_magnifier || (!input_tf.empty() && !script_tf.empty() && input_tf != script_tf);")
878
+ lines.append(" bool needs_dynamic = bar_magnifier || !input_tf.empty() || !script_tf.empty();")
869
879
  lines.append(" if (needs_dynamic) {")
870
880
  lines.append(" _use_precalc = false;")
871
881
  lines.append(" } else {")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pineforge-codegen
3
- Version: 0.7.4
3
+ Version: 0.7.6
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
@@ -18,7 +18,7 @@ pineforge_codegen/analyzer/tables.py,sha256=KiI3gvYGWBw9PgX_PPXPS-fk8dfH54OjMCMG
18
18
  pineforge_codegen/analyzer/types.py,sha256=HAbEAnxkZxX7d5iFQA6KT0Ocs7kkUprX78z9DMcHVlc,12181
19
19
  pineforge_codegen/codegen/__init__.py,sha256=jvwwf93pqyHnFSvGPcD8Mhr_kAk0Uc4W6IqhKu8UIlI,2232
20
20
  pineforge_codegen/codegen/base.py,sha256=p9Tkh7VTLSTl34i-pyIYOm6PmmonAYOtRgfLKFXHnQo,74019
21
- pineforge_codegen/codegen/emit_top.py,sha256=htpiDaHI9q98ryd9eihKxGmVoZnbqz16vnw6Ax8L028,46076
21
+ pineforge_codegen/codegen/emit_top.py,sha256=dyuLuPh8SoZcxiC3wwa7wVikPMOBY0bFDCq8L2VvoNI,46638
22
22
  pineforge_codegen/codegen/helpers.py,sha256=TIsTUjrri4DobEJ9Cr-rl9s6LILWuKWolROUu1-f4mw,7313
23
23
  pineforge_codegen/codegen/helpers_syminfo.py,sha256=GFrx9i2HXSCmGIpIds0cFrtJ6IQiznfXxH8aI8h3DQ4,4878
24
24
  pineforge_codegen/codegen/input.py,sha256=z-qkYIUrmlU5EW1siUiXdbs7r6eY6-FfLXuKB5F-E1g,15587
@@ -29,7 +29,7 @@ pineforge_codegen/codegen/types.py,sha256=kt2tXtFhFmm4cWBuXnvPHfop-AWIB7drUiKNaD
29
29
  pineforge_codegen/codegen/visit_call.py,sha256=V21US4tHVYg5pHcD5y8Jc9yxghiBcw907TqUtNlE91Y,74801
30
30
  pineforge_codegen/codegen/visit_expr.py,sha256=kXrwIRouG4uo-e0lze23Kat3p5LFSfldgML088s4G_U,36762
31
31
  pineforge_codegen/codegen/visit_stmt.py,sha256=Vgtx_j_xYjH-qntnUlZiyYXIX9oioijN8vmBLrneYcA,38125
32
- pineforge_codegen-0.7.4.dist-info/METADATA,sha256=F5YK4_kjNonb6ItChprZzg83f28xRs3fr-yyJYtKieg,17599
33
- pineforge_codegen-0.7.4.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
34
- pineforge_codegen-0.7.4.dist-info/licenses/LICENSE,sha256=Hf1kZ8OCaQ-nd2i92f2WEX1ZKCc6jqe-rtR4fVENQHY,7186
35
- pineforge_codegen-0.7.4.dist-info/RECORD,,
32
+ pineforge_codegen-0.7.6.dist-info/METADATA,sha256=kMfB_LK0HQAky0x78ptGqCyPsM3sSrZnKGrFd0a_O9k,17599
33
+ pineforge_codegen-0.7.6.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
34
+ pineforge_codegen-0.7.6.dist-info/licenses/LICENSE,sha256=Hf1kZ8OCaQ-nd2i92f2WEX1ZKCc6jqe-rtR4fVENQHY,7186
35
+ pineforge_codegen-0.7.6.dist-info/RECORD,,