pineforge-codegen 0.6.5__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.
Files changed (35) hide show
  1. pineforge_codegen/__init__.py +53 -0
  2. pineforge_codegen/analyzer/__init__.py +60 -0
  3. pineforge_codegen/analyzer/base.py +1563 -0
  4. pineforge_codegen/analyzer/call_handlers.py +895 -0
  5. pineforge_codegen/analyzer/contracts.py +163 -0
  6. pineforge_codegen/analyzer/diagnostics.py +118 -0
  7. pineforge_codegen/analyzer/tables.py +204 -0
  8. pineforge_codegen/analyzer/types.py +250 -0
  9. pineforge_codegen/ast_nodes.py +293 -0
  10. pineforge_codegen/codegen/__init__.py +78 -0
  11. pineforge_codegen/codegen/base.py +1381 -0
  12. pineforge_codegen/codegen/emit_top.py +875 -0
  13. pineforge_codegen/codegen/helpers.py +163 -0
  14. pineforge_codegen/codegen/helpers_syminfo.py +134 -0
  15. pineforge_codegen/codegen/input.py +189 -0
  16. pineforge_codegen/codegen/security.py +1564 -0
  17. pineforge_codegen/codegen/ta.py +298 -0
  18. pineforge_codegen/codegen/tables.py +613 -0
  19. pineforge_codegen/codegen/types.py +573 -0
  20. pineforge_codegen/codegen/visit_call.py +1305 -0
  21. pineforge_codegen/codegen/visit_expr.py +701 -0
  22. pineforge_codegen/codegen/visit_stmt.py +729 -0
  23. pineforge_codegen/errors.py +98 -0
  24. pineforge_codegen/lexer.py +531 -0
  25. pineforge_codegen/parser.py +1198 -0
  26. pineforge_codegen/pragmas.py +117 -0
  27. pineforge_codegen/signatures.py +808 -0
  28. pineforge_codegen/support_checker.py +1111 -0
  29. pineforge_codegen/symbols.py +118 -0
  30. pineforge_codegen/tokens.py +406 -0
  31. pineforge_codegen/tv_input_choices.py +86 -0
  32. pineforge_codegen-0.6.5.dist-info/METADATA +462 -0
  33. pineforge_codegen-0.6.5.dist-info/RECORD +35 -0
  34. pineforge_codegen-0.6.5.dist-info/WHEEL +4 -0
  35. pineforge_codegen-0.6.5.dist-info/licenses/LICENSE +197 -0
