quantum-framework 0.9.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 (262) hide show
  1. quantum/__init__.py +1 -0
  2. quantum/cli/__init__.py +2 -0
  3. quantum/cli/commands/__init__.py +15 -0
  4. quantum/cli/commands/build.py +417 -0
  5. quantum/cli/commands/dev.py +185 -0
  6. quantum/cli/commands/docs.py +329 -0
  7. quantum/cli/commands/lint.py +523 -0
  8. quantum/cli/commands/migrate.py +527 -0
  9. quantum/cli/commands/new.py +622 -0
  10. quantum/cli/commands/serve.py +190 -0
  11. quantum/cli/commands/test.py +193 -0
  12. quantum/cli/deploy.py +810 -0
  13. quantum/cli/hot_reload.py +951 -0
  14. quantum/cli/jobs.py +356 -0
  15. quantum/cli/mq.py +582 -0
  16. quantum/cli/pkg.py +390 -0
  17. quantum/cli/runner.py +547 -0
  18. quantum/cli/server_process.py +159 -0
  19. quantum/cli/utils.py +334 -0
  20. quantum/compiler/__init__.py +30 -0
  21. quantum/compiler/base_generator.py +367 -0
  22. quantum/compiler/cli.py +295 -0
  23. quantum/compiler/expression_transformer.py +444 -0
  24. quantum/compiler/javascript/__init__.py +10 -0
  25. quantum/compiler/javascript/generator.py +659 -0
  26. quantum/compiler/optimizer.py +270 -0
  27. quantum/compiler/python/__init__.py +10 -0
  28. quantum/compiler/python/generator.py +883 -0
  29. quantum/compiler/python/runtime.py +863 -0
  30. quantum/compiler/transpiler.py +330 -0
  31. quantum/core/__init__.py +3 -0
  32. quantum/core/ast_nodes.py +2611 -0
  33. quantum/core/expression_diagnostics.py +87 -0
  34. quantum/core/expression_stdlib.py +148 -0
  35. quantum/core/expressions.py +591 -0
  36. quantum/core/features/agents/src/__init__.py +30 -0
  37. quantum/core/features/agents/src/ast_node.py +540 -0
  38. quantum/core/features/conditionals/src/__init__.py +8 -0
  39. quantum/core/features/conditionals/src/ast_node.py +68 -0
  40. quantum/core/features/data_fetching/src/__init__.py +21 -0
  41. quantum/core/features/data_fetching/src/ast_node.py +312 -0
  42. quantum/core/features/data_fetching/src/desktop_adapter.py +351 -0
  43. quantum/core/features/data_fetching/src/html_adapter.py +474 -0
  44. quantum/core/features/data_fetching/src/parser.py +225 -0
  45. quantum/core/features/data_import/src/__init__.py +0 -0
  46. quantum/core/features/data_import/src/ast_node.py +291 -0
  47. quantum/core/features/data_import/src/runtime.py +538 -0
  48. quantum/core/features/dump/src/__init__.py +12 -0
  49. quantum/core/features/dump/src/ast_node.py +106 -0
  50. quantum/core/features/dump/src/parser.py +61 -0
  51. quantum/core/features/dump/src/runtime.py +246 -0
  52. quantum/core/features/functions/src/__init__.py +8 -0
  53. quantum/core/features/functions/src/ast_node.py +149 -0
  54. quantum/core/features/game_engine_2d/src/__init__.py +19 -0
  55. quantum/core/features/game_engine_2d/src/ast_nodes.py +1719 -0
  56. quantum/core/features/game_engine_2d/src/parser.py +983 -0
  57. quantum/core/features/invocation/src/__init__.py +0 -0
  58. quantum/core/features/invocation/src/ast_node.py +146 -0
  59. quantum/core/features/invocation/src/runtime.py +327 -0
  60. quantum/core/features/knowledge_base/src/__init__.py +6 -0
  61. quantum/core/features/knowledge_base/src/ast_node.py +113 -0
  62. quantum/core/features/knowledge_base/src/parser.py +82 -0
  63. quantum/core/features/logging/src/__init__.py +12 -0
  64. quantum/core/features/logging/src/ast_node.py +111 -0
  65. quantum/core/features/logging/src/parser.py +50 -0
  66. quantum/core/features/logging/src/runtime.py +190 -0
  67. quantum/core/features/loops/src/__init__.py +8 -0
  68. quantum/core/features/loops/src/ast_node.py +60 -0
  69. quantum/core/features/query/src/__init__.py +0 -0
  70. quantum/core/features/query/src/database_service.py +322 -0
  71. quantum/core/features/query/src/query_validators.py +20 -0
  72. quantum/core/features/state_management/src/__init__.py +11 -0
  73. quantum/core/features/state_management/src/ast_node.py +228 -0
  74. quantum/core/features/terminal_engine/src/__init__.py +21 -0
  75. quantum/core/features/terminal_engine/src/ast_nodes.py +560 -0
  76. quantum/core/features/terminal_engine/src/parser.py +361 -0
  77. quantum/core/features/testing_engine/src/__init__.py +41 -0
  78. quantum/core/features/testing_engine/src/ast_nodes.py +1212 -0
  79. quantum/core/features/testing_engine/src/parser.py +604 -0
  80. quantum/core/features/theming/src/__init__.py +48 -0
  81. quantum/core/features/theming/src/ast_node.py +137 -0
  82. quantum/core/features/theming/src/presets.py +405 -0
  83. quantum/core/features/ui_engine/src/__init__.py +20 -0
  84. quantum/core/features/ui_engine/src/ast_nodes.py +1854 -0
  85. quantum/core/features/ui_engine/src/parser.py +1106 -0
  86. quantum/core/features/websocket/src/__init__.py +24 -0
  87. quantum/core/features/websocket/src/ast_node.py +247 -0
  88. quantum/core/html_compat.py +299 -0
  89. quantum/core/parser.py +1235 -0
  90. quantum/core/parser_registry.py +213 -0
  91. quantum/core/parsers/__init__.py +76 -0
  92. quantum/core/parsers/ai/__init__.py +12 -0
  93. quantum/core/parsers/ai/agent_parser.py +106 -0
  94. quantum/core/parsers/ai/knowledge_parser.py +86 -0
  95. quantum/core/parsers/ai/llm_parser.py +78 -0
  96. quantum/core/parsers/ai/team_parser.py +88 -0
  97. quantum/core/parsers/base.py +322 -0
  98. quantum/core/parsers/composition/__init__.py +10 -0
  99. quantum/core/parsers/composition/import_parser.py +50 -0
  100. quantum/core/parsers/composition/slot_parser.py +48 -0
  101. quantum/core/parsers/control_flow/__init__.py +11 -0
  102. quantum/core/parsers/control_flow/if_parser.py +68 -0
  103. quantum/core/parsers/control_flow/loop_parser.py +105 -0
  104. quantum/core/parsers/control_flow/set_parser.py +89 -0
  105. quantum/core/parsers/data/__init__.py +12 -0
  106. quantum/core/parsers/data/data_parser.py +217 -0
  107. quantum/core/parsers/data/invoke_parser.py +116 -0
  108. quantum/core/parsers/data/query_parser.py +188 -0
  109. quantum/core/parsers/data/transaction_parser.py +77 -0
  110. quantum/core/parsers/events/__init__.py +9 -0
  111. quantum/core/parsers/events/dispatch_event_parser.py +44 -0
  112. quantum/core/parsers/forms/__init__.py +11 -0
  113. quantum/core/parsers/forms/action_parser.py +54 -0
  114. quantum/core/parsers/forms/flash_parser.py +34 -0
  115. quantum/core/parsers/forms/redirect_parser.py +33 -0
  116. quantum/core/parsers/functions/__init__.py +11 -0
  117. quantum/core/parsers/functions/function_parser.py +137 -0
  118. quantum/core/parsers/functions/param_parser.py +66 -0
  119. quantum/core/parsers/functions/return_parser.py +31 -0
  120. quantum/core/parsers/html/__init__.py +10 -0
  121. quantum/core/parsers/html/component_call_parser.py +130 -0
  122. quantum/core/parsers/html/html_parser.py +115 -0
  123. quantum/core/parsers/jobs/__init__.py +11 -0
  124. quantum/core/parsers/jobs/job_parser.py +71 -0
  125. quantum/core/parsers/jobs/schedule_parser.py +62 -0
  126. quantum/core/parsers/jobs/thread_parser.py +57 -0
  127. quantum/core/parsers/messaging/__init__.py +17 -0
  128. quantum/core/parsers/messaging/message_ack_parser.py +30 -0
  129. quantum/core/parsers/messaging/message_nack_parser.py +30 -0
  130. quantum/core/parsers/messaging/message_parser.py +114 -0
  131. quantum/core/parsers/messaging/queue_parser.py +61 -0
  132. quantum/core/parsers/messaging/websocket_parser.py +121 -0
  133. quantum/core/parsers/persistence/__init__.py +9 -0
  134. quantum/core/parsers/persistence/persist_parser.py +64 -0
  135. quantum/core/parsers/routing/__init__.py +9 -0
  136. quantum/core/parsers/routing/route_parser.py +41 -0
  137. quantum/core/parsers/scripting/__init__.py +12 -0
  138. quantum/core/parsers/scripting/pyclass_parser.py +62 -0
  139. quantum/core/parsers/scripting/pydecorator_parser.py +68 -0
  140. quantum/core/parsers/scripting/pyimport_parser.py +52 -0
  141. quantum/core/parsers/scripting/python_parser.py +49 -0
  142. quantum/core/parsers/services/__init__.py +12 -0
  143. quantum/core/parsers/services/dump_parser.py +52 -0
  144. quantum/core/parsers/services/file_parser.py +48 -0
  145. quantum/core/parsers/services/log_parser.py +46 -0
  146. quantum/core/parsers/services/mail_parser.py +65 -0
  147. quantum/core/tiers.py +82 -0
  148. quantum/packages/__init__.py +28 -0
  149. quantum/packages/manager.py +413 -0
  150. quantum/packages/manifest.py +351 -0
  151. quantum/packages/registry.py +399 -0
  152. quantum/packages/resolver.py +336 -0
  153. quantum/plugins/__init__.py +33 -0
  154. quantum/plugins/hooks.py +329 -0
  155. quantum/plugins/loader.py +479 -0
  156. quantum/plugins/manifest.py +336 -0
  157. quantum/plugins/registry.py +371 -0
  158. quantum/runtime/__init__.py +28 -0
  159. quantum/runtime/action_handler.py +443 -0
  160. quantum/runtime/adapters/__init__.py +88 -0
  161. quantum/runtime/adapters/memory_adapter.py +690 -0
  162. quantum/runtime/adapters/rabbitmq_adapter.py +715 -0
  163. quantum/runtime/adapters/redis_adapter.py +582 -0
  164. quantum/runtime/adapters/sqlite_adapter.py +414 -0
  165. quantum/runtime/agent_service.py +1133 -0
  166. quantum/runtime/api_server.py +86 -0
  167. quantum/runtime/ast_cache.py +506 -0
  168. quantum/runtime/auth_service.py +267 -0
  169. quantum/runtime/component.py +990 -0
  170. quantum/runtime/component_composer.py +319 -0
  171. quantum/runtime/component_resolver.py +174 -0
  172. quantum/runtime/database_service.py +598 -0
  173. quantum/runtime/email_service.py +162 -0
  174. quantum/runtime/error_handler.py +295 -0
  175. quantum/runtime/execution_context.py +286 -0
  176. quantum/runtime/executor_registry.py +171 -0
  177. quantum/runtime/executors/__init__.py +71 -0
  178. quantum/runtime/executors/ai/__init__.py +12 -0
  179. quantum/runtime/executors/ai/agent_executor.py +217 -0
  180. quantum/runtime/executors/ai/knowledge_executor.py +114 -0
  181. quantum/runtime/executors/ai/llm_executor.py +153 -0
  182. quantum/runtime/executors/ai/team_executor.py +171 -0
  183. quantum/runtime/executors/base.py +262 -0
  184. quantum/runtime/executors/control_flow/__init__.py +11 -0
  185. quantum/runtime/executors/control_flow/if_executor.py +93 -0
  186. quantum/runtime/executors/control_flow/loop_executor.py +307 -0
  187. quantum/runtime/executors/control_flow/set_executor.py +412 -0
  188. quantum/runtime/executors/data/__init__.py +12 -0
  189. quantum/runtime/executors/data/data_executor.py +145 -0
  190. quantum/runtime/executors/data/invoke_executor.py +176 -0
  191. quantum/runtime/executors/data/query_executor.py +256 -0
  192. quantum/runtime/executors/data/transaction_executor.py +91 -0
  193. quantum/runtime/executors/jobs/__init__.py +11 -0
  194. quantum/runtime/executors/jobs/job_executor.py +190 -0
  195. quantum/runtime/executors/jobs/schedule_executor.py +132 -0
  196. quantum/runtime/executors/jobs/thread_executor.py +127 -0
  197. quantum/runtime/executors/messaging/__init__.py +17 -0
  198. quantum/runtime/executors/messaging/message_ack_executor.py +51 -0
  199. quantum/runtime/executors/messaging/message_executor.py +174 -0
  200. quantum/runtime/executors/messaging/queue_executor.py +103 -0
  201. quantum/runtime/executors/messaging/websocket_executor.py +197 -0
  202. quantum/runtime/executors/scripting/__init__.py +11 -0
  203. quantum/runtime/executors/scripting/pyclass_executor.py +90 -0
  204. quantum/runtime/executors/scripting/pyimport_executor.py +81 -0
  205. quantum/runtime/executors/scripting/python_executor.py +249 -0
  206. quantum/runtime/executors/services/__init__.py +12 -0
  207. quantum/runtime/executors/services/dump_executor.py +72 -0
  208. quantum/runtime/executors/services/file_executor.py +89 -0
  209. quantum/runtime/executors/services/log_executor.py +77 -0
  210. quantum/runtime/executors/services/mail_executor.py +81 -0
  211. quantum/runtime/expression_cache.py +498 -0
  212. quantum/runtime/file_upload_service.py +326 -0
  213. quantum/runtime/function_registry.py +118 -0
  214. quantum/runtime/game_builder.py +166 -0
  215. quantum/runtime/game_code_generator.py +2371 -0
  216. quantum/runtime/game_templates.py +2006 -0
  217. quantum/runtime/godot_code_generator.py +4681 -0
  218. quantum/runtime/godot_templates.py +1449 -0
  219. quantum/runtime/job_executor.py +1599 -0
  220. quantum/runtime/knowledge_service.py +500 -0
  221. quantum/runtime/llm_cache.py +100 -0
  222. quantum/runtime/llm_providers.py +704 -0
  223. quantum/runtime/llm_service.py +287 -0
  224. quantum/runtime/logging_setup.py +140 -0
  225. quantum/runtime/message_broker.py +364 -0
  226. quantum/runtime/message_queue_service.py +571 -0
  227. quantum/runtime/param_validation.py +184 -0
  228. quantum/runtime/pypy_compat.py +315 -0
  229. quantum/runtime/python_bridge.py +698 -0
  230. quantum/runtime/query_validators.py +304 -0
  231. quantum/runtime/renderer.py +733 -0
  232. quantum/runtime/service_container.py +444 -0
  233. quantum/runtime/terminal_builder.py +76 -0
  234. quantum/runtime/terminal_code_generator.py +607 -0
  235. quantum/runtime/terminal_templates.py +243 -0
  236. quantum/runtime/testing_builder.py +77 -0
  237. quantum/runtime/testing_code_generator.py +833 -0
  238. quantum/runtime/testing_templates.py +85 -0
  239. quantum/runtime/ui_builder.py +188 -0
  240. quantum/runtime/ui_desktop_adapter.py +1730 -0
  241. quantum/runtime/ui_desktop_templates.py +307 -0
  242. quantum/runtime/ui_html_adapter.py +2691 -0
  243. quantum/runtime/ui_html_templates.py +2297 -0
  244. quantum/runtime/ui_mobile_adapter.py +1832 -0
  245. quantum/runtime/ui_mobile_templates.py +1003 -0
  246. quantum/runtime/ui_textual_adapter.py +1866 -0
  247. quantum/runtime/ui_textual_templates.py +45 -0
  248. quantum/runtime/ui_tokens.py +465 -0
  249. quantum/runtime/ui_validator.py +365 -0
  250. quantum/runtime/validators.py +256 -0
  251. quantum/runtime/web_server.py +1766 -0
  252. quantum/runtime/websocket_adapter.py +501 -0
  253. quantum/runtime/websocket_service.py +585 -0
  254. quantum/runtime/websocket_transport.py +289 -0
  255. quantum/runtime/wsgi.py +101 -0
  256. quantum/utils/__init__.py +1 -0
  257. quantum_framework-0.9.0.dist-info/METADATA +244 -0
  258. quantum_framework-0.9.0.dist-info/RECORD +262 -0
  259. quantum_framework-0.9.0.dist-info/WHEEL +5 -0
  260. quantum_framework-0.9.0.dist-info/entry_points.txt +2 -0
  261. quantum_framework-0.9.0.dist-info/licenses/LICENSE +21 -0
  262. quantum_framework-0.9.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,270 @@
