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,55 +0,0 @@
1
- """Avg aggregate function."""
2
-
3
- from typing import Optional
4
-
5
- from .aggregate_function import AggregateFunction
6
- from .function_metadata import FunctionDef
7
- from .reducer_element import ReducerElement
8
-
9
-
10
- class AvgReducerElement(ReducerElement):
11
- """Reducer element for Avg aggregate function."""
12
-
13
- def __init__(self) -> None:
14
- self._count: int = 0
15
- self._sum: Optional[float] = None
16
-
17
- @property
18
- def value(self) -> Optional[float]:
19
- if self._sum is None:
20
- return None
21
- return self._sum / self._count
22
-
23
- @value.setter
24
- def value(self, val: float) -> None:
25
- self._count += 1
26
- if self._sum is not None:
27
- self._sum += val
28
- else:
29
- self._sum = val
30
-
31
-
32
- @FunctionDef({
33
- "description": "Calculates the average of numeric values across grouped rows",
34
- "category": "aggregate",
35
- "parameters": [
36
- {"name": "value", "description": "Numeric value to average", "type": "number"}
37
- ],
38
- "output": {"description": "Average of all values", "type": "number", "example": 50},
39
- "examples": ["WITH [10, 20, 30] AS nums UNWIND nums AS n RETURN avg(n)"]
40
- })
41
- class Avg(AggregateFunction):
42
- """Avg aggregate function.
43
-
44
- Calculates the average of numeric values across grouped rows.
45
- """
46
-
47
- def __init__(self) -> None:
48
- super().__init__("avg")
49
- self._expected_parameter_count = 1
50
-
51
- def reduce(self, element: AvgReducerElement) -> None:
52
- element.value = self.first_child().value()
53
-
54
- def element(self) -> AvgReducerElement:
55
- return AvgReducerElement()
@@ -1,43 +0,0 @@
1
- """Coalesce 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 the first non-null value from a list of expressions",
11
- "category": "scalar",
12
- "parameters": [
13
- {"name": "expressions", "description": "Two or more expressions to evaluate", "type": "any"}
14
- ],
15
- "output": {"description": "The first non-null value, or null if all values are null", "type": "any"},
16
- "examples": [
17
- "RETURN coalesce(null, 'hello', 'world')",
18
- "MATCH (n) RETURN coalesce(n.nickname, n.name) AS displayName"
19
- ]
20
- })
21
- class Coalesce(Function):
22
- """Coalesce function.
23
-
24
- Returns the first non-null value from a list of expressions.
25
- """
26
-
27
- def __init__(self) -> None:
28
- super().__init__("coalesce")
29
- self._expected_parameter_count = None # variable number of parameters
30
-
31
- def value(self) -> Any:
32
- children = self.get_children()
33
- if len(children) == 0:
34
- raise ValueError("coalesce() requires at least one argument")
35
- for child in children:
36
- try:
37
- val = child.value()
38
- except (KeyError, AttributeError):
39
- # Treat missing properties/keys as null
40
- val = None
41
- if val is not None:
42
- return val
43
- return None
@@ -1,75 +0,0 @@
1
- """Collect aggregate function."""
2
-
3
- import json
4
- from typing import Any, Dict, List, Union
5
-
6
- from .aggregate_function import AggregateFunction
7
- from .function_metadata import FunctionDef
8
- from .reducer_element import ReducerElement
9
-
10
-
11
- class CollectReducerElement(ReducerElement):
12
- """Reducer element for Collect aggregate function."""
13
-
14
- def __init__(self) -> None:
15
- self._value: List[Any] = []
16
-
17
- @property
18
- def value(self) -> Any:
19
- return self._value
20
-
21
- @value.setter
22
- def value(self, val: Any) -> None:
23
- self._value.append(val)
24
-
25
-
26
- class DistinctCollectReducerElement(ReducerElement):
27
- """Reducer element for Collect aggregate function with DISTINCT."""
28
-
29
- def __init__(self) -> None:
30
- self._value: Dict[str, Any] = {}
31
-
32
- @property
33
- def value(self) -> Any:
34
- return list(self._value.values())
35
-
36
- @value.setter
37
- def value(self, val: Any) -> None:
38
- key: str = json.dumps(val, sort_keys=True, default=str)
39
- if key not in self._value:
40
- self._value[key] = val
41
-
42
-
43
- @FunctionDef({
44
- "description": "Collects values into an array across grouped rows",
45
- "category": "aggregate",
46
- "parameters": [
47
- {"name": "value", "description": "Value to collect", "type": "any"}
48
- ],
49
- "output": {"description": "Array of collected values", "type": "array", "example": [1, 2, 3]},
50
- "examples": ["WITH [1, 2, 3] AS nums UNWIND nums AS n RETURN collect(n)"]
51
- })
52
- class Collect(AggregateFunction):
53
- """Collect aggregate function.
54
-
55
- Collects values into an array across grouped rows.
56
- """
57
-
58
- def __init__(self) -> None:
59
- super().__init__("collect")
60
- self._expected_parameter_count = 1
61
- self._distinct: bool = False
62
-
63
- def reduce(self, element: CollectReducerElement) -> None:
64
- element.value = self.first_child().value()
65
-
66
- def element(self) -> Union[CollectReducerElement, DistinctCollectReducerElement]:
67
- return DistinctCollectReducerElement() if self._distinct else CollectReducerElement()
68
-
69
- @property
70
- def distinct(self) -> bool:
71
- return self._distinct
72
-
73
- @distinct.setter
74
- def distinct(self, val: bool) -> None:
75
- self._distinct = val
@@ -1,79 +0,0 @@
1
- """Count aggregate function."""
2
-
3
- import json
4
- from typing import Any, Union
5
-
6
- from .aggregate_function import AggregateFunction
7
- from .function_metadata import FunctionDef
8
- from .reducer_element import ReducerElement
9
-
10
-
11
- class CountReducerElement(ReducerElement):
12
- """Reducer element for Count aggregate function."""
13
-
14
- def __init__(self) -> None:
15
- self._value: int = 0
16
-
17
- @property
18
- def value(self) -> Any:
19
- return self._value
20
-
21
- @value.setter
22
- def value(self, val: Any) -> None:
23
- self._value += 1
24
-
25
-
26
- class DistinctCountReducerElement(ReducerElement):
27
- """Reducer element for Count aggregate function with DISTINCT."""
28
-
29
- def __init__(self) -> None:
30
- self._seen: set[Any] = set()
31
-
32
- @property
33
- def value(self) -> Any:
34
- return len(self._seen)
35
-
36
- @value.setter
37
- def value(self, val: Any) -> None:
38
- key: str = json.dumps(val, sort_keys=True, default=str)
39
- self._seen.add(key)
40
-
41
-
42
- @FunctionDef({
43
- "description": "Counts the number of values across grouped rows",
44
- "category": "aggregate",
45
- "parameters": [
46
- {"name": "value", "description": "Value to count", "type": "any"}
47
- ],
48
- "output": {"description": "Number of values", "type": "number", "example": 3},
49
- "examples": [
50
- "WITH [1, 2, 3] AS nums UNWIND nums AS n RETURN count(n)",
51
- "WITH [1, 2, 2, 3] AS nums UNWIND nums AS n RETURN count(distinct n)"
52
- ]
53
- })
54
- class Count(AggregateFunction):
55
- """Count aggregate function.
56
-
57
- Counts the number of values across grouped rows.
58
- Supports DISTINCT to count only unique values.
59
- """
60
-
61
- def __init__(self) -> None:
62
- super().__init__("count")
63
- self._expected_parameter_count = 1
64
- self._supports_distinct = True
65
- self._distinct: bool = False
66
-
67
- def reduce(self, element: Union[CountReducerElement, DistinctCountReducerElement]) -> None:
68
- element.value = self.first_child().value()
69
-
70
- def element(self) -> Union[CountReducerElement, DistinctCountReducerElement]:
71
- return DistinctCountReducerElement() if self._distinct else CountReducerElement()
72
-
73
- @property
74
- def distinct(self) -> bool:
75
- return self._distinct
76
-
77
- @distinct.setter
78
- def distinct(self, val: bool) -> None:
79
- self._distinct = val
@@ -1,61 +0,0 @@
1
- """Date function."""
2
-
3
- from datetime import datetime
4
- from typing import Any
5
-
6
- from .function import Function
7
- from .function_metadata import FunctionDef
8
- from .temporal_utils import build_date_object, parse_temporal_arg
9
-
10
-
11
- @FunctionDef({
12
- "description": (
13
- "Returns a date value. With no arguments returns the current date. "
14
- "Accepts an ISO 8601 date string or a map of components (year, month, day)."
15
- ),
16
- "category": "scalar",
17
- "parameters": [
18
- {
19
- "name": "input",
20
- "description": "Optional. An ISO 8601 date string (YYYY-MM-DD) or a map of components.",
21
- "type": "string",
22
- "required": False,
23
- },
24
- ],
25
- "output": {
26
- "description": (
27
- "A date object with properties: year, month, day, "
28
- "epochMillis, dayOfWeek, dayOfYear, quarter, formatted"
29
- ),
30
- "type": "object",
31
- },
32
- "examples": [
33
- "RETURN date() AS today",
34
- "RETURN date('2025-06-15') AS d",
35
- "RETURN date({year: 2025, month: 6, day: 15}) AS d",
36
- "WITH date() AS d RETURN d.year, d.month, d.dayOfWeek",
37
- ],
38
- })
39
- class DateFunction(Function):
40
- """Date function.
41
-
42
- Returns a date value (no time component).
43
- When called with no arguments, returns the current date.
44
- When called with a string argument, parses it as an ISO 8601 date.
45
- """
46
-
47
- def __init__(self) -> None:
48
- super().__init__("date")
49
- self._expected_parameter_count = None
50
-
51
- def value(self) -> Any:
52
- children = self.get_children()
53
- if len(children) > 1:
54
- raise ValueError("date() accepts at most one argument")
55
-
56
- if len(children) == 1:
57
- d = parse_temporal_arg(children[0].value(), "date")
58
- else:
59
- d = datetime.now()
60
-
61
- return build_date_object(d)
@@ -1,62 +0,0 @@
1
- """Datetime 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_datetime_object, parse_temporal_arg
9
-
10
-
11
- @FunctionDef({
12
- "description": (
13
- "Returns a datetime value. With no arguments returns the current UTC datetime. "
14
- "Accepts an ISO 8601 string or a map of components (year, month, day, hour, minute, second, millisecond)."
15
- ),
16
- "category": "scalar",
17
- "parameters": [
18
- {
19
- "name": "input",
20
- "description": "Optional. An ISO 8601 datetime string or a map of components.",
21
- "type": "string",
22
- "required": False,
23
- },
24
- ],
25
- "output": {
26
- "description": (
27
- "A datetime object with properties: year, month, day, hour, minute, second, millisecond, "
28
- "epochMillis, epochSeconds, dayOfWeek, dayOfYear, quarter, formatted"
29
- ),
30
- "type": "object",
31
- },
32
- "examples": [
33
- "RETURN datetime() AS now",
34
- "RETURN datetime('2025-06-15T12:30:00Z') AS dt",
35
- "RETURN datetime({year: 2025, month: 6, day: 15, hour: 12}) AS dt",
36
- "WITH datetime() AS dt RETURN dt.year, dt.month, dt.day",
37
- ],
38
- })
39
- class Datetime(Function):
40
- """Datetime function.
41
-
42
- Returns a datetime value (date + time + timezone offset).
43
- When called with no arguments, returns the current UTC datetime.
44
- When called with a string argument, parses it as an ISO 8601 datetime.
45
- When called with a map argument, constructs a datetime from components.
46
- """
47
-
48
- def __init__(self) -> None:
49
- super().__init__("datetime")
50
- self._expected_parameter_count = None
51
-
52
- def value(self) -> Any:
53
- children = self.get_children()
54
- if len(children) > 1:
55
- raise ValueError("datetime() accepts at most one argument")
56
-
57
- if len(children) == 1:
58
- d = parse_temporal_arg(children[0].value(), "datetime")
59
- else:
60
- d = datetime.now(timezone.utc)
61
-
62
- return build_datetime_object(d, utc=True)
@@ -1,159 +0,0 @@
1
- """Duration function."""
2
-
3
- import re
4
- from typing import Any, Dict
5
-
6
- from .function import Function
7
- from .function_metadata import FunctionDef
8
-
9
- ISO_DURATION_REGEX = re.compile(
10
- r"^P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?"
11
- r"(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?"
12
- r"(?:(\d+(?:\.\d+)?)S)?)?$"
13
- )
14
-
15
-
16
- def _parse_duration_string(s: str) -> Dict[str, float]:
17
- """Parse an ISO 8601 duration string into components."""
18
- match = ISO_DURATION_REGEX.match(s)
19
- if not match:
20
- raise ValueError(f"duration(): Invalid ISO 8601 duration string: '{s}'")
21
- return {
22
- "years": float(match.group(1)) if match.group(1) else 0,
23
- "months": float(match.group(2)) if match.group(2) else 0,
24
- "weeks": float(match.group(3)) if match.group(3) else 0,
25
- "days": float(match.group(4)) if match.group(4) else 0,
26
- "hours": float(match.group(5)) if match.group(5) else 0,
27
- "minutes": float(match.group(6)) if match.group(6) else 0,
28
- "seconds": float(match.group(7)) if match.group(7) else 0,
29
- }
30
-
31
-
32
- def _build_duration_object(components: Dict[str, Any]) -> Dict[str, Any]:
33
- """Build a duration result object from components."""
34
- years = components.get("years", 0) or 0
35
- months = components.get("months", 0) or 0
36
- weeks = components.get("weeks", 0) or 0
37
- days = components.get("days", 0) or 0
38
- hours = components.get("hours", 0) or 0
39
- minutes = components.get("minutes", 0) or 0
40
- raw_seconds = components.get("seconds", 0) or 0
41
- seconds = int(raw_seconds)
42
- fractional_seconds = raw_seconds - seconds
43
-
44
- if "milliseconds" in components and components["milliseconds"]:
45
- milliseconds = int(components["milliseconds"])
46
- else:
47
- milliseconds = round(fractional_seconds * 1000)
48
-
49
- if "nanoseconds" in components and components["nanoseconds"]:
50
- nanoseconds = int(components["nanoseconds"])
51
- else:
52
- nanoseconds = round(fractional_seconds * 1_000_000_000) % 1_000_000
53
-
54
- # Total days including weeks
55
- total_days = int(days + weeks * 7)
56
-
57
- # Total seconds for the time portion
58
- total_seconds = int(hours * 3600 + minutes * 60 + seconds)
59
-
60
- # Total months
61
- total_months = int(years * 12 + months)
62
-
63
- # Build ISO 8601 formatted string
64
- formatted = "P"
65
- if years:
66
- formatted += f"{int(years)}Y"
67
- if months:
68
- formatted += f"{int(months)}M"
69
- if weeks:
70
- formatted += f"{int(weeks)}W"
71
- raw_days = int(total_days - weeks * 7)
72
- if raw_days:
73
- formatted += f"{raw_days}D"
74
- has_time = hours or minutes or seconds or milliseconds
75
- if has_time:
76
- formatted += "T"
77
- if hours:
78
- formatted += f"{int(hours)}H"
79
- if minutes:
80
- formatted += f"{int(minutes)}M"
81
- if seconds or milliseconds:
82
- if milliseconds:
83
- formatted += f"{seconds}.{milliseconds:03d}S"
84
- else:
85
- formatted += f"{seconds}S"
86
- if formatted == "P":
87
- formatted = "PT0S"
88
-
89
- return {
90
- "years": int(years),
91
- "months": int(months),
92
- "weeks": int(weeks),
93
- "days": total_days,
94
- "hours": int(hours),
95
- "minutes": int(minutes),
96
- "seconds": seconds,
97
- "milliseconds": milliseconds,
98
- "nanoseconds": nanoseconds,
99
- "totalMonths": total_months,
100
- "totalDays": total_days,
101
- "totalSeconds": total_seconds,
102
- "formatted": formatted,
103
- }
104
-
105
-
106
- @FunctionDef({
107
- "description": (
108
- "Creates a duration value representing a span of time. "
109
- "Accepts an ISO 8601 duration string (e.g., 'P1Y2M3DT4H5M6S') or a map of components "
110
- "(years, months, weeks, days, hours, minutes, seconds, milliseconds, nanoseconds)."
111
- ),
112
- "category": "scalar",
113
- "parameters": [
114
- {
115
- "name": "input",
116
- "description": (
117
- "An ISO 8601 duration string or a map of components "
118
- "(years, months, weeks, days, hours, minutes, seconds, milliseconds, nanoseconds)"
119
- ),
120
- "type": "any",
121
- }
122
- ],
123
- "output": {
124
- "description": (
125
- "A duration object with properties: years, months, weeks, days, hours, minutes, seconds, "
126
- "milliseconds, nanoseconds, totalMonths, totalDays, totalSeconds, formatted"
127
- ),
128
- "type": "object",
129
- },
130
- "examples": [
131
- "RETURN duration('P1Y2M3D') AS d",
132
- "RETURN duration('PT2H30M') AS d",
133
- "RETURN duration({days: 14, hours: 16}) AS d",
134
- "RETURN duration({months: 5, days: 1, hours: 12}) AS d",
135
- ],
136
- })
137
- class Duration(Function):
138
- """Duration function.
139
-
140
- Creates a duration value representing a span of time.
141
- """
142
-
143
- def __init__(self) -> None:
144
- super().__init__("duration")
145
- self._expected_parameter_count = 1
146
-
147
- def value(self) -> Any:
148
- arg = self.get_children()[0].value()
149
- if arg is None:
150
- return None
151
-
152
- if isinstance(arg, str):
153
- components = _parse_duration_string(arg)
154
- return _build_duration_object(components)
155
-
156
- if isinstance(arg, dict):
157
- return _build_duration_object(arg)
158
-
159
- raise ValueError("duration() expects a string or map argument")
@@ -1,50 +0,0 @@
1
- """ElementId 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": (
11
- "Returns the element id of a node or relationship as a string. "
12
- "For nodes, returns the string representation of the id property. "
13
- "For relationships, returns the type."
14
- ),
15
- "category": "scalar",
16
- "parameters": [
17
- {"name": "entity", "description": "A node or relationship to get the element id from", "type": "object"}
18
- ],
19
- "output": {"description": "The element id of the entity as a string", "type": "string", "example": "\"1\""},
20
- "examples": [
21
- "MATCH (n:Person) RETURN elementId(n)",
22
- "MATCH (a)-[r]->(b) RETURN elementId(r)"
23
- ]
24
- })
25
- class ElementId(Function):
26
- """ElementId function.
27
-
28
- Returns the element id of a node or relationship as a string.
29
- """
30
-
31
- def __init__(self) -> None:
32
- super().__init__("elementid")
33
- self._expected_parameter_count = 1
34
-
35
- def value(self) -> Any:
36
- obj = self.get_children()[0].value()
37
- if obj is None:
38
- return None
39
- if not isinstance(obj, dict):
40
- raise ValueError("elementId() expects a node or relationship")
41
-
42
- # If it's a RelationshipMatchRecord (has type, startNode, endNode, properties)
43
- if all(k in obj for k in ("type", "startNode", "endNode", "properties")):
44
- return str(obj["type"])
45
-
46
- # If it's a node record (has id field)
47
- if "id" in obj:
48
- return str(obj["id"])
49
-
50
- raise ValueError("elementId() expects a node or relationship")
@@ -1,68 +0,0 @@
1
- """Base class for all functions in FlowQuery."""
2
-
3
- from typing import List, Optional
4
-
5
- from ..ast_node import ASTNode
6
-
7
-
8
- class Function(ASTNode):
9
- """Base class for all functions in FlowQuery.
10
-
11
- Functions can have parameters and may support the DISTINCT modifier.
12
- Subclasses implement specific function logic.
13
-
14
- Example:
15
- func = FunctionFactory.create("sum")
16
- func.parameters = [expression1, expression2]
17
- """
18
-
19
- def __init__(self, name: Optional[str] = None):
20
- """Creates a new Function with the given name.
21
-
22
- Args:
23
- name: The function name
24
- """
25
- super().__init__()
26
- self._name = name or self.__class__.__name__
27
- self._expected_parameter_count: Optional[int] = None
28
- self._supports_distinct: bool = False
29
-
30
- @property
31
- def parameters(self) -> List[ASTNode]:
32
- """Gets the function parameters."""
33
- return self.children
34
-
35
- @parameters.setter
36
- def parameters(self, nodes: List[ASTNode]) -> None:
37
- """Sets the function parameters.
38
-
39
- Args:
40
- nodes: Array of AST nodes representing the function arguments
41
-
42
- Raises:
43
- ValueError: If the number of parameters doesn't match expected count
44
- """
45
- if self._expected_parameter_count is not None and self._expected_parameter_count != len(nodes):
46
- raise ValueError(
47
- f"Function {self._name} expected {self._expected_parameter_count} parameters, "
48
- f"but got {len(nodes)}"
49
- )
50
- self.children = nodes
51
-
52
- @property
53
- def name(self) -> str:
54
- return self._name
55
-
56
- def __str__(self) -> str:
57
- return f"Function ({self._name})"
58
-
59
- @property
60
- def distinct(self) -> bool:
61
- return self._supports_distinct
62
-
63
- @distinct.setter
64
- def distinct(self, value: bool) -> None:
65
- if self._supports_distinct:
66
- self._supports_distinct = value
67
- else:
68
- raise ValueError(f"Function {self._name} does not support distinct")