@@ -0,0 +1,462 @@
1
+ Metadata-Version: 2.4
2
+ Name: pineforge-codegen
3
+ Version: 0.6.5
4
+ Summary: PineScript v6 to C++ transpiler that targets the pineforge-engine runtime.
5
+ Project-URL: Homepage, https://github.com/pineforge-4pass/pineforge-codegen-oss
6
+ Project-URL: Issues, https://github.com/pineforge-4pass/pineforge-codegen-oss/issues
7
+ Project-URL: Engine, https://github.com/pineforge-4pass/pineforge-engine
8
+ Author-email: PineForge <luis@4pass.com.tw>
9
+ License: PineForge Codegen — License
10
+ ============================
11
+
12
+ Copyright 2025 PineForge <luis@4pass.com.tw>
13
+
14
+ This software is made available under the **PolyForm Noncommercial License
15
+ 1.0.0** (reproduced in full below), as modified by the two supplemental
16
+ sections that follow. In case of any conflict, the supplemental sections
17
+ ("Additional Permission" and "Commercial Use") control over the base license.
18
+
19
+ Required Notice: Copyright 2025 PineForge (https://github.com/pineforge-4pass/pineforge-codegen-oss)
20
+
21
+
22
+ Additional Permission — Personal Trading
23
+ ----------------------------------------
24
+
25
+ Notwithstanding the limitation to noncommercial purposes in the base license,
26
+ the licensor grants you, free of charge, an additional license to use the
27
+ software for **Personal Trading**, and Personal Trading is hereby a permitted
28
+ purpose under the base license — including its Copyright License, Distribution
29
+ License, Changes and New Works License, and Patent License.
30
+
31
+ **Personal Trading** means use of the software by a natural person to research,
32
+ develop, backtest, and execute trades in financial instruments, where:
33
+
34
+ (a) the trades are placed for that same natural person's own account; and
35
+
36
+ (b) the trades are funded solely by that person's own capital.
37
+
38
+ Personal Trading does **not** include, and this Additional Permission does
39
+ **not** cover:
40
+
41
+ (1) managing, advising on, or trading capital belonging to any other person
42
+ or entity, whether or not for a fee;
43
+
44
+ (2) use by, for, or on behalf of any company, fund, partnership, or other
45
+ organization, including use by an individual in the course of work for
46
+ such an organization;
47
+
48
+ (3) embedding the software, or output generated by it, into any product or
49
+ service made available to others; or
50
+
51
+ (4) operating any hosted, software-as-a-service, or otherwise public-facing
52
+ service that uses the software.
53
+
54
+ The use described in (1)–(4) is Commercial Use.
55
+
56
+
57
+ Commercial Use
58
+ --------------
59
+
60
+ Any use that is not a permitted purpose under the base license and is not
61
+ covered by the Additional Permission above — including the uses listed in
62
+ (1)–(4) of that section — requires a separate commercial license from the
63
+ licensor.
64
+
65
+ To obtain a commercial license, contact: luis@4pass.com.tw
66
+
67
+
68
+ ================================================================================
69
+ The remainder of this file is the verbatim text of the PolyForm Noncommercial
70
+ License 1.0.0. Where it differs from the supplemental sections above, the
71
+ supplemental sections control.
72
+ ================================================================================
73
+
74
+
75
+ # PolyForm Noncommercial License 1.0.0
76
+
77
+ <https://polyformproject.org/licenses/noncommercial/1.0.0>
78
+
79
+ ## Acceptance
80
+
81
+ In order to get any license under these terms, you must agree
82
+ to them as both strict obligations and conditions to all
83
+ your licenses.
84
+
85
+ ## Copyright License
86
+
87
+ The licensor grants you a copyright license for the
88
+ software to do everything you might do with the software
89
+ that would otherwise infringe the licensor's copyright
90
+ in it for any permitted purpose. However, you may
91
+ only distribute the software according to [Distribution
92
+ License](#distribution-license) and make changes or new works
93
+ based on the software according to [Changes and New Works
94
+ License](#changes-and-new-works-license).
95
+
96
+ ## Distribution License
97
+
98
+ The licensor grants you an additional copyright license
99
+ to distribute copies of the software. Your license
100
+ to distribute covers distributing the software with
101
+ changes and new works permitted by [Changes and New Works
102
+ License](#changes-and-new-works-license).
103
+
104
+ ## Notices
105
+
106
+ You must ensure that anyone who gets a copy of any part of
107
+ the software from you also gets a copy of these terms or the
108
+ URL for them above, as well as copies of any plain-text lines
109
+ beginning with `Required Notice:` that the licensor provided
110
+ with the software. For example:
111
+
112
+ > Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
113
+
114
+ ## Changes and New Works License
115
+
116
+ The licensor grants you an additional copyright license to
117
+ make changes and new works based on the software for any
118
+ permitted purpose.
119
+
120
+ ## Patent License
121
+
122
+ The licensor grants you a patent license for the software that
123
+ covers patent claims the licensor can license, or becomes able
124
+ to license, that you would infringe by using the software.
125
+
126
+ ## Noncommercial Purposes
127
+
128
+ Any noncommercial purpose is a permitted purpose.
129
+
130
+ ## Personal Uses
131
+
132
+ Personal use for research, experiment, and testing for
133
+ the benefit of public knowledge, personal study, private
134
+ entertainment, hobby projects, amateur pursuits, or religious
135
+ observance, without any anticipated commercial application,
136
+ is use for a permitted purpose.
137
+
138
+ ## Noncommercial Organizations
139
+
140
+ Use by any charitable organization, educational institution,
141
+ public research organization, public safety or health
142
+ organization, environmental protection organization,
143
+ or government institution is use for a permitted purpose
144
+ regardless of the source of funding or obligations resulting
145
+ from the funding.
146
+
147
+ ## Fair Use
148
+
149
+ You may have "fair use" rights for the software under the
150
+ law. These terms do not limit them.
151
+
152
+ ## No Other Rights
153
+
154
+ These terms do not allow you to sublicense or transfer any of
155
+ your licenses to anyone else, or prevent the licensor from
156
+ granting licenses to anyone else. These terms do not imply
157
+ any other licenses.
158
+
159
+ ## Patent Defense
160
+
161
+ If you make any written claim that the software infringes or
162
+ contributes to infringement of any patent, your patent license
163
+ for the software granted under these terms ends immediately. If
164
+ your company makes such a claim, your patent license ends
165
+ immediately for work on behalf of your company.
166
+
167
+ ## Violations
168
+
169
+ The first time you are notified in writing that you have
170
+ violated any of these terms, or done anything with the software
171
+ not covered by your licenses, your licenses can nonetheless
172
+ continue if you come into full compliance with these terms,
173
+ and take practical steps to correct past violations, within
174
+ 32 days of receiving notice. Otherwise, all your licenses
175
+ end immediately.
176
+
177
+ ## No Liability
178
+
179
+ ***As far as the law allows, the software comes as is, without
180
+ any warranty or condition, and the licensor will not be liable
181
+ to you for any damages arising out of these terms or the use
182
+ or nature of the software, under any kind of legal claim.***
183
+
184
+ ## Definitions
185
+
186
+ The **licensor** is the individual or entity offering these
187
+ terms, and the **software** is the software the licensor makes
188
+ available under these terms.
189
+
190
+ **You** refers to the individual or entity agreeing to these
191
+ terms.
192
+
193
+ **Your company** is any legal entity, sole proprietorship,
194
+ or other kind of organization that you work for, plus all
195
+ organizations that have control over, are under the control of,
196
+ or are under common control with that organization. **Control**
197
+ means ownership of substantially all the assets of an entity,
198
+ or the power to direct its management and policies by vote,
199
+ contract, or otherwise. Control can be direct or indirect.
200
+
201
+ **Your licenses** are all the licenses granted to you for the
202
+ software under these terms.
203
+
204
+ **Use** means anything you do with the software requiring one
205
+ of your licenses.
206
+ License-File: LICENSE
207
+ Keywords: backtesting,pinescript,trading,tradingview,transpiler
208
+ Classifier: Development Status :: 4 - Beta
209
+ Classifier: Intended Audience :: Financial and Insurance Industry
210
+ Classifier: License :: Free for non-commercial use
211
+ Classifier: Programming Language :: Python :: 3.11
212
+ Classifier: Programming Language :: Python :: 3.12
213
+ Classifier: Programming Language :: Python :: 3.13
214
+ Classifier: Topic :: Office/Business :: Financial
215
+ Requires-Python: >=3.11
216
+ Provides-Extra: dev
217
+ Requires-Dist: pytest>=7.0; extra == 'dev'
218
+ Description-Content-Type: text/markdown
219
+
220
+ # pineforge-codegen
221
+
222
+ > PineScript v6 → C++ transpiler that emits against the [pineforge-engine](https://github.com/pineforge-4pass/pineforge-engine) runtime.
223
+
224
+ [![PyPI](https://img.shields.io/pypi/v/pineforge-codegen.svg)](https://pypi.org/project/pineforge-codegen/)
225
+ [![Python](https://img.shields.io/pypi/pyversions/pineforge-codegen.svg)](https://pypi.org/project/pineforge-codegen/)
226
+ [![License](https://img.shields.io/badge/license-PolyForm%20Noncommercial%201.0.0-orange.svg)](LICENSE)
227
+ [![Personal use](https://img.shields.io/badge/personal%20trading-free-22c55e.svg)](#license)
228
+
229
+ A pure-Python library that turns a PineScript v6 strategy into a complete C++
230
+ source file you can compile against the [`pineforge-engine`](https://github.com/pineforge-4pass/pineforge-engine)
231
+ runtime — a deterministic native backtester validated **trade-for-trade against
232
+ TradingView** (231/232 corpus parity).
233
+
234
+ It is **source-available and free for personal trading** — research, backtest,
235
+ and trade your own account with your own capital at no cost. See
236
+ [License](#license) for the line between personal and commercial use.
237
+
238
+ - **Pure Python, zero runtime dependencies** — one function, `transpile()`.
239
+ - **Fails loud, never silent** — a support checker rejects Pine the engine can't
240
+ faithfully run *before* codegen, with a `file:line:col` error. You never get
241
+ silently-wrong C++.
242
+ - First complete PineScript v6 → C++ transpiler with a real support checker (to
243
+ our knowledge).
244
+
245
+ ---
246
+
247
+ ## Install
248
+
249
+ ```bash
250
+ pip install pineforge-codegen
251
+ ```
252
+
253
+ Requires Python ≥ 3.11. No runtime dependencies.
254
+
255
+ From source (development / contributing):
256
+
257
+ ```bash
258
+ git clone https://github.com/pineforge-4pass/pineforge-codegen-oss.git
259
+ cd pineforge-codegen-oss
260
+ pip install -e ".[dev]"
261
+ ```
262
+
263
+ ## Quick start
264
+
265
+ ```python
266
+ from pineforge_codegen import transpile
267
+
268
+ pine = """
269
+ //@version=6
270
+ strategy("SMA cross", overlay=true)
271
+ fast = ta.sma(close, 10)
272
+ slow = ta.sma(close, 30)
273
+ if ta.crossover(fast, slow)
274
+ strategy.entry("long", strategy.long)
275
+ if ta.crossunder(fast, slow)
276
+ strategy.close("long")
277
+ """
278
+
279
+ cpp = transpile(pine)
280
+ print(cpp) # complete C++ source string
281
+ ```
282
+
283
+ The output `#include`s `<pineforge/engine.hpp>`, `<pineforge/ta.hpp>`, … and
284
+ compiles into a `.so` exposing the engine's documented C-ABI.
285
+
286
+ ## Usage
287
+
288
+ ### The `transpile()` function
289
+
290
+ ```python
291
+ transpile(
292
+ pine_source: str,
293
+ *,
294
+ check_support: bool = True, # run the support checker before codegen
295
+ filename: str = "<input>", # name used in error locations
296
+ ) -> str
297
+ ```
298
+
299
+ Returns the generated C++ source as a string. Raises
300
+ `pineforge_codegen.errors.CompileError` on any unsupported construct or syntax
301
+ error.
302
+
303
+ ### Transpile a file to a `.cpp`
304
+
305
+ ```python
306
+ from pathlib import Path
307
+ from pineforge_codegen import transpile
308
+
309
+ pine = Path("strategy.pine")
310
+ cpp = transpile(pine.read_text(), filename=pine.name) # filename → better errors
311
+ Path("strategy.generated.cpp").write_text(cpp)
312
+ ```
313
+
314
+ ### Handle unsupported features
315
+
316
+ The support checker raises a `CompileError` with the exact source location
317
+ instead of emitting broken C++:
318
+
319
+ ```python
320
+ from pineforge_codegen import transpile
321
+ from pineforge_codegen.errors import CompileError
322
+
323
+ try:
324
+ transpile('//@version=6\nindicator("x")\n')
325
+ except CompileError as e:
326
+ print(e)
327
+ # <input>:2:1: indicator() declarations are not supported; PineForge runs strategies only.
328
+
329
+ try:
330
+ transpile('//@version=6\nstrategy("x")\n'
331
+ 'x = request.financial("AAPL", "REV", "FQ")\n')
332
+ except CompileError as e:
333
+ print(e)
334
+ # <input>:3:22: request.financial(...) is not supported.
335
+ ```
336
+
337
+ Pass `filename=` so the location points back at the user's file:
338
+
339
+ ```python
340
+ transpile(src, filename="my_strategy.pine")
341
+ # raises e.g. my_strategy.pine:12:5: ...
342
+ ```
343
+
344
+ ### Skip the support checker
345
+
346
+ `check_support=False` bypasses the gate (intended only for tests of legacy
347
+ fixtures — it can produce C++ the engine won't accept):
348
+
349
+ ```python
350
+ cpp = transpile(src, check_support=False)
351
+ ```
352
+
353
+ ### Trace intermediate expressions (`@pf-trace`)
354
+
355
+ A `// @pf-trace name=expr` comment makes the engine emit `name`'s per-bar value
356
+ in the backtest report — useful for debugging parity against TradingView:
357
+
358
+ ```python
359
+ pine = """
360
+ //@version=6
361
+ strategy("traced")
362
+ // @pf-trace rsi=ta.rsi(close, 14)
363
+ e = ta.ema(close, 20)
364
+ if close > e
365
+ strategy.entry("L", strategy.long)
366
+ """
367
+ cpp = transpile(pine) # emitted on_bar tail records `rsi` each bar
368
+ ```
369
+
370
+ ### Advanced: run the pipeline stages directly
371
+
372
+ `transpile()` is a thin wrapper over five passes. Drive them yourself to inspect
373
+ tokens, the AST, or the analyzer context:
374
+
375
+ ```python
376
+ from pineforge_codegen import (
377
+ Lexer, Parser, Analyzer, CodeGen,
378
+ extract_pf_trace_pragmas, check_support_or_raise,
379
+ )
380
+
381
+ src = open("strategy.pine").read()
382
+ pragmas = extract_pf_trace_pragmas(src)
383
+ tokens = Lexer(src, filename="strategy.pine").tokenize()
384
+ ast = Parser(tokens, source=src, filename="strategy.pine").parse()
385
+ check_support_or_raise(ast, filename="strategy.pine")
386
+ ctx = Analyzer(ast, filename="strategy.pine").analyze()
387
+ ctx.pf_trace_pragmas = pragmas
388
+ cpp = CodeGen(ctx).generate()
389
+ ```
390
+
391
+ ## How it works
392
+
393
+ `transpile()` runs five passes, in order:
394
+
395
+ ```
396
+ pine source
397
+
398
+ ├─ 1. extract_pf_trace_pragmas // @pf-trace comments pulled out first
399
+ ├─ 2. Lexer → Parser token stream → Pine v6 AST
400
+ ├─ 3. support_checker reject anything the engine can't run faithfully
401
+ ├─ 4. Analyzer type inference, scope resolution, TA bookkeeping
402
+ └─ 5. CodeGen → C++ source string
403
+ ```
404
+
405
+ ## Compile & run against the engine
406
+
407
+ The emitted C++ targets the C-ABI in `<pineforge/pineforge.h>`. To build and run
408
+ a strategy:
409
+
410
+ ```bash
411
+ # Get the runtime (Apache-2.0) next to this repo
412
+ git clone https://github.com/pineforge-4pass/pineforge-engine.git
413
+ ```
414
+
415
+ Follow the engine's [`tutorial/`](https://github.com/pineforge-4pass/pineforge-engine/tree/main/tutorial)
416
+ to build `libpineforge.a`, compile your transpiled `.cpp` into a strategy `.so`,
417
+ feed it OHLCV, and read back the closed-trade list. The codegen version must
418
+ target a matching engine ABI (see [`VERSION`](VERSION)).
419
+
420
+ Prefer no local build? A hosted transpile API + MCP server is available so AI
421
+ agents can transpile and backtest for you — see <https://www.pineforge.dev>.
422
+
423
+ ## Running tests
424
+
425
+ ```bash
426
+ pip install -e ".[dev]"
427
+ pytest
428
+ ```
429
+
430
+ The pure-transpiler suite is fast (< 1 s) and has no native dependencies — it
431
+ checks token streams, parse trees, analyzer output, and canonical C++ strings
432
+ without invoking a C++ compiler.
433
+
434
+ Opt-in compile checks (`tests/test_compile_smoke.py`, `tests/test_compile_corpus.py`)
435
+ run `g++ -fsyntax-only` on transpiled C++ against the engine headers. They
436
+ auto-detect a sibling `../pineforge-engine` checkout, or set the path explicitly:
437
+
438
+ ```bash
439
+ export PINEFORGE_ENGINE_INCLUDE=/path/to/pineforge-engine/include
440
+ pytest
441
+ ```
442
+
443
+ Without an engine checkout these tests skip cleanly, so CI stays green.
444
+
445
+ ## License
446
+
447
+ Source-available under the [PolyForm Noncommercial License 1.0.0](LICENSE), with
448
+ two supplemental terms (the `LICENSE` file is the controlling text):
449
+
450
+ - **Personal Trading exception** — free to research, backtest, and trade for your
451
+ own account with your own capital.
452
+ - **Commercial use** — companies, funds, managing third-party capital, embedding
453
+ in a product, or operating a hosted / public-facing service requires a
454
+ commercial license.
455
+
456
+ Competing hosted services are not permitted under the noncommercial terms. This
457
+ is source-available, not OSI open source.
458
+
459
+ ### Buying a commercial license
460
+
461
+ Commercial licenses are available — flexible terms for funds, products, and
462
+ hosted/embedded use. Email **luis@4pass.com.tw** with your use case for a quote.
@@ -0,0 +1,35 @@
1
+ pineforge_codegen/__init__.py,sha256=NyzzhFcKFvusgR_Q3kgAHRiP6o9xBYEFiU7KAHpwpcs,2482
2
+ pineforge_codegen/ast_nodes.py,sha256=a5wW_wJ8QPy35guqJOVXU6D89kdTVrTNcd-lw0-dTaM,7680
3
+ pineforge_codegen/errors.py,sha256=U6oUuK9GyEDBpSriXzhWyKMuTG-hyk4mND6gVjnxu6A,2931
4
+ pineforge_codegen/lexer.py,sha256=afxd3MED6Utqi97HtkGbcoh1WMG0AsMs9-ZP3H9Pq_Q,18593
5
+ pineforge_codegen/parser.py,sha256=xmpiTGNcGrdPvbWOucIkdjBUTT6Oea-6u_Nq4khEp9E,47730
6
+ pineforge_codegen/pragmas.py,sha256=xzXqecJk5nhOFxha3fWA-dq8lNJ69v4w85vZx71zyF4,4550
7
+ pineforge_codegen/signatures.py,sha256=FGwOPjrEgw8a5hOEx3zWFdor6aMb0iJDBIXIa7VDgSA,31139
8
+ pineforge_codegen/support_checker.py,sha256=xvE17vMePD7rtLIL-D9IWXU9Hf31asweC5KNbxrWSsE,51220
9
+ pineforge_codegen/symbols.py,sha256=ixjkvOfkZrhlteQQhSAlOafcdTcSaTshe-rsfUPOK1A,3660
10
+ pineforge_codegen/tokens.py,sha256=SODOOSXKiTW0GMOz41D_IykuAVsUbbSFYS11pqON2rY,12882
11
+ pineforge_codegen/tv_input_choices.py,sha256=4t5q-49hwWquoOMVMbx_WgvFzsZ2Xll24imI7Evsk8I,2508
12
+ pineforge_codegen/analyzer/__init__.py,sha256=4eehi3sVIH_8pAXUaLGJKiEPuCZxNIvFDtQUen_hOVQ,1864
13
+ pineforge_codegen/analyzer/base.py,sha256=auxhh19EfAJqrP-46OnRNdVFFGsEpvqVxChLM1MWzUM,65146
14
+ pineforge_codegen/analyzer/call_handlers.py,sha256=Ma_nxp1ocVyWG5vprc7kCalSr3e4vN-ht4yFJKpIg-k,39648
15
+ pineforge_codegen/analyzer/contracts.py,sha256=P-LK7QMbcsqvXoUCBhjV-4_fDTUxILnAXvUJdx_36Xg,7773
16
+ pineforge_codegen/analyzer/diagnostics.py,sha256=XQihiH2vQYcPQ83NwTKU6RAuakRXkuhpAj_q__hhou8,4985
17
+ pineforge_codegen/analyzer/tables.py,sha256=KiI3gvYGWBw9PgX_PPXPS-fk8dfH54OjMCMGeb3tD0Y,7442
18
+ pineforge_codegen/analyzer/types.py,sha256=eATchuGDc54ZOFANkOEHNJ1yHRato9dpi8ehrn_GpUM,11524
19
+ pineforge_codegen/codegen/__init__.py,sha256=jvwwf93pqyHnFSvGPcD8Mhr_kAk0Uc4W6IqhKu8UIlI,2232
20
+ pineforge_codegen/codegen/base.py,sha256=zNQu-6m3H9AHGpH9_O5txSWPgalTMMzwqHc2iQY4Pcg,68763
21
+ pineforge_codegen/codegen/emit_top.py,sha256=htpiDaHI9q98ryd9eihKxGmVoZnbqz16vnw6Ax8L028,46076
22
+ pineforge_codegen/codegen/helpers.py,sha256=TIsTUjrri4DobEJ9Cr-rl9s6LILWuKWolROUu1-f4mw,7313
23
+ pineforge_codegen/codegen/helpers_syminfo.py,sha256=icRtk1jhyBDYwAv46B2hKHPZdoMypCCPtRp3f5s6jp0,4671
24
+ pineforge_codegen/codegen/input.py,sha256=uiaOLWnAmu4wdXD0qPFqH5HUJsZDGntulwVzWyNFXt0,8996
25
+ pineforge_codegen/codegen/security.py,sha256=dsmWLtH3GMRmHeRCpMUk2WDn_8WCDeU76L-tOFGdzcE,67565
26
+ pineforge_codegen/codegen/ta.py,sha256=ticEy6RLk8B2Qos9-eXUpirpZd07Pt0N9UyYNrke_mY,12983
27
+ pineforge_codegen/codegen/tables.py,sha256=WEb1SRs83aMxuKMO5Lcl1nB_ZsBP9MKsLKPpTeUCEbE,32959
28
+ pineforge_codegen/codegen/types.py,sha256=bEAHqQq4Xz_wm6MF0BdPrQjASCUKmtNahA45LfL7Wbk,28677
29
+ pineforge_codegen/codegen/visit_call.py,sha256=OTiooA6eoMceNy5TdVrE0t5lGntPZ7BdNgd3JzPMJ40,70382
30
+ pineforge_codegen/codegen/visit_expr.py,sha256=TFFmASq-j368J2ojd2UY4vAsDETqIYp-Bx_ooPoVVUI,35051
31
+ pineforge_codegen/codegen/visit_stmt.py,sha256=_ioQYBQRI7iKzJ5h_EbPmrv_8WbNFl3C-_z8KebmQeU,36310
32
+ pineforge_codegen-0.6.5.dist-info/METADATA,sha256=u-Yq3PsBEMVjdN6WdzQ9fYc4RlFMbpsRJ6X6aHGf4eg,17548
33
+ pineforge_codegen-0.6.5.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
34
+ pineforge_codegen-0.6.5.dist-info/licenses/LICENSE,sha256=Hf1kZ8OCaQ-nd2i92f2WEX1ZKCc6jqe-rtR4fVENQHY,7186
35
+ pineforge_codegen-0.6.5.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any