1
+ """
2
+ Quantum Code Optimizer
3
+ ======================
4
+
5
+ Optimizes generated code for better performance.
6
+ """
7
+
8
+ import re
9
+ import ast
10
+ from typing import List, Dict, Any, Optional, Tuple
11
+
12
+
13
+ class CodeOptimizer:
14
+ """
15
+ Optimizes generated Python/JavaScript code.
16
+
17
+ Supported optimizations:
18
+ - Constant folding: Evaluate constant expressions at compile time
19
+ - Dead code elimination: Remove unreachable code
20
+ - Loop unrolling: Inline small fixed loops
21
+ - String concatenation: Combine adjacent string literals
22
+ """
23
+
24
+ def __init__(self, target: str = 'python', level: int = 1):
25
+ """
26
+ Initialize optimizer.
27
+
28
+ Args:
29
+ target: Target language ('python' or 'javascript')
30
+ level: Optimization level (0=none, 1=safe, 2=aggressive)
31
+ """
32
+ self.target = target
33
+ self.level = level
34
+ self.stats: Dict[str, int] = {
35
+ 'constants_folded': 0,
36
+ 'dead_code_removed': 0,
37
+ 'loops_unrolled': 0,
38
+ 'strings_merged': 0
39
+ }
40
+
41
+ def optimize(self, code: str) -> str:
42
+ """
43
+ Apply all optimizations to code.
44
+
45
+ Args:
46
+ code: Generated code
47
+
48
+ Returns:
49
+ Optimized code
50
+ """
51
+ if self.level == 0:
52
+ return code
53
+
54
+ result = code
55
+
56
+ # Level 1: Safe optimizations
57
+ result = self._fold_constants(result)
58
+ result = self._merge_strings(result)
59
+
60
+ # Level 2: Aggressive optimizations
61
+ if self.level >= 2:
62
+ result = self._unroll_small_loops(result)
63
+ result = self._eliminate_dead_code(result)
64
+
65
+ return result
66
+
67
+ def _fold_constants(self, code: str) -> str:
68
+ """
69
+ Fold constant expressions.
70
+
71
+ Examples:
72
+ x = 1 + 2 -> x = 3
73
+ y = 10 * 5 -> y = 50
74
+ """
75
+ if self.target == 'python':
76
+ # Pattern: simple arithmetic with integer literals
77
+ patterns = [
78
+ # Integer arithmetic
79
+ (r'(\d+)\s*\+\s*(\d+)', lambda m: str(int(m.group(1)) + int(m.group(2)))),
80
+ (r'(\d+)\s*\-\s*(\d+)', lambda m: str(int(m.group(1)) - int(m.group(2)))),
81
+ (r'(\d+)\s*\*\s*(\d+)', lambda m: str(int(m.group(1)) * int(m.group(2)))),
82
+ # Boolean literals
83
+ (r'True and True', lambda m: 'True'),
84
+ (r'True and False', lambda m: 'False'),
85
+ (r'False and True', lambda m: 'False'),
86
+ (r'False and False', lambda m: 'False'),
87
+ (r'True or False', lambda m: 'True'),
88
+ (r'False or True', lambda m: 'True'),
89
+ (r'False or False', lambda m: 'False'),
90
+ (r'True or True', lambda m: 'True'),
91
+ (r'not True', lambda m: 'False'),
92
+ (r'not False', lambda m: 'True'),
93
+ ]
94
+ else: # JavaScript
95
+ patterns = [
96
+ (r'(\d+)\s*\+\s*(\d+)', lambda m: str(int(m.group(1)) + int(m.group(2)))),
97
+ (r'(\d+)\s*\-\s*(\d+)', lambda m: str(int(m.group(1)) - int(m.group(2)))),
98
+ (r'(\d+)\s*\*\s*(\d+)', lambda m: str(int(m.group(1)) * int(m.group(2)))),
99
+ (r'true && true', lambda m: 'true'),
100
+ (r'true && false', lambda m: 'false'),
101
+ (r'false && true', lambda m: 'false'),
102
+ (r'false && false', lambda m: 'false'),
103
+ (r'!true', lambda m: 'false'),
104
+ (r'!false', lambda m: 'true'),
105
+ ]
106
+
107
+ result = code
108
+ for pattern, replacement in patterns:
109
+ new_result = re.sub(pattern, replacement, result)
110
+ if new_result != result:
111
+ self.stats['constants_folded'] += len(re.findall(pattern, result))
112
+ result = new_result
113
+
114
+ return result
115
+
116
+ def _merge_strings(self, code: str) -> str:
117
+ """
118
+ Merge adjacent string literal appends.
119
+
120
+ Example:
121
+ _html.append('<div>')
122
+ _html.append('text')
123
+ _html.append('</div>')
124
+ Becomes:
125
+ _html.append('<div>text</div>')
126
+ """
127
+ if self.target == 'python':
128
+ # Find consecutive _html.append('...') lines
129
+ pattern = r"(_html\.append\('([^'\\]|\\.)*'\)\n)+_html\.append\('([^'\\]|\\.)*'\)"
130
+
131
+ def merge_appends(match):
132
+ text = match.group(0)
133
+ # Extract all string literals
134
+ strings = re.findall(r"_html\.append\('((?:[^'\\]|\\.)*)'\)", text)
135
+ if len(strings) > 1:
136
+ self.stats['strings_merged'] += len(strings) - 1
137
+ merged = ''.join(strings)
138
+ return f"_html.append('{merged}')"
139
+ return text
140
+
141
+ return re.sub(pattern, merge_appends, code)
142
+
143
+ elif self.target == 'javascript':
144
+ # Similar for JavaScript
145
+ pattern = r"(_html\.push\(`[^`]*`\);\n)+_html\.push\(`[^`]*`\);"
146
+
147
+ def merge_pushes(match):
148
+ text = match.group(0)
149
+ strings = re.findall(r"_html\.push\(`([^`]*)`\);", text)
150
+ if len(strings) > 1:
151
+ self.stats['strings_merged'] += len(strings) - 1
152
+ merged = ''.join(strings)
153
+ return f"_html.push(`{merged}`);"
154
+ return text
155
+
156
+ return re.sub(pattern, merge_pushes, code)
157
+
158
+ return code
159
+
160
+ def _unroll_small_loops(self, code: str) -> str:
161
+ """
162
+ Unroll small fixed-iteration loops.
163
+
164
+ Example:
165
+ for i in range(1, 4):
166
+ _html.append(f'<li>{i}</li>')
167
+ Becomes:
168
+ _html.append('<li>1</li>')
169
+ _html.append('<li>2</li>')
170
+ _html.append('<li>3</li>')
171
+ """
172
+ # Only unroll very small loops (3 or fewer iterations)
173
+ if self.target == 'python':
174
+ # Find: for x in range(a, b): with small range
175
+ pattern = r'for (\w+) in range\((\d+), (\d+)\):\n((?:[ \t]+.+\n)+)'
176
+
177
+ def unroll(match):
178
+ var = match.group(1)
179
+ start = int(match.group(2))
180
+ end = int(match.group(3))
181
+ body = match.group(4)
182
+
183
+ # Only unroll if <= 3 iterations
184
+ if end - start > 3:
185
+ return match.group(0)
186
+
187
+ self.stats['loops_unrolled'] += 1
188
+
189
+ # Get indent level
190
+ indent = re.match(r'^([ \t]*)', body).group(1)
191
+ # Remove one level of indentation
192
+ body_stripped = re.sub(r'^' + indent, '', body, flags=re.MULTILINE)
193
+
194
+ result = []
195
+ for i in range(start, end):
196
+ # Replace variable references
197
+ unrolled = body_stripped.replace(f'{{{var}}}', str(i))
198
+ unrolled = re.sub(rf'\b{var}\b', str(i), unrolled)
199
+ result.append(unrolled.rstrip())
200
+
201
+ return '\n'.join(result) + '\n'
202
+
203
+ return re.sub(pattern, unroll, code)
204
+
205
+ return code
206
+
207
+ def _eliminate_dead_code(self, code: str) -> str:
208
+ """
209
+ Remove unreachable code.
210
+
211
+ Examples:
212
+ if False:
213
+ # This block is removed
214
+
215
+ return x
216
+ y = 10 # This line is removed
217
+ """
218
+ lines = code.split('\n')
219
+ result = []
220
+ skip_until_dedent = False
221
+ current_indent = 0
222
+
223
+ for line in lines:
224
+ stripped = line.lstrip()
225
+
226
+ # Skip empty lines in dead code blocks
227
+ if skip_until_dedent:
228
+ if stripped:
229
+ indent = len(line) - len(stripped)
230
+ if indent <= current_indent:
231
+ skip_until_dedent = False
232
+ else:
233
+ self.stats['dead_code_removed'] += 1
234
+ continue
235
+ else:
236
+ continue
237
+
238
+ # Check for if False:
239
+ if self.target == 'python' and re.match(r'if\s+False\s*:', stripped):
240
+ skip_until_dedent = True
241
+ current_indent = len(line) - len(stripped)
242
+ self.stats['dead_code_removed'] += 1
243
+ continue
244
+
245
+ # Check for if (false) in JavaScript
246
+ if self.target == 'javascript' and re.match(r'if\s*\(\s*false\s*\)', stripped):
247
+ skip_until_dedent = True
248
+ current_indent = len(line) - len(stripped)
249
+ self.stats['dead_code_removed'] += 1
250
+ continue
251
+
252
+ result.append(line)
253
+
254
+ return '\n'.join(result)
255
+
256
+ def get_stats(self) -> Dict[str, int]:
257
+ """Get optimization statistics."""
258
+ return self.stats.copy()
259
+
260
+
261
+ def optimize_python(code: str, level: int = 1) -> str:
262
+ """Optimize Python code."""
263
+ optimizer = CodeOptimizer(target='python', level=level)
264
+ return optimizer.optimize(code)
265
+
266
+
267
+ def optimize_javascript(code: str, level: int = 1) -> str:
268
+ """Optimize JavaScript code."""
269
+ optimizer = CodeOptimizer(target='javascript', level=level)
270
+ return optimizer.optimize(code)
@@ -0,0 +1,10 @@
1
+ """
2
+ Python Code Generator
3
+ =====================
4
+
5
+ Generates Python code from Quantum AST.
6
+ """
7
+
8
+ from .generator import PythonGenerator
9
+
10
+ __all__ = ['PythonGenerator']