qasida 2.0.0__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 (200) hide show
  1. forge_lang/__init__.py +4 -0
  2. forge_lang/allocfail.py +28 -0
  3. forge_lang/ast_nodes.py +345 -0
  4. forge_lang/checker.py +2680 -0
  5. forge_lang/cli.py +277 -0
  6. forge_lang/codegen.py +4377 -0
  7. forge_lang/codegen_cuda.py +94 -0
  8. forge_lang/codegen_rv.py +1492 -0
  9. forge_lang/codegen_wasm.py +992 -0
  10. forge_lang/compiler.py +234 -0
  11. forge_lang/defers.py +36 -0
  12. forge_lang/docgen.py +61 -0
  13. forge_lang/drops.py +19 -0
  14. forge_lang/errors.py +6 -0
  15. forge_lang/fixedints.py +166 -0
  16. forge_lang/generics.py +109 -0
  17. forge_lang/infer.py +391 -0
  18. forge_lang/lexer.py +175 -0
  19. forge_lang/lsp.py +173 -0
  20. forge_lang/mmaps.py +33 -0
  21. forge_lang/moves.py +29 -0
  22. forge_lang/never.py +105 -0
  23. forge_lang/opaques.py +121 -0
  24. forge_lang/parser.py +715 -0
  25. forge_lang/pins.py +29 -0
  26. forge_lang/pkg.py +462 -0
  27. forge_lang/pretty.py +276 -0
  28. forge_lang/ranges.py +68 -0
  29. forge_lang/readonly.py +109 -0
  30. forge_lang/registry_server.py +163 -0
  31. forge_lang/repl.py +125 -0
  32. forge_lang/sizedarrays.py +182 -0
  33. forge_lang/stdlib/allocator.fg +45 -0
  34. forge_lang/stdlib/arena.fg +50 -0
  35. forge_lang/stdlib/autograd.fg +182 -0
  36. forge_lang/stdlib/avec.fg +69 -0
  37. forge_lang/stdlib/base64.fg +110 -0
  38. forge_lang/stdlib/bench.fg +24 -0
  39. forge_lang/stdlib/bitset.fg +37 -0
  40. forge_lang/stdlib/bloom.fg +32 -0
  41. forge_lang/stdlib/calendar.fg +41 -0
  42. forge_lang/stdlib/changelog.fg +18 -0
  43. forge_lang/stdlib/checksum.fg +41 -0
  44. forge_lang/stdlib/circle.fg +19 -0
  45. forge_lang/stdlib/cli-table.fg +43 -0
  46. forge_lang/stdlib/cli.fg +71 -0
  47. forge_lang/stdlib/cnn.fg +98 -0
  48. forge_lang/stdlib/collections.fg +93 -0
  49. forge_lang/stdlib/color.fg +97 -0
  50. forge_lang/stdlib/complex.fg +36 -0
  51. forge_lang/stdlib/compress.fg +79 -0
  52. forge_lang/stdlib/cone.fg +20 -0
  53. forge_lang/stdlib/config.fg +56 -0
  54. forge_lang/stdlib/counter.fg +55 -0
  55. forge_lang/stdlib/cow.fg +34 -0
  56. forge_lang/stdlib/csv.fg +97 -0
  57. forge_lang/stdlib/cuboid.fg +17 -0
  58. forge_lang/stdlib/cylinder.fg +16 -0
  59. forge_lang/stdlib/dataset.fg +153 -0
  60. forge_lang/stdlib/dates.fg +59 -0
  61. forge_lang/stdlib/db.fg +70 -0
  62. forge_lang/stdlib/decagon.fg +15 -0
  63. forge_lang/stdlib/deque.fg +56 -0
  64. forge_lang/stdlib/difflib.fg +63 -0
  65. forge_lang/stdlib/digitsum.fg +22 -0
  66. forge_lang/stdlib/dotenv.fg +82 -0
  67. forge_lang/stdlib/ecs.fg +67 -0
  68. forge_lang/stdlib/ellipse.fg +16 -0
  69. forge_lang/stdlib/email-parse.fg +44 -0
  70. forge_lang/stdlib/embeddings.fg +85 -0
  71. forge_lang/stdlib/evalharness.fg +39 -0
  72. forge_lang/stdlib/events.fg +51 -0
  73. forge_lang/stdlib/factorial.fg +9 -0
  74. forge_lang/stdlib/fft.fg +121 -0
  75. forge_lang/stdlib/fib.fg +15 -0
  76. forge_lang/stdlib/fractions.fg +63 -0
  77. forge_lang/stdlib/fuzzy.fg +50 -0
  78. forge_lang/stdlib/gamedev.fg +26 -0
  79. forge_lang/stdlib/gcd.fg +14 -0
  80. forge_lang/stdlib/geo.fg +48 -0
  81. forge_lang/stdlib/gpt.fg +497 -0
  82. forge_lang/stdlib/gpt2.fg +520 -0
  83. forge_lang/stdlib/graph.fg +48 -0
  84. forge_lang/stdlib/heap.fg +72 -0
  85. forge_lang/stdlib/hemisphere.fg +15 -0
  86. forge_lang/stdlib/heptagon.fg +15 -0
  87. forge_lang/stdlib/hexagon.fg +15 -0
  88. forge_lang/stdlib/histogram.fg +20 -0
  89. forge_lang/stdlib/http_server.fg +38 -0
  90. forge_lang/stdlib/i18n.fg +34 -0
  91. forge_lang/stdlib/ical-lite.fg +55 -0
  92. forge_lang/stdlib/image.fg +151 -0
  93. forge_lang/stdlib/inference.fg +95 -0
  94. forge_lang/stdlib/inference_gpt2.fg +205 -0
  95. forge_lang/stdlib/ini.fg +79 -0
  96. forge_lang/stdlib/interval.fg +26 -0
  97. forge_lang/stdlib/json.fg +18 -0
  98. forge_lang/stdlib/lifetime.fg +60 -0
  99. forge_lang/stdlib/log.fg +51 -0
  100. forge_lang/stdlib/lru.fg +47 -0
  101. forge_lang/stdlib/map.fg +44 -0
  102. forge_lang/stdlib/markdown.fg +100 -0
  103. forge_lang/stdlib/mathex.fg +33 -0
  104. forge_lang/stdlib/matrix2.fg +18 -0
  105. forge_lang/stdlib/metrics.fg +125 -0
  106. forge_lang/stdlib/minmax.fg +37 -0
  107. forge_lang/stdlib/ml.fg +54 -0
  108. forge_lang/stdlib/ml_classical.fg +245 -0
  109. forge_lang/stdlib/mock.fg +20 -0
  110. forge_lang/stdlib/money.fg +25 -0
  111. forge_lang/stdlib/movingavg.fg +37 -0
  112. forge_lang/stdlib/nlp.fg +90 -0
  113. forge_lang/stdlib/nn.fg +510 -0
  114. forge_lang/stdlib/nonagon.fg +15 -0
  115. forge_lang/stdlib/numpy.fg +174 -0
  116. forge_lang/stdlib/octagon.fg +15 -0
  117. forge_lang/stdlib/octahedron.fg +15 -0
  118. forge_lang/stdlib/optimization.fg +46 -0
  119. forge_lang/stdlib/option.fg +23 -0
  120. forge_lang/stdlib/pagination.fg +18 -0
  121. forge_lang/stdlib/palindrome.fg +16 -0
  122. forge_lang/stdlib/pandas.fg +104 -0
  123. forge_lang/stdlib/parallelogram.fg +16 -0
  124. forge_lang/stdlib/password.fg +20 -0
  125. forge_lang/stdlib/pathlib.fg +78 -0
  126. forge_lang/stdlib/pentagon.fg +15 -0
  127. forge_lang/stdlib/physics2d.fg +41 -0
  128. forge_lang/stdlib/plot.fg +50 -0
  129. forge_lang/stdlib/polynomials.fg +59 -0
  130. forge_lang/stdlib/preprocess.fg +175 -0
  131. forge_lang/stdlib/prime.fg +21 -0
  132. forge_lang/stdlib/prism.fg +17 -0
  133. forge_lang/stdlib/profiler.fg +54 -0
  134. forge_lang/stdlib/progress.fg +28 -0
  135. forge_lang/stdlib/property.fg +29 -0
  136. forge_lang/stdlib/pyramid.fg +16 -0
  137. forge_lang/stdlib/queue.fg +31 -0
  138. forge_lang/stdlib/rag.fg +36 -0
  139. forge_lang/stdlib/rand.fg +15 -0
  140. forge_lang/stdlib/ratelimit.fg +24 -0
  141. forge_lang/stdlib/rc.fg +26 -0
  142. forge_lang/stdlib/rect.fg +20 -0
  143. forge_lang/stdlib/regex.fg +247 -0
  144. forge_lang/stdlib/result.fg +20 -0
  145. forge_lang/stdlib/retry-backoff.fg +36 -0
  146. forge_lang/stdlib/rhombus.fg +16 -0
  147. forge_lang/stdlib/rl.fg +27 -0
  148. forge_lang/stdlib/rnn.fg +161 -0
  149. forge_lang/stdlib/score.fg +33 -0
  150. forge_lang/stdlib/search.fg +27 -0
  151. forge_lang/stdlib/sector.fg +16 -0
  152. forge_lang/stdlib/semver.fg +58 -0
  153. forge_lang/stdlib/set.fg +43 -0
  154. forge_lang/stdlib/sklearn.fg +259 -0
  155. forge_lang/stdlib/slice.fg +37 -0
  156. forge_lang/stdlib/slugify.fg +124 -0
  157. forge_lang/stdlib/sort.fg +35 -0
  158. forge_lang/stdlib/sphere.fg +15 -0
  159. forge_lang/stdlib/sql.fg +152 -0
  160. forge_lang/stdlib/stack.fg +31 -0
  161. forge_lang/stdlib/statistics.fg +74 -0
  162. forge_lang/stdlib/stats.fg +78 -0
  163. forge_lang/stdlib/strings.fg +35 -0
  164. forge_lang/stdlib/svg.fg +70 -0
  165. forge_lang/stdlib/table.fg +71 -0
  166. forge_lang/stdlib/tempfile.fg +9 -0
  167. forge_lang/stdlib/template.fg +56 -0
  168. forge_lang/stdlib/tensor.fg +337 -0
  169. forge_lang/stdlib/tensor_autograd.fg +799 -0
  170. forge_lang/stdlib/test.fg +42 -0
  171. forge_lang/stdlib/tetrahedron.fg +15 -0
  172. forge_lang/stdlib/textwrap.fg +43 -0
  173. forge_lang/stdlib/tfidf.fg +55 -0
  174. forge_lang/stdlib/tgt.fg +311 -0
  175. forge_lang/stdlib/timers.fg +22 -0
  176. forge_lang/stdlib/timezone.fg +32 -0
  177. forge_lang/stdlib/tokenizer.fg +206 -0
  178. forge_lang/stdlib/toml.fg +133 -0
  179. forge_lang/stdlib/torus.fg +16 -0
  180. forge_lang/stdlib/trapezoid.fg +17 -0
  181. forge_lang/stdlib/triangle.fg +20 -0
  182. forge_lang/stdlib/units.fg +43 -0
  183. forge_lang/stdlib/url.fg +221 -0
  184. forge_lang/stdlib/uuid.fg +59 -0
  185. forge_lang/stdlib/vec2.fg +20 -0
  186. forge_lang/stdlib/vec3.fg +21 -0
  187. forge_lang/stdlib/vision.fg +55 -0
  188. forge_lang/stdlib/wav.fg +54 -0
  189. forge_lang/stdlib/xml.fg +108 -0
  190. forge_lang/traits.py +10 -0
  191. forge_lang/tuples.py +165 -0
  192. forge_lang/unions.py +136 -0
  193. forge_lang/weaks.py +31 -0
  194. forge_lang/wit.py +336 -0
  195. qasida-2.0.0.dist-info/METADATA +538 -0
  196. qasida-2.0.0.dist-info/RECORD +200 -0
  197. qasida-2.0.0.dist-info/WHEEL +5 -0
  198. qasida-2.0.0.dist-info/entry_points.txt +2 -0
  199. qasida-2.0.0.dist-info/licenses/LICENSE +21 -0
  200. qasida-2.0.0.dist-info/top_level.txt +1 -0
