jaclang 0.7.31__py3-none-any.whl → 0.7.33__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.

Potentially problematic release.


This version of jaclang might be problematic. Click here for more details.

@@ -34,7 +34,7 @@ class InheritancePass(Pass):
34
34
  for item in node.base_classes.items:
35
35
  # The assumption is that the base class can only be a name node
36
36
  # or an atom trailer only.
37
- assert isinstance(item, (ast.Name, ast.AtomTrailer))
37
+ assert isinstance(item, (ast.Name, ast.AtomTrailer, ast.FuncCall))
38
38
 
39
39
  # In case of name node, then get the symbol table that contains
40
40
  # the current class and lookup for that name after that use the
@@ -63,6 +63,11 @@ class InheritancePass(Pass):
63
63
  assert base_class_symbol_table is not None
64
64
  node.sym_tab.inherit_sym_tab(base_class_symbol_table)
65
65
 
66
+ elif isinstance(item, ast.FuncCall):
67
+ self.__debug_print(
68
+ "Base class depends on the type of a function call expression, this is not supported yet"
69
+ )
70
+
66
71
  # In case of atom trailer, unwind it and use each name node to
67
72
  # as the code above to lookup for the base class
68
73
  elif isinstance(item, ast.AtomTrailer):
@@ -94,6 +99,20 @@ class InheritancePass(Pass):
94
99
  not_found = True
95
100
  break
96
101
 
102
+ if (
103
+ current_sym_table is None
104
+ and item.as_attr_list.index(name) < len(item.as_attr_list) - 1
105
+ and isinstance(
106
+ item.as_attr_list[item.as_attr_list.index(name) + 1],
107
+ ast.IndexSlice,
108
+ )
109
+ ):
110
+ msg = "Base class depends on the type of an "
111
+ msg += "Index slice expression, this is not supported yet"
112
+ self.__debug_print(msg)
113
+ not_found = True
114
+ break
115
+
97
116
  assert current_sym_table is not None
98
117
 
99
118
  if not_found:
@@ -2937,7 +2937,15 @@ class PyastGenPass(Pass):
2937
2937
  )
2938
2938
  ]
2939
2939
  elif node.name == Tok.KW_ROOT:
2940
- node.gen.py_ast = [self.jaclib_obj("root")]
2940
+ node.gen.py_ast = [
2941
+ self.sync(
2942
+ ast3.Call(
2943
+ func=self.jaclib_obj("root"),
2944
+ args=[],
2945
+ keywords=[],
2946
+ )
2947
+ )
2948
+ ]
2941
2949
 
2942
2950
  else:
