flowquery 1.0.46 → 1.0.48

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 (422) hide show
  1. package/dist/flowquery.min.js +1 -1
  2. package/dist/index.d.ts +0 -7
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -4
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsing/data_structures/list_comprehension.d.ts +56 -0
  7. package/dist/parsing/data_structures/list_comprehension.d.ts.map +1 -0
  8. package/dist/parsing/data_structures/list_comprehension.js +102 -0
  9. package/dist/parsing/data_structures/list_comprehension.js.map +1 -0
  10. package/dist/parsing/parser.d.ts +18 -0
  11. package/dist/parsing/parser.d.ts.map +1 -1
  12. package/dist/parsing/parser.js +92 -0
  13. package/dist/parsing/parser.js.map +1 -1
  14. package/package.json +4 -1
  15. package/.editorconfig +0 -21
  16. package/.gitattributes +0 -3
  17. package/.github/workflows/npm-publish.yml +0 -32
  18. package/.github/workflows/python-publish.yml +0 -143
  19. package/.github/workflows/release.yml +0 -107
  20. package/.husky/pre-commit +0 -28
  21. package/.prettierrc +0 -22
  22. package/CODE_OF_CONDUCT.md +0 -10
  23. package/FlowQueryLogoIcon.png +0 -0
  24. package/SECURITY.md +0 -14
  25. package/SUPPORT.md +0 -13
  26. package/docs/flowquery.min.js +0 -1
  27. package/docs/index.html +0 -105
  28. package/flowquery-py/CONTRIBUTING.md +0 -127
  29. package/flowquery-py/README.md +0 -67
  30. package/flowquery-py/misc/data/test.json +0 -10
  31. package/flowquery-py/misc/data/users.json +0 -242
  32. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  33. package/flowquery-py/pyproject.toml +0 -121
  34. package/flowquery-py/setup_env.ps1 +0 -92
  35. package/flowquery-py/setup_env.sh +0 -87
  36. package/flowquery-py/src/__init__.py +0 -38
  37. package/flowquery-py/src/__main__.py +0 -10
  38. package/flowquery-py/src/compute/__init__.py +0 -6
  39. package/flowquery-py/src/compute/flowquery.py +0 -68
  40. package/flowquery-py/src/compute/runner.py +0 -64
  41. package/flowquery-py/src/extensibility.py +0 -52
  42. package/flowquery-py/src/graph/__init__.py +0 -31
  43. package/flowquery-py/src/graph/data.py +0 -136
  44. package/flowquery-py/src/graph/database.py +0 -141
  45. package/flowquery-py/src/graph/hops.py +0 -43
  46. package/flowquery-py/src/graph/node.py +0 -143
  47. package/flowquery-py/src/graph/node_data.py +0 -26
  48. package/flowquery-py/src/graph/node_reference.py +0 -50
  49. package/flowquery-py/src/graph/pattern.py +0 -115
  50. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  51. package/flowquery-py/src/graph/patterns.py +0 -42
  52. package/flowquery-py/src/graph/physical_node.py +0 -41
  53. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  54. package/flowquery-py/src/graph/relationship.py +0 -193
  55. package/flowquery-py/src/graph/relationship_data.py +0 -36
  56. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  57. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  58. package/flowquery-py/src/io/__init__.py +0 -5
  59. package/flowquery-py/src/io/command_line.py +0 -108
  60. package/flowquery-py/src/parsing/__init__.py +0 -17
  61. package/flowquery-py/src/parsing/alias.py +0 -20
  62. package/flowquery-py/src/parsing/alias_option.py +0 -11
  63. package/flowquery-py/src/parsing/ast_node.py +0 -147
  64. package/flowquery-py/src/parsing/base_parser.py +0 -84
  65. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  66. package/flowquery-py/src/parsing/components/csv.py +0 -8
  67. package/flowquery-py/src/parsing/components/from_.py +0 -12
  68. package/flowquery-py/src/parsing/components/headers.py +0 -12
  69. package/flowquery-py/src/parsing/components/json.py +0 -8
  70. package/flowquery-py/src/parsing/components/null.py +0 -10
  71. package/flowquery-py/src/parsing/components/post.py +0 -8
  72. package/flowquery-py/src/parsing/components/text.py +0 -8
  73. package/flowquery-py/src/parsing/context.py +0 -50
  74. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  75. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  76. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  77. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  78. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  79. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  80. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  81. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  82. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  83. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  84. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  85. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  86. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  87. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  88. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  89. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  90. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  91. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  92. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  93. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  94. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  95. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  96. package/flowquery-py/src/parsing/functions/count.py +0 -79
  97. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  98. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  99. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  100. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  101. package/flowquery-py/src/parsing/functions/function.py +0 -68
  102. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  103. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  104. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  105. package/flowquery-py/src/parsing/functions/head.py +0 -39
  106. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  107. package/flowquery-py/src/parsing/functions/join.py +0 -49
  108. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  109. package/flowquery-py/src/parsing/functions/last.py +0 -39
  110. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  111. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  112. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  113. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  114. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  115. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  116. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  117. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  118. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  119. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  120. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  121. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  122. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  123. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  124. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  125. package/flowquery-py/src/parsing/functions/size.py +0 -34
  126. package/flowquery-py/src/parsing/functions/split.py +0 -54
  127. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  128. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  129. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  130. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  131. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  132. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  133. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  134. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  135. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  136. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  137. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  138. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  139. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  140. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  141. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  142. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  143. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  144. package/flowquery-py/src/parsing/logic/case.py +0 -28
  145. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  146. package/flowquery-py/src/parsing/logic/end.py +0 -8
  147. package/flowquery-py/src/parsing/logic/then.py +0 -12
  148. package/flowquery-py/src/parsing/logic/when.py +0 -12
  149. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  150. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  151. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  152. package/flowquery-py/src/parsing/operations/call.py +0 -73
  153. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  154. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  155. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  156. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  157. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  158. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  159. package/flowquery-py/src/parsing/operations/load.py +0 -148
  160. package/flowquery-py/src/parsing/operations/match.py +0 -52
  161. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  162. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  163. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  164. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  165. package/flowquery-py/src/parsing/operations/union.py +0 -115
  166. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  167. package/flowquery-py/src/parsing/operations/unwind.py +0 -42
  168. package/flowquery-py/src/parsing/operations/where.py +0 -43
  169. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  170. package/flowquery-py/src/parsing/parser.py +0 -1384
  171. package/flowquery-py/src/parsing/parser_state.py +0 -26
  172. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  173. package/flowquery-py/src/tokenization/__init__.py +0 -23
  174. package/flowquery-py/src/tokenization/keyword.py +0 -54
  175. package/flowquery-py/src/tokenization/operator.py +0 -29
  176. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  177. package/flowquery-py/src/tokenization/symbol.py +0 -19
  178. package/flowquery-py/src/tokenization/token.py +0 -693
  179. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  180. package/flowquery-py/src/tokenization/token_type.py +0 -21
  181. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  182. package/flowquery-py/src/tokenization/trie.py +0 -125
  183. package/flowquery-py/src/utils/__init__.py +0 -6
  184. package/flowquery-py/src/utils/object_utils.py +0 -20
  185. package/flowquery-py/src/utils/string_utils.py +0 -113
  186. package/flowquery-py/tests/__init__.py +0 -1
  187. package/flowquery-py/tests/compute/__init__.py +0 -1
  188. package/flowquery-py/tests/compute/test_runner.py +0 -4902
  189. package/flowquery-py/tests/graph/__init__.py +0 -1
  190. package/flowquery-py/tests/graph/test_create.py +0 -56
  191. package/flowquery-py/tests/graph/test_data.py +0 -73
  192. package/flowquery-py/tests/graph/test_match.py +0 -40
  193. package/flowquery-py/tests/parsing/__init__.py +0 -1
  194. package/flowquery-py/tests/parsing/test_context.py +0 -34
  195. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  196. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  197. package/flowquery-py/tests/test_extensibility.py +0 -611
  198. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  199. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  200. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  201. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  202. package/flowquery-vscode/.vscode-test.mjs +0 -5
  203. package/flowquery-vscode/.vscodeignore +0 -13
  204. package/flowquery-vscode/LICENSE +0 -21
  205. package/flowquery-vscode/README.md +0 -11
  206. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  207. package/flowquery-vscode/eslint.config.mjs +0 -25
  208. package/flowquery-vscode/extension.js +0 -508
  209. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  210. package/flowquery-vscode/flowquery-worker.js +0 -66
  211. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  212. package/flowquery-vscode/jsconfig.json +0 -13
  213. package/flowquery-vscode/libs/page.css +0 -53
  214. package/flowquery-vscode/libs/table.css +0 -13
  215. package/flowquery-vscode/libs/tabs.css +0 -66
  216. package/flowquery-vscode/package-lock.json +0 -2917
  217. package/flowquery-vscode/package.json +0 -51
  218. package/flowquery-vscode/test/extension.test.js +0 -196
  219. package/flowquery-vscode/test/worker.test.js +0 -25
  220. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  221. package/jest.config.js +0 -14
  222. package/misc/apps/RAG/README.md +0 -29
  223. package/misc/apps/RAG/data/chats.json +0 -302
  224. package/misc/apps/RAG/data/emails.json +0 -182
  225. package/misc/apps/RAG/data/events.json +0 -226
  226. package/misc/apps/RAG/data/files.json +0 -172
  227. package/misc/apps/RAG/data/users.json +0 -158
  228. package/misc/apps/RAG/jest.config.js +0 -21
  229. package/misc/apps/RAG/package.json +0 -48
  230. package/misc/apps/RAG/public/index.html +0 -18
  231. package/misc/apps/RAG/src/App.css +0 -42
  232. package/misc/apps/RAG/src/App.tsx +0 -50
  233. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  234. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  235. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  236. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  237. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  238. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  239. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  240. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  241. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  242. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  243. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  244. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  245. package/misc/apps/RAG/src/components/index.ts +0 -28
  246. package/misc/apps/RAG/src/graph/index.ts +0 -19
  247. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  248. package/misc/apps/RAG/src/index.tsx +0 -29
  249. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  250. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  251. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  252. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  253. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  254. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  255. package/misc/apps/RAG/src/utils/index.ts +0 -12
  256. package/misc/apps/RAG/tsconfig.json +0 -22
  257. package/misc/apps/RAG/webpack.config.js +0 -43
  258. package/misc/apps/README.md +0 -1
  259. package/misc/queries/analyze_catfacts.cql +0 -75
  260. package/misc/queries/azure_openai_completions.cql +0 -13
  261. package/misc/queries/azure_openai_models.cql +0 -9
  262. package/misc/queries/mock_pipeline.cql +0 -84
  263. package/misc/queries/openai_completions.cql +0 -15
  264. package/misc/queries/openai_models.cql +0 -13
  265. package/misc/queries/test.cql +0 -6
  266. package/misc/queries/tool_inference.cql +0 -24
  267. package/misc/queries/wisdom.cql +0 -6
  268. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  269. package/src/compute/flowquery.ts +0 -46
  270. package/src/compute/runner.ts +0 -66
  271. package/src/extensibility.ts +0 -45
  272. package/src/graph/data.ts +0 -130
  273. package/src/graph/database.ts +0 -143
  274. package/src/graph/hops.ts +0 -22
  275. package/src/graph/node.ts +0 -122
  276. package/src/graph/node_data.ts +0 -18
  277. package/src/graph/node_reference.ts +0 -38
  278. package/src/graph/pattern.ts +0 -110
  279. package/src/graph/pattern_expression.ts +0 -48
  280. package/src/graph/patterns.ts +0 -36
  281. package/src/graph/physical_node.ts +0 -23
  282. package/src/graph/physical_relationship.ts +0 -23
  283. package/src/graph/relationship.ts +0 -167
  284. package/src/graph/relationship_data.ts +0 -31
  285. package/src/graph/relationship_match_collector.ts +0 -64
  286. package/src/graph/relationship_reference.ts +0 -25
  287. package/src/index.browser.ts +0 -46
  288. package/src/index.node.ts +0 -55
  289. package/src/index.ts +0 -12
  290. package/src/io/command_line.ts +0 -74
  291. package/src/parsing/alias.ts +0 -23
  292. package/src/parsing/alias_option.ts +0 -5
  293. package/src/parsing/ast_node.ts +0 -153
  294. package/src/parsing/base_parser.ts +0 -98
  295. package/src/parsing/components/csv.ts +0 -9
  296. package/src/parsing/components/from.ts +0 -12
  297. package/src/parsing/components/headers.ts +0 -12
  298. package/src/parsing/components/json.ts +0 -9
  299. package/src/parsing/components/null.ts +0 -9
  300. package/src/parsing/components/post.ts +0 -9
  301. package/src/parsing/components/text.ts +0 -9
  302. package/src/parsing/context.ts +0 -54
  303. package/src/parsing/data_structures/associative_array.ts +0 -43
  304. package/src/parsing/data_structures/json_array.ts +0 -31
  305. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  306. package/src/parsing/data_structures/lookup.ts +0 -44
  307. package/src/parsing/data_structures/range_lookup.ts +0 -36
  308. package/src/parsing/expressions/boolean.ts +0 -21
  309. package/src/parsing/expressions/expression.ts +0 -150
  310. package/src/parsing/expressions/expression_map.ts +0 -22
  311. package/src/parsing/expressions/f_string.ts +0 -26
  312. package/src/parsing/expressions/identifier.ts +0 -22
  313. package/src/parsing/expressions/number.ts +0 -40
  314. package/src/parsing/expressions/operator.ts +0 -354
  315. package/src/parsing/expressions/reference.ts +0 -45
  316. package/src/parsing/expressions/string.ts +0 -34
  317. package/src/parsing/functions/aggregate_function.ts +0 -58
  318. package/src/parsing/functions/async_function.ts +0 -64
  319. package/src/parsing/functions/avg.ts +0 -47
  320. package/src/parsing/functions/coalesce.ts +0 -49
  321. package/src/parsing/functions/collect.ts +0 -54
  322. package/src/parsing/functions/count.ts +0 -54
  323. package/src/parsing/functions/date.ts +0 -63
  324. package/src/parsing/functions/datetime.ts +0 -63
  325. package/src/parsing/functions/duration.ts +0 -143
  326. package/src/parsing/functions/element_id.ts +0 -51
  327. package/src/parsing/functions/function.ts +0 -60
  328. package/src/parsing/functions/function_factory.ts +0 -195
  329. package/src/parsing/functions/function_metadata.ts +0 -217
  330. package/src/parsing/functions/functions.ts +0 -70
  331. package/src/parsing/functions/head.ts +0 -42
  332. package/src/parsing/functions/id.ts +0 -51
  333. package/src/parsing/functions/join.ts +0 -40
  334. package/src/parsing/functions/keys.ts +0 -29
  335. package/src/parsing/functions/last.ts +0 -42
  336. package/src/parsing/functions/localdatetime.ts +0 -63
  337. package/src/parsing/functions/localtime.ts +0 -58
  338. package/src/parsing/functions/max.ts +0 -37
  339. package/src/parsing/functions/min.ts +0 -37
  340. package/src/parsing/functions/nodes.ts +0 -54
  341. package/src/parsing/functions/predicate_function.ts +0 -48
  342. package/src/parsing/functions/predicate_sum.ts +0 -47
  343. package/src/parsing/functions/properties.ts +0 -56
  344. package/src/parsing/functions/rand.ts +0 -21
  345. package/src/parsing/functions/range.ts +0 -37
  346. package/src/parsing/functions/reducer_element.ts +0 -10
  347. package/src/parsing/functions/relationships.ts +0 -52
  348. package/src/parsing/functions/replace.ts +0 -38
  349. package/src/parsing/functions/round.ts +0 -28
  350. package/src/parsing/functions/schema.ts +0 -39
  351. package/src/parsing/functions/size.ts +0 -28
  352. package/src/parsing/functions/split.ts +0 -45
  353. package/src/parsing/functions/string_distance.ts +0 -83
  354. package/src/parsing/functions/stringify.ts +0 -37
  355. package/src/parsing/functions/substring.ts +0 -68
  356. package/src/parsing/functions/sum.ts +0 -41
  357. package/src/parsing/functions/tail.ts +0 -39
  358. package/src/parsing/functions/temporal_utils.ts +0 -180
  359. package/src/parsing/functions/time.ts +0 -58
  360. package/src/parsing/functions/timestamp.ts +0 -37
  361. package/src/parsing/functions/to_float.ts +0 -50
  362. package/src/parsing/functions/to_integer.ts +0 -50
  363. package/src/parsing/functions/to_json.ts +0 -28
  364. package/src/parsing/functions/to_lower.ts +0 -28
  365. package/src/parsing/functions/to_string.ts +0 -32
  366. package/src/parsing/functions/trim.ts +0 -28
  367. package/src/parsing/functions/type.ts +0 -39
  368. package/src/parsing/functions/value_holder.ts +0 -13
  369. package/src/parsing/logic/case.ts +0 -26
  370. package/src/parsing/logic/else.ts +0 -12
  371. package/src/parsing/logic/end.ts +0 -9
  372. package/src/parsing/logic/then.ts +0 -12
  373. package/src/parsing/logic/when.ts +0 -12
  374. package/src/parsing/operations/aggregated_return.ts +0 -22
  375. package/src/parsing/operations/aggregated_with.ts +0 -18
  376. package/src/parsing/operations/call.ts +0 -69
  377. package/src/parsing/operations/create_node.ts +0 -39
  378. package/src/parsing/operations/create_relationship.ts +0 -38
  379. package/src/parsing/operations/delete_node.ts +0 -33
  380. package/src/parsing/operations/delete_relationship.ts +0 -32
  381. package/src/parsing/operations/group_by.ts +0 -137
  382. package/src/parsing/operations/limit.ts +0 -31
  383. package/src/parsing/operations/load.ts +0 -146
  384. package/src/parsing/operations/match.ts +0 -54
  385. package/src/parsing/operations/operation.ts +0 -69
  386. package/src/parsing/operations/order_by.ts +0 -126
  387. package/src/parsing/operations/projection.ts +0 -18
  388. package/src/parsing/operations/return.ts +0 -76
  389. package/src/parsing/operations/union.ts +0 -114
  390. package/src/parsing/operations/union_all.ts +0 -16
  391. package/src/parsing/operations/unwind.ts +0 -36
  392. package/src/parsing/operations/where.ts +0 -42
  393. package/src/parsing/operations/with.ts +0 -20
  394. package/src/parsing/parser.ts +0 -1641
  395. package/src/parsing/parser_state.ts +0 -25
  396. package/src/parsing/token_to_node.ts +0 -114
  397. package/src/tokenization/keyword.ts +0 -50
  398. package/src/tokenization/operator.ts +0 -25
  399. package/src/tokenization/string_walker.ts +0 -197
  400. package/src/tokenization/symbol.ts +0 -15
  401. package/src/tokenization/token.ts +0 -764
  402. package/src/tokenization/token_mapper.ts +0 -53
  403. package/src/tokenization/token_type.ts +0 -16
  404. package/src/tokenization/tokenizer.ts +0 -250
  405. package/src/tokenization/trie.ts +0 -117
  406. package/src/utils/object_utils.ts +0 -17
  407. package/src/utils/string_utils.ts +0 -114
  408. package/tests/compute/runner.test.ts +0 -4559
  409. package/tests/extensibility.test.ts +0 -643
  410. package/tests/graph/create.test.ts +0 -36
  411. package/tests/graph/data.test.ts +0 -58
  412. package/tests/graph/match.test.ts +0 -29
  413. package/tests/parsing/context.test.ts +0 -27
  414. package/tests/parsing/expression.test.ts +0 -303
  415. package/tests/parsing/parser.test.ts +0 -1327
  416. package/tests/tokenization/token_mapper.test.ts +0 -47
  417. package/tests/tokenization/tokenizer.test.ts +0 -191
  418. package/tests/tokenization/trie.test.ts +0 -20
  419. package/tsconfig.json +0 -19
  420. package/typedoc.json +0 -16
  421. package/vscode-settings.json.recommended +0 -16
  422. package/webpack.config.js +0 -26
