flowquery 1.0.46 → 1.0.47

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 (413) hide show
  1. package/dist/index.d.ts +0 -7
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -4
  4. package/dist/index.js.map +1 -1
  5. package/package.json +4 -1
  6. package/.editorconfig +0 -21
  7. package/.gitattributes +0 -3
  8. package/.github/workflows/npm-publish.yml +0 -32
  9. package/.github/workflows/python-publish.yml +0 -143
  10. package/.github/workflows/release.yml +0 -107
  11. package/.husky/pre-commit +0 -28
  12. package/.prettierrc +0 -22
  13. package/CODE_OF_CONDUCT.md +0 -10
  14. package/FlowQueryLogoIcon.png +0 -0
  15. package/SECURITY.md +0 -14
  16. package/SUPPORT.md +0 -13
  17. package/docs/flowquery.min.js +0 -1
  18. package/docs/index.html +0 -105
  19. package/flowquery-py/CONTRIBUTING.md +0 -127
  20. package/flowquery-py/README.md +0 -67
  21. package/flowquery-py/misc/data/test.json +0 -10
  22. package/flowquery-py/misc/data/users.json +0 -242
  23. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  24. package/flowquery-py/pyproject.toml +0 -121
  25. package/flowquery-py/setup_env.ps1 +0 -92
  26. package/flowquery-py/setup_env.sh +0 -87
  27. package/flowquery-py/src/__init__.py +0 -38
  28. package/flowquery-py/src/__main__.py +0 -10
  29. package/flowquery-py/src/compute/__init__.py +0 -6
  30. package/flowquery-py/src/compute/flowquery.py +0 -68
  31. package/flowquery-py/src/compute/runner.py +0 -64
  32. package/flowquery-py/src/extensibility.py +0 -52
  33. package/flowquery-py/src/graph/__init__.py +0 -31
  34. package/flowquery-py/src/graph/data.py +0 -136
  35. package/flowquery-py/src/graph/database.py +0 -141
  36. package/flowquery-py/src/graph/hops.py +0 -43
  37. package/flowquery-py/src/graph/node.py +0 -143
  38. package/flowquery-py/src/graph/node_data.py +0 -26
  39. package/flowquery-py/src/graph/node_reference.py +0 -50
  40. package/flowquery-py/src/graph/pattern.py +0 -115
  41. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  42. package/flowquery-py/src/graph/patterns.py +0 -42
  43. package/flowquery-py/src/graph/physical_node.py +0 -41
  44. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  45. package/flowquery-py/src/graph/relationship.py +0 -193
  46. package/flowquery-py/src/graph/relationship_data.py +0 -36
  47. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  48. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  49. package/flowquery-py/src/io/__init__.py +0 -5
  50. package/flowquery-py/src/io/command_line.py +0 -108
  51. package/flowquery-py/src/parsing/__init__.py +0 -17
  52. package/flowquery-py/src/parsing/alias.py +0 -20
  53. package/flowquery-py/src/parsing/alias_option.py +0 -11
  54. package/flowquery-py/src/parsing/ast_node.py +0 -147
  55. package/flowquery-py/src/parsing/base_parser.py +0 -84
  56. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  57. package/flowquery-py/src/parsing/components/csv.py +0 -8
  58. package/flowquery-py/src/parsing/components/from_.py +0 -12
  59. package/flowquery-py/src/parsing/components/headers.py +0 -12
  60. package/flowquery-py/src/parsing/components/json.py +0 -8
  61. package/flowquery-py/src/parsing/components/null.py +0 -10
  62. package/flowquery-py/src/parsing/components/post.py +0 -8
  63. package/flowquery-py/src/parsing/components/text.py +0 -8
  64. package/flowquery-py/src/parsing/context.py +0 -50
  65. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  66. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  67. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  68. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  69. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  70. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  71. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  72. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  73. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  74. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  75. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  76. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  77. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  78. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  79. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  80. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  81. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  82. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  83. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  84. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  85. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  86. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  87. package/flowquery-py/src/parsing/functions/count.py +0 -79
  88. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  89. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  90. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  91. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  92. package/flowquery-py/src/parsing/functions/function.py +0 -68
  93. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  94. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  95. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  96. package/flowquery-py/src/parsing/functions/head.py +0 -39
  97. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  98. package/flowquery-py/src/parsing/functions/join.py +0 -49
  99. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  100. package/flowquery-py/src/parsing/functions/last.py +0 -39
  101. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  102. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  103. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  104. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  105. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  106. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  107. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  108. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  109. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  110. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  111. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  112. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  113. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  114. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  115. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  116. package/flowquery-py/src/parsing/functions/size.py +0 -34
  117. package/flowquery-py/src/parsing/functions/split.py +0 -54
  118. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  119. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  120. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  121. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  122. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  123. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  124. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  125. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  126. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  127. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  128. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  129. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  130. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  131. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  132. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  133. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  134. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  135. package/flowquery-py/src/parsing/logic/case.py +0 -28
  136. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  137. package/flowquery-py/src/parsing/logic/end.py +0 -8
  138. package/flowquery-py/src/parsing/logic/then.py +0 -12
  139. package/flowquery-py/src/parsing/logic/when.py +0 -12
  140. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  141. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  142. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  143. package/flowquery-py/src/parsing/operations/call.py +0 -73
  144. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  145. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  146. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  147. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  148. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  149. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  150. package/flowquery-py/src/parsing/operations/load.py +0 -148
  151. package/flowquery-py/src/parsing/operations/match.py +0 -52
  152. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  153. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  154. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  155. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  156. package/flowquery-py/src/parsing/operations/union.py +0 -115
  157. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  158. package/flowquery-py/src/parsing/operations/unwind.py +0 -42
  159. package/flowquery-py/src/parsing/operations/where.py +0 -43
  160. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  161. package/flowquery-py/src/parsing/parser.py +0 -1384
  162. package/flowquery-py/src/parsing/parser_state.py +0 -26
  163. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  164. package/flowquery-py/src/tokenization/__init__.py +0 -23
  165. package/flowquery-py/src/tokenization/keyword.py +0 -54
  166. package/flowquery-py/src/tokenization/operator.py +0 -29
  167. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  168. package/flowquery-py/src/tokenization/symbol.py +0 -19
  169. package/flowquery-py/src/tokenization/token.py +0 -693
  170. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  171. package/flowquery-py/src/tokenization/token_type.py +0 -21
  172. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  173. package/flowquery-py/src/tokenization/trie.py +0 -125
  174. package/flowquery-py/src/utils/__init__.py +0 -6
  175. package/flowquery-py/src/utils/object_utils.py +0 -20
  176. package/flowquery-py/src/utils/string_utils.py +0 -113
  177. package/flowquery-py/tests/__init__.py +0 -1
  178. package/flowquery-py/tests/compute/__init__.py +0 -1
  179. package/flowquery-py/tests/compute/test_runner.py +0 -4902
  180. package/flowquery-py/tests/graph/__init__.py +0 -1
  181. package/flowquery-py/tests/graph/test_create.py +0 -56
  182. package/flowquery-py/tests/graph/test_data.py +0 -73
  183. package/flowquery-py/tests/graph/test_match.py +0 -40
  184. package/flowquery-py/tests/parsing/__init__.py +0 -1
  185. package/flowquery-py/tests/parsing/test_context.py +0 -34
  186. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  187. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  188. package/flowquery-py/tests/test_extensibility.py +0 -611
  189. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  190. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  191. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  192. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  193. package/flowquery-vscode/.vscode-test.mjs +0 -5
  194. package/flowquery-vscode/.vscodeignore +0 -13
  195. package/flowquery-vscode/LICENSE +0 -21
  196. package/flowquery-vscode/README.md +0 -11
  197. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  198. package/flowquery-vscode/eslint.config.mjs +0 -25
  199. package/flowquery-vscode/extension.js +0 -508
  200. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  201. package/flowquery-vscode/flowquery-worker.js +0 -66
  202. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  203. package/flowquery-vscode/jsconfig.json +0 -13
  204. package/flowquery-vscode/libs/page.css +0 -53
  205. package/flowquery-vscode/libs/table.css +0 -13
  206. package/flowquery-vscode/libs/tabs.css +0 -66
  207. package/flowquery-vscode/package-lock.json +0 -2917
  208. package/flowquery-vscode/package.json +0 -51
  209. package/flowquery-vscode/test/extension.test.js +0 -196
  210. package/flowquery-vscode/test/worker.test.js +0 -25
  211. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  212. package/jest.config.js +0 -14
  213. package/misc/apps/RAG/README.md +0 -29
  214. package/misc/apps/RAG/data/chats.json +0 -302
  215. package/misc/apps/RAG/data/emails.json +0 -182
  216. package/misc/apps/RAG/data/events.json +0 -226
  217. package/misc/apps/RAG/data/files.json +0 -172
  218. package/misc/apps/RAG/data/users.json +0 -158
  219. package/misc/apps/RAG/jest.config.js +0 -21
  220. package/misc/apps/RAG/package.json +0 -48
  221. package/misc/apps/RAG/public/index.html +0 -18
  222. package/misc/apps/RAG/src/App.css +0 -42
  223. package/misc/apps/RAG/src/App.tsx +0 -50
  224. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  225. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  226. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  227. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  228. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  229. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  230. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  231. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  232. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  233. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  234. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  235. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  236. package/misc/apps/RAG/src/components/index.ts +0 -28
  237. package/misc/apps/RAG/src/graph/index.ts +0 -19
  238. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  239. package/misc/apps/RAG/src/index.tsx +0 -29
  240. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  241. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  242. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  243. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  244. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  245. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  246. package/misc/apps/RAG/src/utils/index.ts +0 -12
  247. package/misc/apps/RAG/tsconfig.json +0 -22
  248. package/misc/apps/RAG/webpack.config.js +0 -43
  249. package/misc/apps/README.md +0 -1
  250. package/misc/queries/analyze_catfacts.cql +0 -75
  251. package/misc/queries/azure_openai_completions.cql +0 -13
  252. package/misc/queries/azure_openai_models.cql +0 -9
  253. package/misc/queries/mock_pipeline.cql +0 -84
  254. package/misc/queries/openai_completions.cql +0 -15
  255. package/misc/queries/openai_models.cql +0 -13
  256. package/misc/queries/test.cql +0 -6
  257. package/misc/queries/tool_inference.cql +0 -24
  258. package/misc/queries/wisdom.cql +0 -6
  259. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  260. package/src/compute/flowquery.ts +0 -46
  261. package/src/compute/runner.ts +0 -66
  262. package/src/extensibility.ts +0 -45
  263. package/src/graph/data.ts +0 -130
  264. package/src/graph/database.ts +0 -143
  265. package/src/graph/hops.ts +0 -22
  266. package/src/graph/node.ts +0 -122
  267. package/src/graph/node_data.ts +0 -18
  268. package/src/graph/node_reference.ts +0 -38
  269. package/src/graph/pattern.ts +0 -110
  270. package/src/graph/pattern_expression.ts +0 -48
  271. package/src/graph/patterns.ts +0 -36
  272. package/src/graph/physical_node.ts +0 -23
  273. package/src/graph/physical_relationship.ts +0 -23
  274. package/src/graph/relationship.ts +0 -167
  275. package/src/graph/relationship_data.ts +0 -31
  276. package/src/graph/relationship_match_collector.ts +0 -64
  277. package/src/graph/relationship_reference.ts +0 -25
  278. package/src/index.browser.ts +0 -46
  279. package/src/index.node.ts +0 -55
  280. package/src/index.ts +0 -12
  281. package/src/io/command_line.ts +0 -74
  282. package/src/parsing/alias.ts +0 -23
  283. package/src/parsing/alias_option.ts +0 -5
  284. package/src/parsing/ast_node.ts +0 -153
  285. package/src/parsing/base_parser.ts +0 -98
  286. package/src/parsing/components/csv.ts +0 -9
  287. package/src/parsing/components/from.ts +0 -12
  288. package/src/parsing/components/headers.ts +0 -12
  289. package/src/parsing/components/json.ts +0 -9
  290. package/src/parsing/components/null.ts +0 -9
  291. package/src/parsing/components/post.ts +0 -9
  292. package/src/parsing/components/text.ts +0 -9
  293. package/src/parsing/context.ts +0 -54
  294. package/src/parsing/data_structures/associative_array.ts +0 -43
  295. package/src/parsing/data_structures/json_array.ts +0 -31
  296. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  297. package/src/parsing/data_structures/lookup.ts +0 -44
  298. package/src/parsing/data_structures/range_lookup.ts +0 -36
  299. package/src/parsing/expressions/boolean.ts +0 -21
  300. package/src/parsing/expressions/expression.ts +0 -150
  301. package/src/parsing/expressions/expression_map.ts +0 -22
  302. package/src/parsing/expressions/f_string.ts +0 -26
  303. package/src/parsing/expressions/identifier.ts +0 -22
  304. package/src/parsing/expressions/number.ts +0 -40
  305. package/src/parsing/expressions/operator.ts +0 -354
  306. package/src/parsing/expressions/reference.ts +0 -45
  307. package/src/parsing/expressions/string.ts +0 -34
  308. package/src/parsing/functions/aggregate_function.ts +0 -58
  309. package/src/parsing/functions/async_function.ts +0 -64
  310. package/src/parsing/functions/avg.ts +0 -47
  311. package/src/parsing/functions/coalesce.ts +0 -49
  312. package/src/parsing/functions/collect.ts +0 -54
  313. package/src/parsing/functions/count.ts +0 -54
  314. package/src/parsing/functions/date.ts +0 -63
  315. package/src/parsing/functions/datetime.ts +0 -63
  316. package/src/parsing/functions/duration.ts +0 -143
  317. package/src/parsing/functions/element_id.ts +0 -51
  318. package/src/parsing/functions/function.ts +0 -60
  319. package/src/parsing/functions/function_factory.ts +0 -195
  320. package/src/parsing/functions/function_metadata.ts +0 -217
  321. package/src/parsing/functions/functions.ts +0 -70
  322. package/src/parsing/functions/head.ts +0 -42
  323. package/src/parsing/functions/id.ts +0 -51
  324. package/src/parsing/functions/join.ts +0 -40
  325. package/src/parsing/functions/keys.ts +0 -29
  326. package/src/parsing/functions/last.ts +0 -42
  327. package/src/parsing/functions/localdatetime.ts +0 -63
  328. package/src/parsing/functions/localtime.ts +0 -58
  329. package/src/parsing/functions/max.ts +0 -37
  330. package/src/parsing/functions/min.ts +0 -37
  331. package/src/parsing/functions/nodes.ts +0 -54
  332. package/src/parsing/functions/predicate_function.ts +0 -48
  333. package/src/parsing/functions/predicate_sum.ts +0 -47
  334. package/src/parsing/functions/properties.ts +0 -56
  335. package/src/parsing/functions/rand.ts +0 -21
  336. package/src/parsing/functions/range.ts +0 -37
  337. package/src/parsing/functions/reducer_element.ts +0 -10
  338. package/src/parsing/functions/relationships.ts +0 -52
  339. package/src/parsing/functions/replace.ts +0 -38
  340. package/src/parsing/functions/round.ts +0 -28
  341. package/src/parsing/functions/schema.ts +0 -39
  342. package/src/parsing/functions/size.ts +0 -28
  343. package/src/parsing/functions/split.ts +0 -45
  344. package/src/parsing/functions/string_distance.ts +0 -83
  345. package/src/parsing/functions/stringify.ts +0 -37
  346. package/src/parsing/functions/substring.ts +0 -68
  347. package/src/parsing/functions/sum.ts +0 -41
  348. package/src/parsing/functions/tail.ts +0 -39
  349. package/src/parsing/functions/temporal_utils.ts +0 -180
  350. package/src/parsing/functions/time.ts +0 -58
  351. package/src/parsing/functions/timestamp.ts +0 -37
  352. package/src/parsing/functions/to_float.ts +0 -50
  353. package/src/parsing/functions/to_integer.ts +0 -50
  354. package/src/parsing/functions/to_json.ts +0 -28
  355. package/src/parsing/functions/to_lower.ts +0 -28
  356. package/src/parsing/functions/to_string.ts +0 -32
  357. package/src/parsing/functions/trim.ts +0 -28
  358. package/src/parsing/functions/type.ts +0 -39
  359. package/src/parsing/functions/value_holder.ts +0 -13
  360. package/src/parsing/logic/case.ts +0 -26
  361. package/src/parsing/logic/else.ts +0 -12
  362. package/src/parsing/logic/end.ts +0 -9
  363. package/src/parsing/logic/then.ts +0 -12
  364. package/src/parsing/logic/when.ts +0 -12
  365. package/src/parsing/operations/aggregated_return.ts +0 -22
  366. package/src/parsing/operations/aggregated_with.ts +0 -18
  367. package/src/parsing/operations/call.ts +0 -69
  368. package/src/parsing/operations/create_node.ts +0 -39
  369. package/src/parsing/operations/create_relationship.ts +0 -38
  370. package/src/parsing/operations/delete_node.ts +0 -33
  371. package/src/parsing/operations/delete_relationship.ts +0 -32
  372. package/src/parsing/operations/group_by.ts +0 -137
  373. package/src/parsing/operations/limit.ts +0 -31
  374. package/src/parsing/operations/load.ts +0 -146
  375. package/src/parsing/operations/match.ts +0 -54
  376. package/src/parsing/operations/operation.ts +0 -69
  377. package/src/parsing/operations/order_by.ts +0 -126
  378. package/src/parsing/operations/projection.ts +0 -18
  379. package/src/parsing/operations/return.ts +0 -76
  380. package/src/parsing/operations/union.ts +0 -114
  381. package/src/parsing/operations/union_all.ts +0 -16
  382. package/src/parsing/operations/unwind.ts +0 -36
  383. package/src/parsing/operations/where.ts +0 -42
  384. package/src/parsing/operations/with.ts +0 -20
  385. package/src/parsing/parser.ts +0 -1641
  386. package/src/parsing/parser_state.ts +0 -25
  387. package/src/parsing/token_to_node.ts +0 -114
  388. package/src/tokenization/keyword.ts +0 -50
  389. package/src/tokenization/operator.ts +0 -25
  390. package/src/tokenization/string_walker.ts +0 -197
  391. package/src/tokenization/symbol.ts +0 -15
  392. package/src/tokenization/token.ts +0 -764
  393. package/src/tokenization/token_mapper.ts +0 -53
  394. package/src/tokenization/token_type.ts +0 -16
  395. package/src/tokenization/tokenizer.ts +0 -250
  396. package/src/tokenization/trie.ts +0 -117
  397. package/src/utils/object_utils.ts +0 -17
  398. package/src/utils/string_utils.ts +0 -114
  399. package/tests/compute/runner.test.ts +0 -4559
  400. package/tests/extensibility.test.ts +0 -643
  401. package/tests/graph/create.test.ts +0 -36
  402. package/tests/graph/data.test.ts +0 -58
  403. package/tests/graph/match.test.ts +0 -29
  404. package/tests/parsing/context.test.ts +0 -27
  405. package/tests/parsing/expression.test.ts +0 -303
  406. package/tests/parsing/parser.test.ts +0 -1327
  407. package/tests/tokenization/token_mapper.test.ts +0 -47
  408. package/tests/tokenization/tokenizer.test.ts +0 -191
  409. package/tests/tokenization/trie.test.ts +0 -20
  410. package/tsconfig.json +0 -19
  411. package/typedoc.json +0 -16
  412. package/vscode-settings.json.recommended +0 -16
  413. package/webpack.config.js +0 -26