2943
2951
  node.gen.py_ast = [
jaclang/plugin/default.py CHANGED
@@ -1136,8 +1136,6 @@ class JacFeatureImpl(
1136
1136
  raise ValueError(f"Invalid attribute: {fld}")
1137
1137
  if source.persistent or target.persistent:
1138
1138
  Jac.save(eanch)
1139
- Jac.save(target)
1140
- Jac.save(source)
1141
1139
  return edge
1142
1140
 
1143
1141
  return builder
@@ -1155,6 +1153,19 @@ class JacFeatureImpl(
1155
1153
 
1156
1154
  jctx.mem.set(anchor.id, anchor)
1157
1155
 
1156
+ match anchor:
1157
+ case NodeAnchor():
1158
+ for ed in anchor.edges:
1159
+ if ed.is_populated() and not ed.persistent:
1160
+ Jac.save(ed)
1161
+ case EdgeAnchor():
1162
+ if (src := anchor.source) and src.is_populated() and not src.persistent:
1163
+ Jac.save(src)
1164
+ if (trg := anchor.target) and trg.is_populated() and not trg.persistent:
1165
+ Jac.save(trg)
1166
+ case _:
1167
+ pass
1168
+
1158
1169
  @staticmethod
1159
1170
  @hookimpl
1160
1171
  def destroy(obj: Architype | Anchor) -> None:
@@ -0,0 +1,17 @@
1
+ node A {}
2
+ node B {}
3
+
4
+ walker build {
5
+ can run with `root entry {
6
+ a = A();
7
+ a ++> B(); # connecting two non persistent nodes
8
+
9
+ here ++> a;
10
+ }
11
+ }
12
+
13
+ walker view {
14
+ can run with `root entry {
15
+ print(dotgen(here));
16
+ }
17
+ }
@@ -816,3 +816,36 @@ class TestJaseciPlugin(TestCase):
816
816
  session=session,
817
817
  )
818
818
  self.assertEqual("None", self.capturedOutput.getvalue().strip())
819
+
820
+ def test_traversing_save(self) -> None:
821
+ """Test traversing save."""
822
+ global session
823
+ session = self.fixture_abs_path("traversing_save.session")
824
+
825
+ self._output2buffer()
826
+ cli.enter(
827
+ filename=self.fixture_abs_path("traversing_save.jac"),
828
+ entrypoint="build",
829
+ args=[],
830
+ session=session,
831
+ )
832
+
833
+ cli.enter(
834
+ filename=self.fixture_abs_path("traversing_save.jac"),
835
+ entrypoint="view",
836
+ args=[],
837
+ session=session,
838
+ )
839
+
840
+ self.assertEqual(
841
+ "digraph {\n"
842
+ 'node [style="filled", shape="ellipse", fillcolor="invis", fontcolor="black"];\n'
843
+ '0 -> 1 [label=""];\n'
844
+ '1 -> 2 [label=""];\n'
845
+ '0 [label="Root()"fillcolor="#FFE9E9"];\n'
846
+ '1 [label="A()"fillcolor="#F0FFF0"];\n'
847
+ '2 [label="B()"fillcolor="#F5E5FF"];\n}',
848
+ self.capturedOutput.getvalue().strip(),
849
+ )
850
+
851
+ self._del_session(session)
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import unittest
6
6
  from contextvars import ContextVar
7
7
  from dataclasses import MISSING
8
- from typing import Any, Callable, ClassVar, Optional, cast
8
+ from typing import Any, Callable, Optional, cast
9
9
  from uuid import UUID
10
10
 
11
11
  from .architype import NodeAnchor, Root
@@ -26,9 +26,6 @@ class ExecutionContext:
26
26
  root: NodeAnchor
27
27
  entry_node: NodeAnchor
28
28
 
29
- # A context change event subscription list, those who want to listen ctx change will register here.
30
- on_ctx_change: ClassVar[list[Callable[[ExecutionContext | None], None]]] = []
31
-
32
29
  def init_anchor(
33
30
  self,
34
31
  anchor_id: str | None,
@@ -49,8 +46,6 @@ class ExecutionContext:
49
46
  """Close current ExecutionContext."""
50
47
  self.mem.close()
51
48
  EXECUTION_CONTEXT.set(None)
52
- for func in ExecutionContext.on_ctx_change:
53
- func(EXECUTION_CONTEXT.get(None))
54
49
 
55
50
  @staticmethod
56
51
  def create(
@@ -80,8 +75,6 @@ class ExecutionContext:
80
75
  old_ctx.close()
81
76
 
82
77
  EXECUTION_CONTEXT.set(ctx)
83
- for func in ExecutionContext.on_ctx_change:
84
- func(EXECUTION_CONTEXT.get(None))
85
78
 
86
79
  return ctx
87
80
 
@@ -0,0 +1,38 @@
1
+ class Apple {
2
+ with entry {
3
+ a = 1;
4
+ }
5
+ }
6
+
7
+ class Orange {
8
+ with entry {
9
+ b = 2;
10
+ }
11
+ }
12
+
13
+ with entry {
14
+ mm = [Apple, Orange];
15
+ }
16
+
17
+ class Banana :mm[1]: {
18
+ with entry {
19
+ c = 3;
20
+ }
21
+ }
22
+
23
+ can return_class() -> `Type[Apple] {
24
+ print('Returning Apple');
25
+ return Apple;
26
+ }
27
+
28
+ class Kiwi :return_class(): {
29
+ with entry {
30
+ d = 4;
31
+ ;
32
+ }
33
+ }
34
+
35
+ with entry {
36
+ a = Kiwi();
37
+ print(Kiwi.d);
38
+ }
jaclang/tests/test_cli.py CHANGED
@@ -294,6 +294,27 @@ class JacCliTests(TestCase):
294
294
  r"10:7 - 10:12.*Name - start - Type.*SymbolPath: base_class2.B.start",
295
295
  )
296
296
 
297
+ def test_base_class_complex_expr(self) -> None:
298
+ """Testing for print AstTool."""
299
+ from jaclang.settings import settings
300
+
301
+ # settings.ast_symbol_info_detailed = True
302
+ captured_output = io.StringIO()
303
+ sys.stdout = captured_output
304
+
305
+ cli.tool(
306
+ "ir", ["ast", f"{self.fixture_abs_path('base_class_complex_expr.jac')}"]
307
+ )
308
+
309
+ sys.stdout = sys.__stdout__
310
+ stdout_value = captured_output.getvalue()
311
+ settings.ast_symbol_info_detailed = False
312
+
313
+ self.assertRegex(
314
+ stdout_value,
315
+ r"36\:9 \- 36\:13.*Name \- Kiwi \- Type\: base_class_complex_expr.Kiwi, SymbolTable\: Kiwi",
316
+ )
317
+
297
318
  def test_expr_types(self) -> None:
298
319
  """Testing for print AstTool."""
299
320
  captured_output = io.StringIO()
@@ -0,0 +1,62 @@
1
+ import time
2
+ from contextlib import contextmanager
3
+ from functools import wraps
4
+ from typing import Callable, Dict, Generator, ParamSpec, TypeVar
5
+
6
+ P = ParamSpec("P")
7
+ R = TypeVar("R")
8
+
9
+
10
+ class CodeProfiler:
11
+
12
+ markers: Dict[str, float] = {}
13
+
14
+ @staticmethod
15
+ def time_function(func: Callable[P, R]) -> Callable[P, R]:
16
+ """Measure and print the execution time of a function."""
17
+
18
+ @wraps(func)
19
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
20
+ start_time = time.perf_counter()
21
+ result = func(*args, **kwargs)
22
+ end_time = time.perf_counter()
23
+ print(
24
+ f"Function '{func.__name__}' took {end_time - start_time:.6f} seconds"
25
+ )
26
+ return result
27
+
28
+ return wrapper
29
+
30
+ @staticmethod
31
+ def start_marker(marker_name: str) -> None:
32
+ """Start a named marker to measure a specific section of code."""
33
+ if marker_name in CodeProfiler.markers:
34
+ print(f"Warning: Marker '{marker_name}' is already running.")
35
+ CodeProfiler.markers[marker_name] = time.perf_counter()
36
+
37
+ @staticmethod
38
+ def end_marker(marker_name: str) -> None:
39
+ """End the named marker and print the time taken since it started."""
40
+ if marker_name not in CodeProfiler.markers:
41
+ print(f"Error: Marker '{marker_name}' does not exist.")
42
+ return
43
+ start_time = CodeProfiler.markers.pop(marker_name)
44
+ end_time = time.perf_counter()
45
+ print(f"Marker '{marker_name}' took {end_time - start_time:.6f} seconds")
46
+
47
+ @staticmethod
48
+ @contextmanager
49
+ def profile_section(section_name: str) -> Generator[None, None, None]:
50
+ """
51
+ A context manager for profiling a block of code.
52
+
53
+ Usage:
54
+ with CodeProfiler.profile_section("My Block"):
55
+ # code to profile
56
+ """
57
+ start_time = time.perf_counter()
58
+ try:
59
+ yield
60
+ finally:
61
+ end_time = time.perf_counter()
62
+ print(f"Section '{section_name}' took {end_time - start_time:.6f} seconds")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: jaclang
3
- Version: 0.7.31
3
+ Version: 0.7.33
4
4
  Summary: Jac is a unique and powerful programming language that runs on top of Python, offering an unprecedented level of intelligence and intuitive understanding.
5
5
  License: MIT
6
6
  Keywords: jac,jaclang,jaseci,python,programming-language,machine-learning,artificial-intelligence
@@ -1,4 +1,4 @@
1
- jaclang/__init__.py,sha256=bx1J_RA6dyXlj6jp7hSjTvbm_xO4MV7ZSW82mg0qxqs,13112
1
+ jaclang/__init__.py,sha256=Pvw9Tyx_ypvbmWu05c-BEsIcyhX---8r5wkZLLs4SC0,12919
2
2
  jaclang/cli/.gitignore,sha256=NYuons2lzuCpCdefMnztZxeSMgtPVJF6R6zSgVDOV20,27
3
3
  jaclang/cli/__init__.py,sha256=7aaPgYddIAHBvkdv36ngbfwsimMnfGaTDcaHYMg_vf4,23
4
4
  jaclang/cli/cli.md,sha256=4BPJGdcyvs_rXgd_DPEGjkKSGe5ureXXYaQsf-_z_LU,5939
@@ -11,7 +11,7 @@ jaclang/compiler/codeloc.py,sha256=clz7ofOE0Rgf7eqco3zEO31mCbG3Skj9-rLooliBeik,2
11
11
  jaclang/compiler/compile.py,sha256=FD3jxK8zoxdpQrYRJvwO3CoPWjYL3bbW2WhPRzj3hz8,3796
12
12
  jaclang/compiler/constant.py,sha256=4aS0haM9X7WI0mJmzsWuEecF1yWHadC1lOLGOOUyNY0,8994
13
13
  jaclang/compiler/jac.lark,sha256=SzEc1Ae6Q8QUtBzW1R3OnPTQMpiQGrN-PE25TL_psAs,19848
14
- jaclang/compiler/parser.py,sha256=QRtlqo9gpDbZzTWT4AG9vq3gxIAqR2WzYPSr6sD8KfA,126936
14
+ jaclang/compiler/parser.py,sha256=3OG4H43kMCSufKoy4EBoIKiuEj5fFk7QOwqJb-lMJFU,121426
15
15
  jaclang/compiler/passes/__init__.py,sha256=0Tw0d130ZjzA05jVcny9cf5NfLjlaM70PKqFnY4zqn4,69
16
16
  jaclang/compiler/passes/ir_pass.py,sha256=CgtuBrVjfG7PgTCLNSjxgFffYR5naTC3tIjOjsXx5gk,5597
17
17
  jaclang/compiler/passes/main/__init__.py,sha256=m5ukLwMcdoi85Ee80-A-zDLbg81z0ztT2IKhOCegNpE,973
@@ -20,9 +20,9 @@ jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=cCOXyL-yyLxIvSyrlhOtV
20
20
  jaclang/compiler/passes/main/def_use_pass.py,sha256=3rfLaQw4mScSedqPCY8vVkvZH77TTOKEbBYYGC0SZnA,9634
21
21
  jaclang/compiler/passes/main/fuse_typeinfo_pass.py,sha256=bjxeE_90AFy9jN9VomOsoyVFIqO2Kp3UHAjPNF-APGA,26928
22
22
  jaclang/compiler/passes/main/import_pass.py,sha256=ouOuVzA_wloNG_t3Ec9gTEu6JuPZtwXiL6Kgtoan6gc,23090
23
- jaclang/compiler/passes/main/inheritance_pass.py,sha256=EXj65jDjFZv-Ayac_12iiGeQUStA87-N0mGvNbAJZjQ,4708
23
+ jaclang/compiler/passes/main/inheritance_pass.py,sha256=IDzfMSezJmNdBwN_dwguu1qYL8YzwBuNPFrk6HEkTco,5586
24
24
  jaclang/compiler/passes/main/py_collect_dep_pass.py,sha256=TE4h6HLYRE5YdHZK9gtbPPaBJBLOg0g0xSlT_oPzwzY,2874
25
- jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=jeBpx-vxo0_OODMm82iCF6Fl1xNgQKFa1gt63AWw8zY,133057
25
+ jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=kHH-arzVWiAYbRXxd2Cd1FViCRwBMV6Cc2yy0QjFMQo,133269
26
26
  jaclang/compiler/passes/main/pyast_load_pass.py,sha256=VmlR1j0iY60nFF9DrWVwWrvpUDZpXamkfoyF7miqysA,94697
27
27
  jaclang/compiler/passes/main/pybc_gen_pass.py,sha256=CjA9AqyMO3Pv_b5Hh0YI6JmCqIru2ASonO6rhrkau-M,1336
28
28
  jaclang/compiler/passes/main/pyjac_ast_link_pass.py,sha256=snbqUIPtPcD9ZKsItOlKGVnujoMGFwF8XNP0GvxS9AI,8628
@@ -169,7 +169,7 @@ jaclang/langserve/tests/test_server.py,sha256=Z-RXNuCXFPi67uXkW1hmoJmrb37VFRpRdH
169
169
  jaclang/langserve/utils.py,sha256=edZCrq8ZFolao-rvv5RGPxtnEh6NmhrxOgPh8VxmEPs,15019
170
170
  jaclang/plugin/__init__.py,sha256=5t2krHKt_44PrCTGojzxEimxpNHYVQcn89jAiCSXE_k,165
171
171
  jaclang/plugin/builtin.py,sha256=pYw5Ox-bYi_c-lF6FLA7cBLRIKX8dBrIrEutnhmXisU,1468
172
- jaclang/plugin/default.py,sha256=3bRyV_xgtOTHPfyWjX-lATXkeHmvVGGUrbK7cv_xatI,48382
172
+ jaclang/plugin/default.py,sha256=6rwqlXITRbjbERvMMbKtJnk_yhS9M1koHQrfoecunC8,48829
173
173
  jaclang/plugin/feature.py,sha256=gYpb0MHPwwLMqWPgmn2BdQcwknGoHR5MFIm0L0--6Yc,17521
174
174
  jaclang/plugin/plugin.md,sha256=B252QTH3c8uZyvXTbGmZBafZtdXstFC5vT5jIN_gS4U,9994
175
175
  jaclang/plugin/spec.py,sha256=xylKtCYzImXv0-FgZfJ5xEb1QoVHkEivWQ0FvwoUnVQ,15054
@@ -181,13 +181,14 @@ jaclang/plugin/tests/fixtures/other_root_access.jac,sha256=32uTTbN-VVNHOwpF8AXNS
181
181
  jaclang/plugin/tests/fixtures/savable_object.jac,sha256=SPMmuXkC2QjNNmJ_CEbid86fd0ncanPTs6hLKDe7T04,2032
182
182
  jaclang/plugin/tests/fixtures/simple_node_connection.jac,sha256=KdbpACWtnj92TqQqEunwoI4VKhlnhcJCKMkbgh0Xqxg,1067
183
183
  jaclang/plugin/tests/fixtures/simple_persistent.jac,sha256=o0TZTOJEZjFW8A2IGY8ICBZEBZzHhqha0xQFFBK_DSI,624
184
+ jaclang/plugin/tests/fixtures/traversing_save.jac,sha256=Y7ki1eVUzY9O5nhbrjb_JATk6ySsD1GyBfjj-YdImgs,252
184
185
  jaclang/plugin/tests/test_features.py,sha256=sK9d2UazofGl9qYZO_ODKmOHZY8E4fnXNoyw-_KQI9A,2344
185
- jaclang/plugin/tests/test_jaseci.py,sha256=IqiTEgcO6vb3TONjG7LhXBKnDacspa_dk_QORjsGvN0,27395
186
+ jaclang/plugin/tests/test_jaseci.py,sha256=owGt7_IM_aW8uP3nBjRrGaAaouno2uxDyy_zB-QHAKY,28431
186
187
  jaclang/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
188
  jaclang/runtimelib/__init__.py,sha256=jDDYBCV82qPhmcDVk3NIvHbhng0ebSrXD3xrojg0-eo,34
188
189
  jaclang/runtimelib/architype.py,sha256=rcxXe34Vtoz-tNQPqPHmmnh2-G_iJJCjfdXDO5k9kQc,8474
189
190
  jaclang/runtimelib/constructs.py,sha256=1ARnsPrDi1UvyaFRhGRhO0kj0fnIZ2HbHF7O3itB-ZQ,796
190
- jaclang/runtimelib/context.py,sha256=xYg1DT85YIN0AhH16mTYYoQDjqUSPHmr9As611NITRI,6303
191
+ jaclang/runtimelib/context.py,sha256=rO-eqBcT4tVWPcraa17IKyMkyY8NDk6cvPBQVK-0Sdg,5910
191
192
  jaclang/runtimelib/importer.py,sha256=A2YIoPTPaRYvIrj3JZL7bDOyxFpU25Ld-V_fWQMsTbE,15650
192
193
  jaclang/runtimelib/machine.py,sha256=JvJiuh_QSFmqHIwWsOXb1pRPdAmM7sadUzWkNpb6jJc,11571
193
194
  jaclang/runtimelib/memory.py,sha256=LrVTo6Cac0q-YG1wug-Fgc8O2Tue9zRHnxSulDw3ZQ4,5656
@@ -208,6 +209,7 @@ jaclang/tests/fixtures/baddy.test.jac,sha256=Uq-Nlf44QUAtbOfDCbc9_ceLxmo31PILDTS
208
209
  jaclang/tests/fixtures/bar.jac,sha256=XZWOrzgMQed2R611DLfzCvWUT4a4gTYZXWRYvizMb18,782
209
210
  jaclang/tests/fixtures/base_class1.jac,sha256=OlQSzWdas7AKrvZb-gfq8DdwwearzOke3stE6TFXVQA,124
210
211
  jaclang/tests/fixtures/base_class2.jac,sha256=B-MD5LYDVJMTxEC9-B7tJyW900ymYU7p_hcmZm5eNRg,118
212
+ jaclang/tests/fixtures/base_class_complex_expr.jac,sha256=TW-uqrFInAVs3xCiWvMJkntYJZmb8jpSWFJetpu45Xk,436
211
213
  jaclang/tests/fixtures/blankwithentry.jac,sha256=lnMDDKyKnldsUIx1AVCIHt47KY3gR2CZYhox8663sLM,53
212
214
  jaclang/tests/fixtures/builtin_dotgen.jac,sha256=U2r_bmSsMDuJWuo9vYoRCgRIo9NA9-VkaaiacvAMeS8,1814
213
215
  jaclang/tests/fixtures/builtins_test.jac,sha256=1eJXipIFpa8IDjKv20TjAW_k4hTtJzNT1cKnQOAVt28,244
@@ -318,7 +320,7 @@ jaclang/tests/fixtures/with_context.jac,sha256=cDA_4YWe5UVmQRgcpktzkZ_zsswQpV_T2
318
320
  jaclang/tests/foo/__init__.jac,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
319
321
  jaclang/tests/main.jac,sha256=UJ4dASLCMA3wW78Rq3AHcq5GfXVY5QBm2S16OCrR1hQ,13
320
322
  jaclang/tests/test_bugs.py,sha256=tBPsIlSPqZDIz4QaScNRT-WdGIdJ0uU-aRBWq1XUZ6o,555
321
- jaclang/tests/test_cli.py,sha256=QT1pdVxv6Wyp7xKXJc_w4YdOiwpgQ8KYYROq1KhfzAk,19351
323
+ jaclang/tests/test_cli.py,sha256=j79-e3lVk_oBuy6pAwfjE8D-q5UsUQxEF5yoexWj8Jg,20040
322
324
  jaclang/tests/test_language.py,sha256=znQDqixddJMGS5MYr7FZIbdQ4uO41yqermdVbcmAdFI,51745
323
325
  jaclang/tests/test_man_code.py,sha256=ZdNarlZVfT_-8Jv3FjLplHw76tsvkCuISyfX3M4qxPg,5027
324
326
  jaclang/tests/test_reference.py,sha256=vZC0P1zptbxzc9CwgbhqA2tGVML_ptL8tON9Czh_dJg,3359
@@ -327,6 +329,7 @@ jaclang/utils/__init__.py,sha256=86LQ_LDyWV-JFkYBpeVHpLaVxkqwFDP60XpWXOFZIQk,46
327
329
  jaclang/utils/helpers.py,sha256=oL5yvcSalOdzsZ5yUDaMu70MnvBjvGRFJD94kGhLqT0,10410
328
330
  jaclang/utils/lang_tools.py,sha256=HECF9zXH8si6Q_oBhSSoOMmv-k8ppKPb6RAlX_wZPWE,10177
329
331
  jaclang/utils/log.py,sha256=G8Y_DnETgTh9xzvlW5gh9zqJ1ap4YY_MDTwIMu5Uc0Y,262
332
+ jaclang/utils/profiler.py,sha256=0lPKlMiMlUw2AdZI9MjP4ktOZz4yAzFsl5NgOJIW2yU,2083
330
333
  jaclang/utils/test.py,sha256=c12ZyRvG2IQtuRaU9XEGBrdM26fH82tWP9u64HH2Mz4,6089
331
334
  jaclang/utils/tests/__init__.py,sha256=8uwVqMsc6cxBAM1DuHLuNuTnzLXqOqM-WRa4ixOMF6w,23
332
335
  jaclang/utils/tests/test_lang_tools.py,sha256=wIMWdoKF24gVTlG_dGLAxetZhGmBF8cftUY-bugNOOQ,4879
@@ -1553,7 +1556,7 @@ jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA,sha256=BeUQIa8cnYbrjW
1553
1556
  jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD,sha256=XS4fBVrPI7kaNZ56Ggl2RGa76jySWLqTzcrUpZIQTVM,418
1554
1557
  jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
1555
1558
  jaclang/vendor/typing_extensions.py,sha256=gwekpyG9DVG3lxWKX4ni8u7nk3We5slG98mA9F3DJQw,134451
1556
- jaclang-0.7.31.dist-info/METADATA,sha256=OUpuAnKpa63Ap5L4e34d9_AyaKNKxwv-LGlmk4t-Xr4,4977
1557
- jaclang-0.7.31.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
1558
- jaclang-0.7.31.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
1559
- jaclang-0.7.31.dist-info/RECORD,,
1559
+ jaclang-0.7.33.dist-info/METADATA,sha256=jCYDLfLsV-h7wxSDRbtxT-zdQMJ1d6cZVJnpWgROpUg,4977
1560
+ jaclang-0.7.33.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
1561
+ jaclang-0.7.33.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
1562
+ jaclang-0.7.33.dist-info/RECORD,,