@@ -1,170 +0,0 @@
1
- """Factory for creating function instances by name."""
2
-
3
- from typing import Any, Callable, Dict, List, Optional
4
-
5
- from .function_metadata import (
6
- FunctionMetadata,
7
- get_function_metadata,
8
- get_registered_function_factory,
9
- get_registered_function_metadata,
10
- )
11
-
12
-
13
- class FunctionFactory:
14
- """Factory for creating function instances by name.
15
-
16
- All functions are registered via the @FunctionDef decorator.
17
- Maps function names (case-insensitive) to their corresponding implementation classes.
18
- Supports built-in functions like sum, avg, collect, range, split, join, etc.
19
-
20
- Example:
21
- sum_func = FunctionFactory.create("sum")
22
- avg_func = FunctionFactory.create("AVG")
23
- """
24
-
25
- @staticmethod
26
- def get_async_provider(name: str) -> Optional[Callable[..., Any]]:
27
- """Gets an async data provider by name.
28
-
29
- Args:
30
- name: The function name (case-insensitive)
31
-
32
- Returns:
33
- The async data provider, or None if not found
34
- """
35
- return get_registered_function_factory(name.lower())
36
-
37
- @staticmethod
38
- def is_async_provider(name: str) -> bool:
39
- """Checks if a function name is registered as an async data provider.
40
-
41
- Args:
42
- name: The function name (case-insensitive)
43
-
44
- Returns:
45
- True if the function is an async data provider
46
- """
47
- return get_registered_function_factory(name.lower(), "async") is not None
48
-
49
- @staticmethod
50
- def get_metadata(name: str) -> Optional[FunctionMetadata]:
51
- """Gets metadata for a specific function.
52
-
53
- Args:
54
- name: The function name (case-insensitive)
55
-
56
- Returns:
57
- The function metadata, or None if not found
58
- """
59
- return get_function_metadata(name.lower())
60
-
61
- @staticmethod
62
- def list_functions(
63
- category: Optional[str] = None,
64
- async_only: bool = False,
65
- sync_only: bool = False
66
- ) -> List[FunctionMetadata]:
67
- """Lists all registered functions with their metadata.
68
-
69
- Args:
70
- category: Optional category filter
71
- async_only: If True, only return async functions
72
- sync_only: If True, only return sync functions
73
-
74
- Returns:
75
- Array of function metadata
76
- """
77
- result: List[FunctionMetadata] = []
78
-
79
- for meta in get_registered_function_metadata():
80
- if category and meta.category != category:
81
- continue
82
- if async_only and meta.category != "async":
83
- continue
84
- if sync_only and meta.category == "async":
85
- continue
86
- result.append(meta)
87
-
88
- return result
89
-
90
- @staticmethod
91
- def list_function_names() -> List[str]:
92
- """Lists all registered function names.
93
-
94
- Returns:
95
- Array of function names
96
- """
97
- return [m.name for m in get_registered_function_metadata()]
98
-
99
- @staticmethod
100
- def to_json() -> Dict[str, Any]:
101
- """Gets all function metadata as a JSON-serializable object for LLM consumption.
102
-
103
- Returns:
104
- Object with functions grouped by category
105
- """
106
- functions = FunctionFactory.list_functions()
107
- categories = list(set(f.category for f in functions if f.category))
108
- return {"functions": functions, "categories": categories}
109
-
110
- @staticmethod
111
- def create(name: str) -> Any:
112
- """Creates a function instance by name.
113
-
114
- Args:
115
- name: The function name (case-insensitive)
116
-
117
- Returns:
118
- A Function instance of the appropriate type
119
-
120
- Raises:
121
- ValueError: If the function name is not registered
122
- """
123
- lower_name = name.lower()
124
-
125
- # Check decorator-registered functions
126
- decorator_factory = get_registered_function_factory(lower_name)
127
- if decorator_factory:
128
- return decorator_factory()
129
-
130
- raise ValueError(f"Unknown function: {name}")
131
-
132
- @staticmethod
133
- def create_predicate(name: str) -> Any:
134
- """Creates a predicate function instance by name.
135
-
136
- Args:
137
- name: The function name (case-insensitive)
138
-
139
- Returns:
140
- A PredicateFunction instance of the appropriate type
141
-
142
- Raises:
143
- ValueError: If the predicate function name is not registered
144
- """
145
- lower_name = name.lower()
146
-
147
- decorator_factory = get_registered_function_factory(lower_name, "predicate")
148
- if decorator_factory:
149
- return decorator_factory()
150
-
151
- raise ValueError(f"Unknown predicate function: {name}")
152
-
153
- @staticmethod
154
- def create_async(name: str) -> Any:
155
- """Creates an async function instance by name.
156
-
157
- Args:
158
- name: The function name (case-insensitive)
159
-
160
- Returns:
161
- An AsyncFunction instance of the appropriate type
162
-
163
- Raises:
164
- ValueError: If the async function name is not registered
165
- """
166
- lower_name = name.lower()
167
- decorator_factory = get_registered_function_factory(lower_name, "async")
168
- if decorator_factory:
169
- return decorator_factory()
170
- raise ValueError(f"Unknown async function: {name}")
@@ -1,148 +0,0 @@
1
- """Function metadata and decorator for FlowQuery functions."""
2
-
3
- from dataclasses import dataclass
4
- from typing import Any, Callable, Dict, List, Optional, TypedDict, cast
5
-
6
- # Type definitions
7
- FunctionCategory = str # "scalar" | "aggregate" | "predicate" | "async" | string
8
-
9
-
10
- class ParameterSchema(TypedDict, total=False):
11
- """Schema definition for function arguments."""
12
- name: str
13
- description: str
14
- type: str # "string" | "number" | "boolean" | "object" | "array" | "null"
15
- required: bool
16
- default: Any
17
- items: Dict[str, Any]
18
- properties: Dict[str, Any]
19
- enum: List[Any]
20
- example: Any
21
-
22
-
23
- class OutputSchema(TypedDict, total=False):
24
- """Schema definition for function output."""
25
- description: str
26
- type: str
27
- items: Dict[str, Any]
28
- properties: Dict[str, Any]
29
- example: Any
30
-
31
-
32
- @dataclass
33
- class FunctionMetadata:
34
- """Metadata for a registered function, designed for LLM consumption."""
35
- name: str
36
- description: str
37
- category: FunctionCategory
38
- parameters: List[ParameterSchema]
39
- output: OutputSchema
40
- examples: Optional[List[str]] = None
41
- notes: Optional[str] = None
42
-
43
-
44
- class FunctionDefOptions(TypedDict, total=False):
45
- """Decorator options - metadata without the name (derived from class)."""
46
- description: str
47
- category: FunctionCategory
48
- parameters: List[ParameterSchema]
49
- output: OutputSchema
50
- examples: List[str]
51
- notes: str
52
-
53
-
54
- class FunctionRegistry:
55
- """Centralized registry for function metadata, factories, and async providers."""
56
-
57
- _metadata: Dict[str, FunctionMetadata] = {}
58
- _factories: Dict[str, Callable[[], Any]] = {}
59
-
60
- @classmethod
61
- def register(cls, constructor: type, options: FunctionDefOptions) -> None:
62
- """Registers a regular function class."""
63
- instance = constructor()
64
- display_name = getattr(instance, 'name', constructor.__name__).lower()
65
- category = options.get('category', '')
66
- registry_key = f"{display_name}:{category}" if category else display_name
67
-
68
- metadata = FunctionMetadata(
69
- name=display_name,
70
- description=options.get('description', ''),
71
- category=options.get('category', 'scalar'),
72
- parameters=options.get('parameters', []),
73
- output=cast(OutputSchema, options.get('output', {'description': '', 'type': 'any'})),
74
- examples=options.get('examples'),
75
- notes=options.get('notes'),
76
- )
77
- cls._metadata[registry_key] = metadata
78
-
79
- if category != 'predicate':
80
- cls._factories[display_name] = lambda c=constructor: c() # type: ignore[misc]
81
- cls._factories[registry_key] = lambda c=constructor: c() # type: ignore[misc]
82
-
83
- @classmethod
84
- def get_all_metadata(cls) -> List[FunctionMetadata]:
85
- return list(cls._metadata.values())
86
-
87
- @classmethod
88
- def get_metadata(cls, name: str, category: Optional[str] = None) -> Optional[FunctionMetadata]:
89
- lower_name = name.lower()
90
- if category:
91
- return cls._metadata.get(f"{lower_name}:{category}")
92
- for meta in cls._metadata.values():
93
- if meta.name.lower() == lower_name:
94
- return meta
95
- return None
96
-
97
- @classmethod
98
- def get_factory(cls, name: str, category: Optional[str] = None) -> Optional[Callable[[], Any]]:
99
- lower_name = name.lower()
100
- if category:
101
- return cls._factories.get(f"{lower_name}:{category}")
102
- return cls._factories.get(lower_name)
103
-
104
-
105
- def FunctionDef(options: FunctionDefOptions) -> Callable[[type], type]:
106
- """Class decorator that registers function metadata.
107
-
108
- The function name is derived from the class's constructor.
109
-
110
- Args:
111
- options: Function metadata (excluding name)
112
-
113
- Returns:
114
- Class decorator
115
-
116
- Example:
117
- @FunctionDef({
118
- 'description': "Adds two numbers",
119
- 'category': "scalar",
120
- 'parameters': [
121
- {'name': "a", 'description': "First number", 'type': "number"},
122
- {'name': "b", 'description': "Second number", 'type': "number"}
123
- ],
124
- 'output': {'description': "Sum of a and b", 'type': "number"},
125
- })
126
- class AddFunction(Function):
127
- def __init__(self):
128
- super().__init__("add")
129
- """
130
- def decorator(cls: type) -> type:
131
- FunctionRegistry.register(cls, options)
132
- return cls
133
- return decorator
134
-
135
-
136
- def get_registered_function_metadata() -> List[FunctionMetadata]:
137
- """Gets all registered function metadata from decorators."""
138
- return FunctionRegistry.get_all_metadata()
139
-
140
-
141
- def get_registered_function_factory(name: str, category: Optional[str] = None) -> Optional[Callable[[], Any]]:
142
- """Gets a registered function factory by name."""
143
- return FunctionRegistry.get_factory(name, category)
144
-
145
-
146
- def get_function_metadata(name: str, category: Optional[str] = None) -> Optional[FunctionMetadata]:
147
- """Gets metadata for a specific function by name."""
148
- return FunctionRegistry.get_metadata(name, category)
@@ -1,67 +0,0 @@
1
- """Functions introspection function."""
2
-
3
- from typing import Any
4
-
5
- from .function import Function
6
- from .function_factory import FunctionFactory
7
- from .function_metadata import FunctionDef
8
-
9
-
10
- @FunctionDef({
11
- "description": (
12
- "Lists all registered functions with their metadata. "
13
- "Useful for discovering available functions and their documentation."
14
- ),
15
- "category": "scalar",
16
- "parameters": [
17
- {
18
- "name": "category",
19
- "description": "Optional category to filter by (e.g., 'aggregation', 'string', 'math')",
20
- "type": "string",
21
- "required": False
22
- }
23
- ],
24
- "output": {
25
- "description": "Array of function metadata objects",
26
- "type": "array",
27
- "items": {
28
- "type": "object",
29
- "properties": {
30
- "name": {"description": "Function name", "type": "string"},
31
- "description": {"description": "What the function does", "type": "string"},
32
- "category": {"description": "Function category", "type": "string"},
33
- "parameters": {"description": "Array of parameter definitions", "type": "array"},
34
- "output": {"description": "Output schema", "type": "object"},
35
- "examples": {"description": "Usage examples", "type": "array"}
36
- }
37
- }
38
- },
39
- "examples": [
40
- "WITH functions() AS funcs RETURN funcs",
41
- "WITH functions('aggregation') AS funcs UNWIND funcs AS f RETURN f.name, f.description"
42
- ]
43
- })
44
- class Functions(Function):
45
- """Functions introspection function.
46
-
47
- Lists all registered functions with their metadata.
48
- """
49
-
50
- def __init__(self) -> None:
51
- super().__init__("functions")
52
- self._expected_parameter_count = None # 0 or 1 parameter
53
-
54
- def value(self) -> Any:
55
- children = self.get_children()
56
-
57
- if len(children) == 0:
58
- # Return all functions
59
- return FunctionFactory.list_functions()
60
- elif len(children) == 1:
61
- # Filter by category
62
- category = children[0].value()
63
- if isinstance(category, str):
64
- return FunctionFactory.list_functions(category=category)
65
- raise ValueError("functions() category parameter must be a string")
66
- else:
67
- raise ValueError("functions() takes 0 or 1 parameters")
@@ -1,39 +0,0 @@
1
- """Head 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 element of a list",
11
- "category": "scalar",
12
- "parameters": [
13
- {"name": "list", "description": "The list to get the first element from", "type": "array"}
14
- ],
15
- "output": {"description": "The first element of the list", "type": "any", "example": "1"},
16
- "examples": [
17
- "RETURN head([1, 2, 3])",
18
- "WITH ['a', 'b', 'c'] AS items RETURN head(items)"
19
- ]
20
- })
21
- class Head(Function):
22
- """Head function.
23
-
24
- Returns the first element of a list.
25
- """
26
-
27
- def __init__(self) -> None:
28
- super().__init__("head")
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("head() expects a list")
37
- if len(val) == 0:
38
- return None
39
- return val[0]
@@ -1,49 +0,0 @@
1
- """Id 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 id of a node or relationship. "
12
- "For nodes, returns the id property. For relationships, returns the type."
13
- ),
14
- "category": "scalar",
15
- "parameters": [
16
- {"name": "entity", "description": "A node or relationship to get the id from", "type": "object"}
17
- ],
18
- "output": {"description": "The id of the entity", "type": "any", "example": "1"},
19
- "examples": [
20
- "MATCH (n:Person) RETURN id(n)",
21
- "MATCH (a)-[r]->(b) RETURN id(r)"
22
- ]
23
- })
24
- class Id(Function):
25
- """Id function.
26
-
27
- Returns the id of a node or relationship.
28
- """
29
-
30
- def __init__(self) -> None:
31
- super().__init__("id")
32
- self._expected_parameter_count = 1
33
-
34
- def value(self) -> Any:
35
- obj = self.get_children()[0].value()
36
- if obj is None:
37
- return None
38
- if not isinstance(obj, dict):
39
- raise ValueError("id() expects a node or relationship")
40
-
41
- # If it's a RelationshipMatchRecord (has type, startNode, endNode, properties)
42
- if all(k in obj for k in ("type", "startNode", "endNode", "properties")):
43
- return obj["type"]
44
-
45
- # If it's a node record (has id field)
46
- if "id" in obj:
47
- return obj["id"]
48
-
49
- raise ValueError("id() expects a node or relationship")
@@ -1,49 +0,0 @@
1
- """Join 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": "Joins an array of strings with a delimiter",
13
- "category": "scalar",
14
- "parameters": [
15
- {"name": "array", "description": "Array of values to join", "type": "array"},
16
- {"name": "delimiter", "description": "Delimiter to join with", "type": "string"}
17
- ],
18
- "output": {"description": "Joined string", "type": "string", "example": "a,b,c"},
19
- "examples": ["WITH ['a', 'b', 'c'] AS arr RETURN join(arr, ',')"]
20
- })
21
- class Join(Function):
22
- """Join function.
23
-
24
- Joins an array of strings with a delimiter.
25
- """
26
-
27
- def __init__(self) -> None:
28
- super().__init__("join")
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(String(""))
39
- for node in nodes:
40
- self.add_child(node)
41
-
42
- def value(self) -> Any:
43
- array = self.get_children()[0].value()
44
- delimiter = self.get_children()[1].value()
45
- if array is None:
46
- return None
47
- if not isinstance(array, list) or not isinstance(delimiter, str):
48
- raise ValueError("Invalid arguments for join function")
49
- return delimiter.join(str(item) for item in array)
@@ -1,34 +0,0 @@
1
- """Keys 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 keys of an object (associative array) as an array",
11
- "category": "scalar",
12
- "parameters": [
13
- {"name": "object", "description": "Object to extract keys from", "type": "object"}
14
- ],
15
- "output": {"description": "Array of keys", "type": "array", "example": ["name", "age"]},
16
- "examples": ["WITH { name: 'Alice', age: 30 } AS obj RETURN keys(obj)"]
17
- })
18
- class Keys(Function):
19
- """Keys function.
20
-
21
- Returns the keys of an object (associative array) as an array.
22
- """
23
-
24
- def __init__(self) -> None:
25
- super().__init__("keys")
26
- self._expected_parameter_count = 1
27
-
28
- def value(self) -> Any:
29
- obj = self.get_children()[0].value()
30
- if obj is None:
31
- return None
32
- if not isinstance(obj, dict):
33
- raise ValueError("keys() expects an object, not an array or primitive")
34
- return list(obj.keys())
@@ -1,39 +0,0 @@
1
- """Last 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 last element of a list",
11
- "category": "scalar",
12
- "parameters": [
13
- {"name": "list", "description": "The list to get the last element from", "type": "array"}
14
- ],
15
- "output": {"description": "The last element of the list", "type": "any", "example": "3"},
16
- "examples": [
17
- "RETURN last([1, 2, 3])",
18
- "WITH ['a', 'b', 'c'] AS items RETURN last(items)"
19
- ]
20
- })
21
- class Last(Function):
22
- """Last function.
23
-
24
- Returns the last element of a list.
25
- """
26
-
27
- def __init__(self) -> None:
28
- super().__init__("last")
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("last() expects a list")
37
- if len(val) == 0:
38
- return None
39
- return val[-1]
@@ -1,60 +0,0 @@
1
- """Local datetime 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_datetime_object, parse_temporal_arg
9
-
10
-
11
- @FunctionDef({
12
- "description": (
13
- "Returns a local datetime value (no timezone). With no arguments returns the current local datetime. "
14
- "Accepts an ISO 8601 string or a map of components."
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 localdatetime() AS now",
34
- "RETURN localdatetime('2025-06-15T12:30:00') AS dt",
35
- "WITH localdatetime() AS dt RETURN dt.hour, dt.minute",
36
- ],
37
- })
38
- class LocalDatetime(Function):
39
- """Local datetime function.
40
-
41
- Returns a local datetime value (date + time, no timezone offset).
42
- When called with no arguments, returns the current local datetime.
43
- When called with a string argument, parses it as an ISO 8601 datetime.
44
- """
45
-
46
- def __init__(self) -> None:
47
- super().__init__("localdatetime")
48
- self._expected_parameter_count = None
49
-
50
- def value(self) -> Any:
51
- children = self.get_children()
52
- if len(children) > 1:
53
- raise ValueError("localdatetime() accepts at most one argument")
54
-
55
- if len(children) == 1:
56
- d = parse_temporal_arg(children[0].value(), "localdatetime")
57
- else:
58
- d = datetime.now()
59
-
60
- return build_datetime_object(d, utc=False)