@@ -1,54 +0,0 @@
1
- """Split function."""
2
-
3
- from typing import Any, List
4
-
5
- from ..ast_node import ASTNode
6
- from ..expressions.string import String
7
- from .function import Function
8
- from .function_metadata import FunctionDef
9
-
10
-
11
- @FunctionDef({
12
- "description": "Splits a string into an array by a delimiter",
13
- "category": "scalar",
14
- "parameters": [
15
- {"name": "text", "description": "String to split", "type": "string"},
16
- {"name": "delimiter", "description": "Delimiter to split by", "type": "string"}
17
- ],
18
- "output": {
19
- "description": "Array of string parts",
20
- "type": "array",
21
- "items": {"type": "string"},
22
- "example": ["a", "b", "c"]
23
- },
24
- "examples": ["WITH 'a,b,c' AS s RETURN split(s, ',')"]
25
- })
26
- class Split(Function):
27
- """Split function.
28
-
29
- Splits a string into an array by a delimiter.
30
- """
31
-
32
- def __init__(self) -> None:
33
- super().__init__("split")
34
- self._expected_parameter_count = 2
35
-
36
- @property
37
- def parameters(self) -> List[ASTNode]:
38
- return self.get_children()
39
-
40
- @parameters.setter
41
- def parameters(self, nodes: List[ASTNode]) -> None:
42
- if len(nodes) == 1:
43
- nodes.append(String(""))
44
- for node in nodes:
45
- self.add_child(node)
46
-
47
- def value(self) -> Any:
48
- text = self.get_children()[0].value()
49
- delimiter = self.get_children()[1].value()
50
- if text is None:
51
- return None
52
- if not isinstance(text, str) or not isinstance(delimiter, str):
53
- raise ValueError("Invalid arguments for split function")
54
- return text.split(delimiter)
@@ -1,92 +0,0 @@
1
- """String distance function using Levenshtein distance."""
2
-
3
- from typing import Optional
4
-
5
- from .function import Function
6
- from .function_metadata import FunctionDef
7
-
8
-
9
- def _levenshtein_distance(a: str, b: str) -> float:
10
- """Compute the normalized Levenshtein distance between two strings.
11
-
12
- The Levenshtein distance is the minimum number of single-character edits
13
- (insertions, deletions, or substitutions) required to change one string
14
- into the other. The result is normalized to [0, 1] by dividing by the
15
- length of the longer string.
16
-
17
- Args:
18
- a: First string
19
- b: Second string
20
-
21
- Returns:
22
- The normalized Levenshtein distance (0 = identical, 1 = completely different)
23
- """
24
- m = len(a)
25
- n = len(b)
26
-
27
- # Both empty strings are identical
28
- if m == 0 and n == 0:
29
- return 0.0
30
-
31
- # Create a matrix of size (m+1) x (n+1)
32
- dp = [[0] * (n + 1) for _ in range(m + 1)]
33
-
34
- # Base cases: transforming empty string to/from a prefix
35
- for i in range(m + 1):
36
- dp[i][0] = i
37
- for j in range(n + 1):
38
- dp[0][j] = j
39
-
40
- # Fill in the rest of the matrix
41
- for i in range(1, m + 1):
42
- for j in range(1, n + 1):
43
- cost = 0 if a[i - 1] == b[j - 1] else 1
44
- dp[i][j] = min(
45
- dp[i - 1][j] + 1, # deletion
46
- dp[i][j - 1] + 1, # insertion
47
- dp[i - 1][j - 1] + cost # substitution
48
- )
49
-
50
- # Normalize by the length of the longer string
51
- return dp[m][n] / max(m, n)
52
-
53
-
54
- @FunctionDef({
55
- "description": (
56
- "Computes the normalized Levenshtein distance between two strings. "
57
- "Returns a value in [0, 1] where 0 means identical and 1 means completely different."
58
- ),
59
- "category": "scalar",
60
- "parameters": [
61
- {"name": "string1", "description": "First string", "type": "string"},
62
- {"name": "string2", "description": "Second string", "type": "string"}
63
- ],
64
- "output": {
65
- "description": "Normalized Levenshtein distance (0 = identical, 1 = completely different)",
66
- "type": "number",
67
- "example": 0.43,
68
- },
69
- "examples": [
70
- "RETURN string_distance('kitten', 'sitting')",
71
- "WITH 'hello' AS a, 'hallo' AS b RETURN string_distance(a, b)"
72
- ]
73
- })
74
- class StringDistance(Function):
75
- """String distance function.
76
-
77
- Computes the normalized Levenshtein distance between two strings.
78
- Returns a value in [0, 1] where 0 means identical and 1 means completely different.
79
- """
80
-
81
- def __init__(self) -> None:
82
- super().__init__("string_distance")
83
- self._expected_parameter_count = 2
84
-
85
- def value(self) -> Optional[float]:
86
- str1 = self.get_children()[0].value()
87
- str2 = self.get_children()[1].value()
88
- if str1 is None or str2 is None:
89
- return None
90
- if not isinstance(str1, str) or not isinstance(str2, str):
91
- raise ValueError("Invalid arguments for string_distance function: both arguments must be strings")
92
- return _levenshtein_distance(str1, str2)
@@ -1,49 +0,0 @@
1
- """Stringify function."""
2
-
3
- import json
4
- from typing import Any, List
5
-
6
- from ..ast_node import ASTNode
7
- from ..expressions.number import Number
8
- from .function import Function
9
- from .function_metadata import FunctionDef
10
-
11
-
12
- @FunctionDef({
13
- "description": "Converts a value to its JSON string representation",
14
- "category": "scalar",
15
- "parameters": [
16
- {"name": "value", "description": "Value to stringify", "type": "any"}
17
- ],
18
- "output": {"description": "JSON string", "type": "string", "example": '{"a":1}'},
19
- "examples": ["WITH {a: 1} AS obj RETURN stringify(obj)"]
20
- })
21
- class Stringify(Function):
22
- """Stringify function.
23
-
24
- Converts a value to its JSON string representation.
25
- """
26
-
27
- def __init__(self) -> None:
28
- super().__init__("stringify")
29
- self._expected_parameter_count = 2
30
-
31
- @property
32
- def parameters(self) -> List[ASTNode]:
33
- return self.get_children()
34
-
35
- @parameters.setter
36
- def parameters(self, nodes: List[ASTNode]) -> None:
37
- if len(nodes) == 1:
38
- nodes.append(Number("3")) # Default indent of 3
39
- for node in nodes:
40
- self.add_child(node)
41
-
42
- def value(self) -> Any:
43
- val = self.get_children()[0].value()
44
- indent = int(self.get_children()[1].value())
45
- if val is None:
46
- return None
47
- if not isinstance(val, (dict, list)):
48
- raise ValueError("Invalid argument for stringify function")
49
- return json.dumps(val, indent=indent, default=str)
@@ -1,76 +0,0 @@
1
- """Substring function."""
2
-
3
- from typing import Any, List
4
-
5
- from ..ast_node import ASTNode
6
- from .function import Function
7
- from .function_metadata import FunctionDef
8
-
9
-
10
- @FunctionDef({
11
- "description": "Returns a substring of a string, starting at a 0-based index with an optional length",
12
- "category": "scalar",
13
- "parameters": [
14
- {"name": "original", "description": "The original string", "type": "string"},
15
- {"name": "start", "description": "The 0-based start index", "type": "integer"},
16
- {
17
- "name": "length",
18
- "description": "The length of the substring (optional)",
19
- "type": "integer",
20
- }
21
- ],
22
- "output": {"description": "The substring", "type": "string", "example": "llo"},
23
- "examples": [
24
- "RETURN substring('hello', 1, 3)",
25
- "RETURN substring('hello', 2)"
26
- ]
27
- })
28
- class Substring(Function):
29
- """Substring function.
30
-
31
- Returns a substring of a string, starting at a 0-based index with an optional length.
32
- """
33
-
34
- def __init__(self) -> None:
35
- super().__init__("substring")
36
-
37
- @property
38
- def parameters(self) -> List[ASTNode]:
39
- return self.get_children()
40
-
41
- @parameters.setter
42
- def parameters(self, nodes: List[ASTNode]) -> None:
43
- if len(nodes) < 2 or len(nodes) > 3:
44
- raise ValueError(
45
- f"Function substring expected 2 or 3 parameters, but got {len(nodes)}"
46
- )
47
- for node in nodes:
48
- self.add_child(node)
49
-
50
- def value(self) -> Any:
51
- children = self.get_children()
52
- original = children[0].value()
53
- start = children[1].value()
54
-
55
- if original is None:
56
- return None
57
- if not isinstance(original, str):
58
- raise ValueError(
59
- "Invalid argument for substring function: expected a string as the first argument"
60
- )
61
- if not isinstance(start, (int, float)) or (isinstance(start, float) and not start.is_integer()):
62
- raise ValueError(
63
- "Invalid argument for substring function: expected an integer as the second argument"
64
- )
65
- start = int(start)
66
-
67
- if len(children) == 3:
68
- length = children[2].value()
69
- if not isinstance(length, (int, float)) or (isinstance(length, float) and not length.is_integer()):
70
- raise ValueError(
71
- "Invalid argument for substring function: expected an integer as the third argument"
72
- )
73
- length = int(length)
74
- return original[start:start + length]
75
-
76
- return original[start:]
@@ -1,51 +0,0 @@
1
- """Sum aggregate function."""
2
-
3
- from typing import Any
4
-
5
- from .aggregate_function import AggregateFunction
6
- from .function_metadata import FunctionDef
7
- from .reducer_element import ReducerElement
8
-
9
-
10
- class SumReducerElement(ReducerElement):
11
- """Reducer element for Sum aggregate function."""
12
-
13
- def __init__(self) -> None:
14
- self._value: Any = None
15
-
16
- @property
17
- def value(self) -> Any:
18
- return self._value
19
-
20
- @value.setter
21
- def value(self, val: Any) -> None:
22
- if self._value is not None:
23
- self._value += val
24
- else:
25
- self._value = val
26
-
27
-
28
- @FunctionDef({
29
- "description": "Calculates the sum of numeric values across grouped rows",
30
- "category": "aggregate",
31
- "parameters": [
32
- {"name": "value", "description": "Numeric value to sum", "type": "number"}
33
- ],
34
- "output": {"description": "Sum of all values", "type": "number", "example": 150},
35
- "examples": ["WITH [1, 2, 3] AS nums UNWIND nums AS n RETURN sum(n)"]
36
- })
37
- class Sum(AggregateFunction):
38
- """Sum aggregate function.
39
-
40
- Calculates the sum of numeric values across grouped rows.
41
- """
42
-
43
- def __init__(self) -> None:
44
- super().__init__("sum")
45
- self._expected_parameter_count = 1
46
-
47
- def reduce(self, element: SumReducerElement) -> None:
48
- element.value = self.first_child().value()
49
-
50
- def element(self) -> SumReducerElement:
51
- return SumReducerElement()
@@ -1,37 +0,0 @@
1
- """Tail function."""
2
-
3
- from typing import Any
4
-
5
- from .function import Function
6
- from .function_metadata import FunctionDef
7
-
8
-
9
- @FunctionDef({
10
- "description": "Returns all elements of a list except the first",
11
- "category": "scalar",
12
- "parameters": [
13
- {"name": "list", "description": "The list to get all but the first element from", "type": "array"}
14
- ],
15
- "output": {"description": "All elements except the first", "type": "array", "example": [2, 3]},
16
- "examples": [
17
- "RETURN tail([1, 2, 3])",
18
- "WITH ['a', 'b', 'c'] AS items RETURN tail(items)"
19
- ]
20
- })
21
- class Tail(Function):
22
- """Tail function.
23
-
24
- Returns all elements of a list except the first.
25
- """
26
-
27
- def __init__(self) -> None:
28
- super().__init__("tail")
29
- self._expected_parameter_count = 1
30
-
31
- def value(self) -> Any:
32
- val = self.get_children()[0].value()
33
- if val is None:
34
- return None
35
- if not isinstance(val, list):
36
- raise ValueError("tail() expects a list")
37
- return val[1:]
@@ -1,186 +0,0 @@
1
- """Shared utility functions for temporal (date/time) operations.
2
-
3
- These helpers are used by the datetime_, date_, time_, localdatetime,
4
- localtime, and timestamp functions.
5
- """
6
-
7
- from datetime import date, datetime, timezone
8
- from typing import Any, Dict
9
-
10
-
11
- def iso_day_of_week(d: date) -> int:
12
- """Computes the ISO day of the week (1 = Monday, 7 = Sunday)."""
13
- return d.isoweekday()
14
-
15
-
16
- def day_of_year(d: date) -> int:
17
- """Computes the day of the year (1-based)."""
18
- return d.timetuple().tm_yday
19
-
20
-
21
- def quarter(month: int) -> int:
22
- """Computes the quarter (1-4) from a month (1-12)."""
23
- return (month - 1) // 3 + 1
24
-
25
-
26
- def parse_temporal_arg(arg: Any, fn_name: str) -> datetime:
27
- """Parses a temporal argument (string, number, or map) into a datetime object.
28
-
29
- Args:
30
- arg: The argument to parse (string, number, or dict with components)
31
- fn_name: The calling function name for error messages
32
-
33
- Returns:
34
- A datetime object
35
- """
36
- if isinstance(arg, str):
37
- try:
38
- return datetime.fromisoformat(arg.replace("Z", "+00:00"))
39
- except ValueError:
40
- raise ValueError(f"{fn_name}(): Invalid temporal string: '{arg}'")
41
-
42
- if isinstance(arg, (int, float)):
43
- # Treat as epoch milliseconds
44
- return datetime.fromtimestamp(arg / 1000, tz=timezone.utc)
45
-
46
- if isinstance(arg, dict):
47
- # Map-style construction: {year, month, day, hour, minute, second, millisecond}
48
- now = datetime.now()
49
- year = arg.get("year", now.year)
50
- month = arg.get("month", 1)
51
- day = arg.get("day", 1)
52
- hour = arg.get("hour", 0)
53
- minute = arg.get("minute", 0)
54
- second = arg.get("second", 0)
55
- millisecond = arg.get("millisecond", 0)
56
- return datetime(year, month, day, hour, minute, second, millisecond * 1000)
57
-
58
- raise ValueError(
59
- f"{fn_name}(): Expected a string, number (epoch millis), or map argument, "
60
- f"got {type(arg).__name__}"
61
- )
62
-
63
-
64
- def build_datetime_object(d: datetime, utc: bool) -> Dict[str, Any]:
65
- """Builds a datetime result object with full temporal properties.
66
-
67
- Args:
68
- d: The datetime object
69
- utc: If True, use UTC values; if False, use local values
70
-
71
- Returns:
72
- A dict with year, month, day, hour, minute, second, millisecond,
73
- epochMillis, epochSeconds, dayOfWeek, dayOfYear, quarter, formatted
74
- """
75
- if utc:
76
- if d.tzinfo is None:
77
- d = d.replace(tzinfo=timezone.utc)
78
- d_utc = d.astimezone(timezone.utc)
79
- year = d_utc.year
80
- month = d_utc.month
81
- day = d_utc.day
82
- hour = d_utc.hour
83
- minute = d_utc.minute
84
- second = d_utc.second
85
- millisecond = d_utc.microsecond // 1000
86
- formatted = d_utc.strftime("%Y-%m-%dT%H:%M:%S.") + f"{millisecond:03d}Z"
87
- else:
88
- if d.tzinfo is not None:
89
- d = d.astimezone(tz=None).replace(tzinfo=None)
90
- year = d.year
91
- month = d.month
92
- day = d.day
93
- hour = d.hour
94
- minute = d.minute
95
- second = d.second
96
- millisecond = d.microsecond // 1000
97
- formatted = d.strftime("%Y-%m-%dT%H:%M:%S.") + f"{millisecond:03d}"
98
-
99
- date_part = date(year, month, day)
100
- epoch_millis = int(d.timestamp() * 1000) if d.tzinfo else int(
101
- datetime(year, month, day, hour, minute, second, millisecond * 1000).timestamp() * 1000
102
- )
103
-
104
- return {
105
- "year": year,
106
- "month": month,
107
- "day": day,
108
- "hour": hour,
109
- "minute": minute,
110
- "second": second,
111
- "millisecond": millisecond,
112
- "epochMillis": epoch_millis,
113
- "epochSeconds": epoch_millis // 1000,
114
- "dayOfWeek": iso_day_of_week(date_part),
115
- "dayOfYear": day_of_year(date_part),
116
- "quarter": quarter(month),
117
- "formatted": formatted,
118
- }
119
-
120
-
121
- def build_date_object(d: datetime) -> Dict[str, Any]:
122
- """Builds a date result object (no time component).
123
-
124
- Args:
125
- d: The datetime object
126
-
127
- Returns:
128
- A dict with year, month, day, epochMillis, dayOfWeek, dayOfYear, quarter, formatted
129
- """
130
- year = d.year
131
- month = d.month
132
- day_val = d.day
133
-
134
- date_only = datetime(year, month, day_val)
135
- epoch_millis = int(date_only.timestamp() * 1000)
136
-
137
- date_part = date(year, month, day_val)
138
-
139
- return {
140
- "year": year,
141
- "month": month,
142
- "day": day_val,
143
- "epochMillis": epoch_millis,
144
- "dayOfWeek": iso_day_of_week(date_part),
145
- "dayOfYear": day_of_year(date_part),
146
- "quarter": quarter(month),
147
- "formatted": f"{year}-{month:02d}-{day_val:02d}",
148
- }
149
-
150
-
151
- def build_time_object(d: datetime, utc: bool) -> Dict[str, Any]:
152
- """Builds a time result object (no date component).
153
-
154
- Args:
155
- d: The datetime object
156
- utc: If True, use UTC values; if False, use local values
157
-
158
- Returns:
159
- A dict with hour, minute, second, millisecond, formatted
160
- """
161
- if utc:
162
- if d.tzinfo is None:
163
- d = d.replace(tzinfo=timezone.utc)
164
- d_utc = d.astimezone(timezone.utc)
165
- hour = d_utc.hour
166
- minute = d_utc.minute
167
- second = d_utc.second
168
- millisecond = d_utc.microsecond // 1000
169
- else:
170
- if d.tzinfo is not None:
171
- d = d.astimezone(tz=None).replace(tzinfo=None)
172
- hour = d.hour
173
- minute = d.minute
174
- second = d.second
175
- millisecond = d.microsecond // 1000
176
-
177
- time_part = f"{hour:02d}:{minute:02d}:{second:02d}.{millisecond:03d}"
178
- formatted = f"{time_part}Z" if utc else time_part
179
-
180
- return {
181
- "hour": hour,
182
- "minute": minute,
183
- "second": second,
184
- "millisecond": millisecond,
185
- "formatted": formatted,
186
- }
@@ -1,57 +0,0 @@
1
- """Time function."""
2
-
3
- from datetime import datetime, timezone
4
- from typing import Any
5
-
6
- from .function import Function
7
- from .function_metadata import FunctionDef
8
- from .temporal_utils import build_time_object, parse_temporal_arg
9
-
10
-
11
- @FunctionDef({
12
- "description": (
13
- "Returns a time value. With no arguments returns the current UTC time. "
14
- "Accepts an ISO 8601 time string or a map of components (hour, minute, second, millisecond)."
15
- ),
16
- "category": "scalar",
17
- "parameters": [
18
- {
19
- "name": "input",
20
- "description": "Optional. An ISO 8601 time string (HH:MM:SS) or a map of components.",
21
- "type": "string",
22
- "required": False,
23
- },
24
- ],
25
- "output": {
26
- "description": "A time object with properties: hour, minute, second, millisecond, formatted",
27
- "type": "object",
28
- },
29
- "examples": [
30
- "RETURN time() AS now",
31
- "RETURN time('12:30:00') AS t",
32
- "WITH time() AS t RETURN t.hour, t.minute",
33
- ],
34
- })
35
- class Time(Function):
36
- """Time function.
37
-
38
- Returns a time value (with timezone offset awareness).
39
- When called with no arguments, returns the current UTC time.
40
- When called with a string argument, parses it.
41
- """
42
-
43
- def __init__(self) -> None:
44
- super().__init__("time")
45
- self._expected_parameter_count = None
46
-
47
- def value(self) -> Any:
48
- children = self.get_children()
49
- if len(children) > 1:
50
- raise ValueError("time() accepts at most one argument")
51
-
52
- if len(children) == 1:
53
- d = parse_temporal_arg(children[0].value(), "time")
54
- else:
55
- d = datetime.now(timezone.utc)
56
-
57
- return build_time_object(d, utc=True)
@@ -1,37 +0,0 @@
1
- """Timestamp function."""
2
-
3
- import time
4
- from typing import Any
5
-
6
- from .function import Function
7
- from .function_metadata import FunctionDef
8
-
9
-
10
- @FunctionDef({
11
- "description": (
12
- "Returns the number of milliseconds since the Unix epoch (1970-01-01T00:00:00Z)."
13
- ),
14
- "category": "scalar",
15
- "parameters": [],
16
- "output": {
17
- "description": "Milliseconds since Unix epoch",
18
- "type": "number",
19
- "example": 1718450000000,
20
- },
21
- "examples": [
22
- "RETURN timestamp() AS ts",
23
- "WITH timestamp() AS before, timestamp() AS after RETURN after - before",
24
- ],
25
- })
26
- class Timestamp(Function):
27
- """Timestamp function.
28
-
29
- Returns the number of milliseconds since the Unix epoch (1970-01-01T00:00:00Z).
30
- """
31
-
32
- def __init__(self) -> None:
33
- super().__init__("timestamp")
34
- self._expected_parameter_count = 0
35
-
36
- def value(self) -> Any:
37
- return int(time.time() * 1000)
@@ -1,46 +0,0 @@
1
- """ToFloat function."""
2
-
3
- from typing import Any
4
-
5
- from .function import Function
6
- from .function_metadata import FunctionDef
7
-
8
-
9
- @FunctionDef({
10
- "description": "Converts a value to a floating point number",
11
- "category": "scalar",
12
- "parameters": [
13
- {"name": "value", "description": "The value to convert to a float", "type": "any"}
14
- ],
15
- "output": {"description": "The floating point representation of the value", "type": "number", "example": 3.14},
16
- "examples": [
17
- 'RETURN toFloat("3.14")',
18
- "RETURN toFloat(42)",
19
- "RETURN toFloat(true)"
20
- ]
21
- })
22
- class ToFloat(Function):
23
- """ToFloat function.
24
-
25
- Converts a value to a floating point number.
26
- """
27
-
28
- def __init__(self) -> None:
29
- super().__init__("tofloat")
30
- self._expected_parameter_count = 1
31
-
32
- def value(self) -> Any:
33
- val = self.get_children()[0].value()
34
- if val is None:
35
- return None
36
- if isinstance(val, bool):
37
- return 1.0 if val else 0.0
38
- if isinstance(val, (int, float)):
39
- return float(val)
40
- if isinstance(val, str):
41
- trimmed = val.strip()
42
- try:
43
- return float(trimmed)
44
- except (ValueError, OverflowError):
45
- raise ValueError(f'Cannot convert string "{val}" to float')
46
- raise ValueError("toFloat() expects a number, string, or boolean")