forge_lang/__init__.py ADDED
@@ -0,0 +1,4 @@
1
+ """Qasida: a production-oriented compiled language."""
2
+ # Single source of truth for the version (forge.py and setuptools
3
+ # both read it from here; keep it in sync with CHANGELOG.md).
4
+ __version__ = "2.0.0"
@@ -0,0 +1,28 @@
1
+ """Fallible allocation (Top-500 #36) in a program, for backend
2
+ gates. A program uses try_alloc when any call is to try_alloc.
3
+ try_alloc is native-only in v1 (it uses calloc on the hosted
4
+ runtime); big32 and WASM reject try_alloc programs with a
5
+ named error.
6
+ """
7
+
8
+ import forge_lang.ast_nodes as A
9
+
10
+
11
+ def _walk(node):
12
+ if isinstance(node, A.Call) and node.name == "try_alloc":
13
+ return True
14
+ if isinstance(node, (list, tuple)):
15
+ return any(_walk(x) for x in node)
16
+ if hasattr(node, "__dict__"):
17
+ return any(_walk(v) for v in vars(node).values())
18
+ return False
19
+
20
+
21
+ def uses_try_alloc(program):
22
+ """True when any function body calls try_alloc."""
23
+ for fn in getattr(program, "funcs", []) or []:
24
+ if getattr(fn, "type_params", None):
25
+ continue
26
+ if getattr(fn, "body", None) is not None and _walk(fn.body):
27
+ return True
28
+ return False
@@ -0,0 +1,345 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass
5
+ class Program:
6
+ imports: list # [path string]
7
+ funcs: list
8
+ structs: list = None # [StructDef]; None for old call sites
9
+ enums: list = None # [EnumDef]
10
+ traits: list = None # [TraitDef]
11
+ impls: list = None # [ImplDef]
12
+ aliases: list = None # [AliasDef]
13
+ newtypes: list = None # [NewtypeDef]
14
+
15
+
16
+ @dataclass
17
+ class StructDef:
18
+ name: str
19
+ fields: list # [(name, type)]
20
+ line: int
21
+ col: int
22
+ type_params: list = None # [param name] for generic structs
23
+
24
+
25
+ @dataclass
26
+ class EnumDef:
27
+ name: str
28
+ variants: list # [variant name]
29
+ line: int
30
+ col: int
31
+ type_params: list = None
32
+ variant_payloads: dict = None # variant -> payload type or None
33
+
34
+
35
+ @dataclass
36
+ class FuncDef:
37
+ name: str
38
+ params: list
39
+ ret: str
40
+ body: object
41
+ line: int
42
+ col: int
43
+ is_extern: bool = False
44
+ type_params: list = None # [param name] for generic functions
45
+ # Source file this function was defined in, stamped
46
+ # by compiler.load_program ("" for compile_source,
47
+ # which has no file). Powers --debug #line output.
48
+ file: str = ""
49
+
50
+
51
+ @dataclass
52
+ class Match:
53
+ expr: object
54
+ arms: list # [(pattern, Block)]; pattern is a variant name or "_"
55
+ line: int
56
+ col: int
57
+
58
+
59
+ @dataclass
60
+ class Spawn:
61
+ call: object # Call node
62
+ line: int
63
+ col: int
64
+
65
+
66
+ @dataclass
67
+ class Scope:
68
+ body: object # Block node: tasks spawned inside are joined at its end
69
+ line: int
70
+ col: int
71
+
72
+
73
+ @dataclass
74
+ class Try:
75
+ expr: object
76
+ line: int
77
+ col: int
78
+ kind: str = None # "Option" or "Result", set by checker
79
+ value_type: str = None
80
+ ret_type: str = None
81
+ error_type: str = None
82
+
83
+
84
+ @dataclass
85
+ class Block:
86
+ stmts: list
87
+
88
+
89
+ @dataclass
90
+ class Let:
91
+ name: str
92
+ mutable: bool
93
+ ann: object
94
+ expr: object
95
+ line: int
96
+ col: int
97
+
98
+
99
+ @dataclass
100
+ class Assign:
101
+ name: str
102
+ expr: object
103
+ line: int
104
+ col: int
105
+
106
+
107
+ @dataclass
108
+ class IndexAssign:
109
+ base: object # Index node whose base is a Var, a field, or another index
110
+ expr: object
111
+ line: int
112
+ col: int
113
+
114
+
115
+ @dataclass
116
+ class If:
117
+ cond: object
118
+ then: object
119
+ els: object
120
+ line: int
121
+ col: int
122
+
123
+
124
+ @dataclass
125
+ class While:
126
+ cond: object
127
+ body: object
128
+ line: int
129
+ col: int
130
+
131
+
132
+ @dataclass
133
+ class For:
134
+ name: str
135
+ expr: object
136
+ body: object
137
+ line: int
138
+ col: int
139
+
140
+
141
+ @dataclass
142
+ class Break:
143
+ line: int
144
+ col: int
145
+
146
+
147
+ @dataclass
148
+ class Continue:
149
+ line: int
150
+ col: int
151
+
152
+
153
+ @dataclass
154
+ class TraitDef:
155
+ name: str
156
+ methods: list # [(name, params, ret, line, col)]; signatures only
157
+ line: int
158
+ col: int
159
+
160
+
161
+ @dataclass
162
+ class ImplDef:
163
+ trait: object # trait name, or None for an inherent impl
164
+ struct: str
165
+ methods: list # [FuncDef], each with the receiver as first param
166
+ line: int
167
+ col: int
168
+
169
+
170
+ @dataclass
171
+ class AliasDef:
172
+ name: str
173
+ target: str # a type spelling, e.g. "int", "[int]", "Stack<int>"
174
+ line: int
175
+ col: int
176
+
177
+
178
+ @dataclass
179
+ class NewtypeDef:
180
+ name: str
181
+ target: str # the underlying type; the newtype is DISTINCT from it
182
+ line: int
183
+ col: int
184
+
185
+
186
+ @dataclass
187
+ class Return:
188
+ expr: object
189
+ line: int
190
+ col: int
191
+
192
+
193
+ @dataclass
194
+ class ExprStmt:
195
+ expr: object
196
+ line: int
197
+ col: int
198
+
199
+
200
+ @dataclass
201
+ class IntLit:
202
+ value: int
203
+ line: int
204
+ col: int
205
+
206
+
207
+ @dataclass
208
+ class FloatLit:
209
+ value: float
210
+ line: int
211
+ col: int
212
+
213
+
214
+ @dataclass
215
+ class StrLit:
216
+ value: str
217
+ line: int
218
+ col: int
219
+
220
+
221
+ @dataclass
222
+ class BoolLit:
223
+ value: bool
224
+ line: int
225
+ col: int
226
+
227
+
228
+ @dataclass
229
+ class ArrayLit:
230
+ elems: list
231
+ line: int
232
+ col: int
233
+
234
+
235
+ @dataclass
236
+ class TupleLit:
237
+ elems: list
238
+ line: int
239
+ col: int
240
+
241
+
242
+ @dataclass
243
+ class StructLit:
244
+ name: str
245
+ fields: list # [(field_name, expr)]
246
+ line: int
247
+ col: int
248
+ concrete_type: str = None # set by checker: base name or "Base<args>"
249
+
250
+
251
+ @dataclass
252
+ class FieldAccess:
253
+ base: object
254
+ field: str
255
+ line: int
256
+ col: int
257
+
258
+
259
+ @dataclass
260
+ class MethodCall:
261
+ base: object
262
+ method: str
263
+ args: list
264
+ line: int
265
+ col: int
266
+
267
+
268
+ @dataclass
269
+ class FieldAssign:
270
+ target: object # FieldAccess node
271
+ expr: object
272
+ line: int
273
+ col: int
274
+
275
+
276
+ @dataclass
277
+ class Var:
278
+ name: str
279
+ line: int
280
+ col: int
281
+
282
+
283
+ @dataclass
284
+ class Call:
285
+ name: str
286
+ args: list
287
+ line: int
288
+ col: int
289
+ concrete_type: str = None # set by checker for enum constructions
290
+
291
+
292
+ @dataclass
293
+ class Index:
294
+ base: object
295
+ index: object
296
+ line: int
297
+ col: int
298
+
299
+
300
+ @dataclass
301
+ class TupleIndex:
302
+ base: object
303
+ index: int
304
+ line: int
305
+ col: int
306
+
307
+
308
+ @dataclass
309
+ class RangeLit:
310
+ start: object
311
+ end: object
312
+ line: int
313
+ col: int
314
+
315
+
316
+ @dataclass
317
+ class Defer:
318
+ call: object
319
+ line: int
320
+ col: int
321
+
322
+
323
+ @dataclass
324
+ class Cast:
325
+ expr: object
326
+ target: str
327
+ line: int
328
+ col: int
329
+
330
+
331
+ @dataclass
332
+ class BinOp:
333
+ op: str
334
+ left: object
335
+ right: object
336
+ line: int
337
+ col: int
338
+
339
+
340
+ @dataclass
341
+ class UnaryOp:
342
+ op: str
343
+ expr: object
344
+ line: int
345
+ col: int