relationalai 0.12.9__py3-none-any.whl → 0.12.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. relationalai/__init__.py +9 -0
  2. relationalai/clients/__init__.py +2 -2
  3. relationalai/clients/local.py +571 -0
  4. relationalai/debugging.py +5 -2
  5. relationalai/semantics/__init__.py +2 -2
  6. relationalai/semantics/internal/__init__.py +2 -2
  7. relationalai/semantics/internal/internal.py +24 -7
  8. relationalai/semantics/lqp/README.md +34 -0
  9. relationalai/semantics/lqp/constructors.py +2 -1
  10. relationalai/semantics/lqp/executor.py +13 -2
  11. relationalai/semantics/lqp/ir.py +4 -0
  12. relationalai/semantics/lqp/model2lqp.py +41 -2
  13. relationalai/semantics/lqp/passes.py +6 -4
  14. relationalai/semantics/lqp/rewrite/__init__.py +2 -0
  15. relationalai/semantics/lqp/rewrite/annotate_constraints.py +55 -0
  16. relationalai/semantics/lqp/rewrite/extract_keys.py +22 -3
  17. relationalai/semantics/lqp/rewrite/functional_dependencies.py +42 -10
  18. relationalai/semantics/lqp/rewrite/quantify_vars.py +14 -0
  19. relationalai/semantics/lqp/validators.py +3 -0
  20. relationalai/semantics/metamodel/builtins.py +5 -0
  21. relationalai/semantics/metamodel/rewrite/flatten.py +10 -4
  22. relationalai/semantics/metamodel/typer/typer.py +13 -0
  23. relationalai/semantics/metamodel/types.py +2 -1
  24. relationalai/semantics/reasoners/graph/core.py +44 -53
  25. relationalai/tools/debugger.py +4 -2
  26. relationalai/tools/qb_debugger.py +5 -3
  27. {relationalai-0.12.9.dist-info → relationalai-0.12.11.dist-info}/METADATA +2 -2
  28. {relationalai-0.12.9.dist-info → relationalai-0.12.11.dist-info}/RECORD +31 -28
  29. {relationalai-0.12.9.dist-info → relationalai-0.12.11.dist-info}/WHEEL +0 -0
  30. {relationalai-0.12.9.dist-info → relationalai-0.12.11.dist-info}/entry_points.txt +0 -0
  31. {relationalai-0.12.9.dist-info → relationalai-0.12.11.dist-info}/licenses/LICENSE +0 -0
@@ -20,7 +20,7 @@ from relationalai.semantics import (
20
20
  count, sum, avg,
21
21
  )
22
22
  from relationalai.docutils import include_in_docs
23
- from relationalai.semantics.internal import annotations
23
+ from relationalai.semantics.internal import annotations, AnyEntity
24
24
  from relationalai.semantics.internal import internal as builder_internal # For primitive graph algorithms.
25
25
  from relationalai.semantics.std.math import abs, isnan, isinf, maximum, natural_log, sqrt
26
26
  from relationalai.semantics.std.integers import int64
@@ -158,7 +158,7 @@ class Graph():
158
158
  f"but is a `{type(weighted).__name__}`."
159
159
  )
160
160
  assert isinstance(model, Model), (
161
- "The `model` argument must be a `builder.Model`, "
161
+ "The `model` argument must be a `relationalai.semantics.Model`, "
162
162
  f"but is a `{type(model).__name__}`."
163
163
  )
164
164
  self.directed = directed
@@ -355,7 +355,7 @@ class Graph():
355
355
  @cached_property
356
356
  def Node(self) -> Concept:
357
357
  """Lazily define and cache the self.Node concept."""
358
- _Node = self._user_node_concept or self._model.Concept(self._NodeConceptStr)
358
+ _Node = self._user_node_concept or self._model.Concept(self._NodeConceptStr, extends=[AnyEntity])
359
359
  _Node.annotate(annotations.track("graphs", "Node"))
360
360
  return _Node
361
361
 
@@ -2304,14 +2304,14 @@ class Graph():
2304
2304
  # neighbor_a_rel = self._neighbor_of(node_subset_from)
2305
2305
  #
2306
2306
  # domain_w = Relationship(f"{{node:{self._NodeConceptStr}}} is the domain of `w` in `common_neighbor(u, v, w)`")
2307
- # node_x, node_y = graph.Node.ref(), graph.Node.ref()
2308
- # where(neighbor_a_rel(node_x, node_y)).define(domain_w(node_y))
2307
+ # where(neighbor_a_rel(node_a, node_b)).define(domain_w(node_b))
2309
2308
  # neighbor_b_rel = self._neighbor_of(domain_w)
2310
2309
  #
2311
2310
  # node_constraint = []
2312
2311
  #
2313
- # # need to reverse the args of `neighbor_b_rel()`, due to its domain constraint
2314
- # # relies on the symmetry of `neighbor`
2312
+ # # For this case only, we reverse the args of `neighbor_b_rel()`, which
2313
+ # # is allowed by the symmetry of `neighbor`, in order to take advantage
2314
+ # # of domain constraint on `neighbor_b_rel()`.
2315
2315
  # where(
2316
2316
  # *node_constraint,
2317
2317
  # neighbor_a_rel(node_a, neighbor_node),
@@ -2748,15 +2748,15 @@ class Graph():
2748
2748
  if node_subset is None:
2749
2749
  # No constraint - use cached count_inneighbor relationship and all nodes
2750
2750
  count_inneighbor_rel = self._count_inneighbor
2751
- node_set = self.Node
2751
+ node_constraint = []
2752
2752
  else:
2753
2753
  # Constrained to nodes in the subset - use constrained count_inneighbor relationship
2754
2754
  count_inneighbor_rel = self._count_inneighbor_of(node_subset)
2755
- node_set = node_subset
2755
+ node_constraint = [node_subset(self.Node)]
2756
2756
 
2757
2757
  # Apply the same indegree logic for both cases
2758
2758
  where(
2759
- node_set(self.Node),
2759
+ *node_constraint,
2760
2760
  _indegree := where(count_inneighbor_rel(self.Node, Integer)).select(Integer) | 0,
2761
2761
  ).define(_indegree_rel(self.Node, _indegree))
2762
2762
 
@@ -2933,15 +2933,15 @@ class Graph():
2933
2933
  if node_subset is None:
2934
2934
  # No constraint - use cached count_outneighbor relationship and all nodes
2935
2935
  count_outneighbor_rel = self._count_outneighbor
2936
- node_set = self.Node
2936
+ node_constraint = []
2937
2937
  else:
2938
2938
  # Constrained to nodes in the subset - use constrained count_outneighbor relationship
2939
2939
  count_outneighbor_rel = self._count_outneighbor_of(node_subset)
2940
- node_set = node_subset
2940
+ node_constraint = [node_subset(self.Node)]
2941
2941
 
2942
2942
  # Apply the same outdegree logic for both cases
2943
2943
  where(
2944
- node_set(self.Node),
2944
+ *node_constraint,
2945
2945
  _outdegree := where(count_outneighbor_rel(self.Node, Integer)).select(Integer) | 0,
2946
2946
  ).define(_outdegree_rel(self.Node, _outdegree))
2947
2947
 
@@ -3099,12 +3099,12 @@ class Graph():
3099
3099
  node, neighbor, weight = self.Node.ref(), self.Node.ref(), Float.ref()
3100
3100
 
3101
3101
  if node_subset is None:
3102
- node_constraint = node # No constraint on nodes.
3102
+ node_constraint = [] # No constraint on nodes.
3103
3103
  else:
3104
- node_constraint = node_subset(node) # Nodes constrained to given subset.
3104
+ node_constraint = [node_subset(node)] # Nodes constrained to given subset.
3105
3105
 
3106
3106
  where(
3107
- node_constraint,
3107
+ *node_constraint,
3108
3108
  weighted_degree_no_loops := sum(neighbor, weight).per(node).where(
3109
3109
  self._weight(node, neighbor, weight),
3110
3110
  node != neighbor,
@@ -3172,7 +3172,7 @@ class Graph():
3172
3172
  >>> define(n1, n2, n3)
3173
3173
  >>> define(
3174
3174
  ... Edge.new(src=n1, dst=n2, weight=1.0),
3175
- ... Edge.new(src=n2, dst=n1, weight=-1.0),
3175
+ ... Edge.new(src=n2, dst=n1, weight=0.0),
3176
3176
  ... Edge.new(src=n2, dst=n3, weight=1.0),
3177
3177
  ... )
3178
3178
  >>>
@@ -3186,7 +3186,7 @@ class Graph():
3186
3186
  ... ).inspect()
3187
3187
  ▰▰▰▰ Setup complete
3188
3188
  id node_weighted_indegree
3189
- 0 1 -1.0
3189
+ 0 1 0.0
3190
3190
  1 2 1.0
3191
3191
  2 3 1.0
3192
3192
  >>>
@@ -3218,9 +3218,6 @@ class Graph():
3218
3218
  weighted_outdegree
3219
3219
 
3220
3220
  """
3221
- # TODO: It looks like the weights in the example in the docstring above
3222
- # are holdovers from a version of the library that did not disallow
3223
- # negative weights. Need to update the example to use only non-negative weights.
3224
3221
  if of is None:
3225
3222
  return self._weighted_indegree
3226
3223
  else:
@@ -3251,20 +3248,15 @@ class Graph():
3251
3248
  # Choose the appropriate node set
3252
3249
  if node_subset is None:
3253
3250
  # No constraint - use all nodes
3254
- node_set = self.Node
3251
+ node_constraint = []
3255
3252
  else:
3256
3253
  # Constrained to nodes in the subset
3257
- node_set = node_subset
3258
- # TODO: In a future cleanup pass, replace `node_set` with a `node_constraint`
3259
- # that replaces the `node_set(self.Node)` in the where clause below,
3260
- # and generates only `self.Node` (rather than `self.Node(self.Node)`)
3261
- # in the `subset is None` case. This applies to a couple other
3262
- # degree-of type relations as well.
3254
+ node_constraint = [node_subset(self.Node)]
3263
3255
 
3264
3256
  # Apply the weighted indegree logic for both cases
3265
3257
  src, inweight = self.Node.ref(), Float.ref()
3266
3258
  where(
3267
- node_set(self.Node),
3259
+ *node_constraint,
3268
3260
  _weighted_indegree := sum(src, inweight).per(self.Node).where(self._weight(src, self.Node, inweight)) | 0.0,
3269
3261
  ).define(_weighted_indegree_rel(self.Node, _weighted_indegree))
3270
3262
 
@@ -3324,7 +3316,7 @@ class Graph():
3324
3316
  >>> define(n1, n2, n3)
3325
3317
  >>> define(
3326
3318
  ... Edge.new(src=n1, dst=n2, weight=1.0),
3327
- ... Edge.new(src=n2, dst=n1, weight=-1.0),
3319
+ ... Edge.new(src=n2, dst=n1, weight=0.0),
3328
3320
  ... Edge.new(src=n2, dst=n3, weight=1.0),
3329
3321
  ... )
3330
3322
  >>>
@@ -3339,7 +3331,7 @@ class Graph():
3339
3331
  ▰▰▰▰ Setup complete
3340
3332
  id node_weighted_outdegree
3341
3333
  0 1 1.0
3342
- 1 2 0.0
3334
+ 1 2 1.0
3343
3335
  2 3 0.0
3344
3336
  >>>
3345
3337
  >>> # 4. Use 'of' parameter to constrain the set of nodes to compute weighted outdegree of
@@ -3355,7 +3347,7 @@ class Graph():
3355
3347
  ▰▰▰▰ Setup complete
3356
3348
  id node_weighted_outdegree
3357
3349
  0 1 1.0
3358
- 1 2 0.0
3350
+ 1 2 1.0
3359
3351
 
3360
3352
  Notes
3361
3353
  -----
@@ -3404,15 +3396,15 @@ class Graph():
3404
3396
  # Choose the appropriate node set
3405
3397
  if node_subset is None:
3406
3398
  # No constraint - use all nodes
3407
- node_set = self.Node
3399
+ node_constraint = []
3408
3400
  else:
3409
3401
  # Constrained to nodes in the subset
3410
- node_set = node_subset
3402
+ node_constraint = [node_subset(self.Node)]
3411
3403
 
3412
3404
  # Apply the weighted outdegree logic for both cases
3413
3405
  dst, outweight = self.Node.ref(), Float.ref()
3414
3406
  where(
3415
- node_set(self.Node),
3407
+ *node_constraint,
3416
3408
  _weighted_outdegree := sum(dst, outweight).per(self.Node).where(self._weight(self.Node, dst, outweight)) | 0.0,
3417
3409
  ).define(_weighted_outdegree_rel(self.Node, _weighted_outdegree))
3418
3410
 
@@ -4537,12 +4529,12 @@ class Graph():
4537
4529
  _triangle_count_rel = self._model.Relationship(f"{{node:{self._NodeConceptStr}}} belongs to {{count:Integer}} triangles")
4538
4530
 
4539
4531
  if node_subset is None:
4540
- node_constraint = self.Node # No constraint on nodes.
4532
+ node_constraint = [] # No constraint on nodes.
4541
4533
  else:
4542
- node_constraint = node_subset(self.Node) # Nodes constrained to given subset.
4534
+ node_constraint = [node_subset(self.Node)] # Nodes constrained to given subset.
4543
4535
 
4544
4536
  where(
4545
- node_constraint,
4537
+ *node_constraint,
4546
4538
  _count := self._nonzero_triangle_count_fragment(self.Node) | 0
4547
4539
  ).define(_triangle_count_rel(self.Node, _count))
4548
4540
 
@@ -4819,16 +4811,16 @@ class Graph():
4819
4811
  if node_subset is None:
4820
4812
  degree_no_self_rel = self._degree_no_self
4821
4813
  triangle_count_rel = self._triangle_count
4822
- node_constraint = node # No constraint on nodes.
4814
+ node_constraint = [] # No constraint on nodes.
4823
4815
  else:
4824
4816
  degree_no_self_rel = self._degree_no_self_of(node_subset)
4825
4817
  triangle_count_rel = self._triangle_count_of(node_subset)
4826
- node_constraint = node_subset(node) # Nodes constrained to given subset.
4818
+ node_constraint = [node_subset(node)] # Nodes constrained to given subset.
4827
4819
 
4828
4820
  degree_no_self = Integer.ref()
4829
4821
  triangle_count = Integer.ref()
4830
4822
  where(
4831
- node_constraint,
4823
+ *node_constraint,
4832
4824
  _lcc := where(
4833
4825
  degree_no_self_rel(node, degree_no_self),
4834
4826
  triangle_count_rel(node, triangle_count),
@@ -4866,12 +4858,12 @@ class Graph():
4866
4858
  node, neighbor = self.Node.ref(), self.Node.ref()
4867
4859
 
4868
4860
  if node_subset is None:
4869
- node_constraint = node # No constraint on nodes.
4861
+ node_constraint = [] # No constraint on nodes.
4870
4862
  else:
4871
- node_constraint = node_subset(node) # Nodes constrained to given subset.
4863
+ node_constraint = [node_subset(node)] # Nodes constrained to given subset.
4872
4864
 
4873
4865
  where(
4874
- node_constraint,
4866
+ *node_constraint,
4875
4867
  _dns := count(neighbor).per(node).where(self._no_loop_edge(node, neighbor)) | 0,
4876
4868
  ).define(_degree_no_self_rel(node, _dns))
4877
4869
 
@@ -7296,7 +7288,7 @@ class Graph():
7296
7288
 
7297
7289
  # TODO: Optimization opportunity. In some of the cases below
7298
7290
  # (unweighted in particular), the node_constraint is redundant with
7299
- # the constraints baked into the _count_outneigherbor_of and
7291
+ # the constraints baked into the _count_outneighbor_of and
7300
7292
  # _outneighbor_of relationships. The join with node_constraint
7301
7293
  # could be eliminated in those cases. Possibly also relevant to
7302
7294
  # other domain-constrained relations.
@@ -7366,19 +7358,18 @@ class Graph():
7366
7358
  # Define cosine similarity logic for both weighted and unweighted cases.
7367
7359
  if not self.weighted:
7368
7360
  # Unweighted case: use count of common outneighbors.
7369
- count_outneighor_u, count_outneighor_v = Integer.ref(), Integer.ref()
7361
+ count_outneighbor_u, count_outneighbor_v = Integer.ref(), Integer.ref()
7370
7362
  common_outneighbor_node = self.Node.ref()
7371
- score = Float.ref()
7372
7363
 
7373
7364
  where(
7374
7365
  *node_constraints,
7375
- count_outneighbor_u_rel(node_u, count_outneighor_u),
7376
- count_outneighbor_v_rel(node_v, count_outneighor_v),
7366
+ count_outneighbor_u_rel(node_u, count_outneighbor_u),
7367
+ count_outneighbor_v_rel(node_v, count_outneighbor_v),
7377
7368
  c_common := count(common_outneighbor_node).per(node_u, node_v).where(
7378
7369
  outneighbor_u_rel(node_u, common_outneighbor_node),
7379
7370
  outneighbor_v_rel(node_v, common_outneighbor_node),
7380
7371
  ),
7381
- score := c_common / sqrt(count_outneighor_u * count_outneighor_v),
7372
+ score := c_common / sqrt(count_outneighbor_u * count_outneighbor_v),
7382
7373
  ).define(
7383
7374
  _cosine_similarity_rel(node_u, node_v, score)
7384
7375
  )
@@ -8186,13 +8177,13 @@ class Graph():
8186
8177
  neighbor_node = self.Node.ref()
8187
8178
  if node_subset is not None:
8188
8179
  neighbor_rel = self._neighbor_of(node_subset)
8189
- node_constraint = node_subset(self.Node)
8180
+ node_constraint = [node_subset(self.Node)]
8190
8181
  else:
8191
8182
  neighbor_rel = self._neighbor
8192
- node_constraint = self.Node
8183
+ node_constraint = []
8193
8184
 
8194
8185
  where(
8195
- node_constraint,
8186
+ *node_constraint,
8196
8187
  not_(neighbor_rel(self.Node, neighbor_node))
8197
8188
  ).define(_isolated_node_rel(self.Node))
8198
8189
 
@@ -3,6 +3,8 @@ import re
3
3
  from nicegui import ui
4
4
  import json
5
5
 
6
+ from relationalai.debugging import DEBUG_LOG_FILE
7
+
6
8
 
7
9
  last_mod_time = None
8
10
  current_json_objects = []
@@ -141,12 +143,12 @@ def poll():
141
143
  global current_json_objects
142
144
  # Check the last modification time of the file
143
145
  try:
144
- mod_time = os.path.getmtime('debug.jsonl')
146
+ mod_time = os.path.getmtime(DEBUG_LOG_FILE)
145
147
  if last_mod_time is None or mod_time > last_mod_time:
146
148
  last_mod_time = mod_time
147
149
  # File has changed, read and parse the new content
148
150
  new_objects = []
149
- with open('debug.jsonl', 'r') as file:
151
+ with open(DEBUG_LOG_FILE, 'r') as file:
150
152
  for line in file:
151
153
  try:
152
154
  # Parse each JSON object and add it to the list
@@ -3,6 +3,8 @@ import re
3
3
  from nicegui import ui
4
4
  import json
5
5
 
6
+ from relationalai.debugging import DEBUG_LOG_FILE
7
+
6
8
  #--------------------------------------------------
7
9
  # Terminal nodes
8
10
  #--------------------------------------------------
@@ -12,7 +14,7 @@ TERMINAL_NODES = [
12
14
  ]
13
15
 
14
16
  #--------------------------------------------------
15
- # debug.jsonl helpers
17
+ # Debug log helpers
16
18
  #--------------------------------------------------
17
19
 
18
20
  class SpanNode:
@@ -344,11 +346,11 @@ def poll():
344
346
  global current_json_objects
345
347
  # Check the last modification time of the file
346
348
  try:
347
- mod_time = os.path.getmtime('debug.jsonl')
349
+ mod_time = os.path.getmtime(DEBUG_LOG_FILE)
348
350
  if last_mod_time is None or mod_time > last_mod_time:
349
351
  last_mod_time = mod_time
350
352
  # File has changed, read and parse the new content
351
- with open('debug.jsonl', 'r') as file:
353
+ with open(DEBUG_LOG_FILE, 'r') as file:
352
354
  content = file.read()
353
355
  if content:
354
356
  new_tree = parse_jsonl_to_tree(content)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: relationalai
3
- Version: 0.12.9
3
+ Version: 0.12.11
4
4
  Summary: RelationalAI Library and CLI
5
5
  Author-email: RelationalAI <support@relational.ai>
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: colorama
11
11
  Requires-Dist: cryptography
12
12
  Requires-Dist: gravis
13
13
  Requires-Dist: inquirerpy
14
- Requires-Dist: lqp==0.1.18
14
+ Requires-Dist: lqp==0.1.19
15
15
  Requires-Dist: nicegui==2.16.1
16
16
  Requires-Dist: numpy<2
17
17
  Requires-Dist: opentelemetry-api
@@ -1,6 +1,6 @@
1
- relationalai/__init__.py,sha256=pqV4xZy0r6EFZAoW6RXOFrfeiLPxgdCBu0L35KHXOyU,7684
1
+ relationalai/__init__.py,sha256=TxQjYI8QhbHBXvQa4ktMlBbFbgMqGd0-KrlYPvB334Q,8146
2
2
  relationalai/compiler.py,sha256=5LZY8AyqadkTLSe_xoJ3J9iXOmetz5YQn9EjJKk8XeQ,6411
3
- relationalai/debugging.py,sha256=dfT0gEDpL56GflVmtUrYVbYcVcZmQL26Vf_F8cI1QKY,11891
3
+ relationalai/debugging.py,sha256=wqGly2Yji4ErdV9F_S1Bny35SiGqI3C7S-hap7B8yUs,11997
4
4
  relationalai/dependencies.py,sha256=tL113efcISkJUiDXYHmRdU_usdD7gmee-VRHA7N4EFA,16574
5
5
  relationalai/docutils.py,sha256=1gVv9mk0ytdMB2W7_NvslJefmSQtTOg8LHTCDcGCjyE,1554
6
6
  relationalai/dsl.py,sha256=UJr93X8kwnnyUY-kjPzp_jhsp2pYBUnDfu8mhNXPNII,66116
@@ -18,7 +18,7 @@ relationalai/auth/jwt_generator.py,sha256=bQY2-EhvKcidamWB4tiRO8VVl_5bH0GC9Y6ySH
18
18
  relationalai/auth/oauth_callback_server.py,sha256=vbcpz77n_WKMDZ4sac6IYyrpxScR0DHlf5VFHMwjHGg,3908
19
19
  relationalai/auth/token_handler.py,sha256=d5aueGEiK6BmzkxSab3reCdkhtjdphb0CeecyvvNaQU,19443
20
20
  relationalai/auth/util.py,sha256=oXOUwW5gaBhEV5v5A-q2ME1VnfjfRWswvRlXW4oBYpk,1116
21
- relationalai/clients/__init__.py,sha256=0c_oqvpVN7pccc6q8fw11zSOVK-utlRTmd1ECjgMkmU,302
21
+ relationalai/clients/__init__.py,sha256=-LHT6vQmleYqAaNerV0OdHy56-s4nxFSmZFsQXfgnrI,318
22
22
  relationalai/clients/azure.py,sha256=6tYHxKVN2fHMIDV7J_EHZD9WntkYh2IreMRMqlq1Bhg,20634
23
23
  relationalai/clients/cache_store.py,sha256=A-qd11wcwN3TkIqvlN0_iFUU3aEjJal3T2pqFBwkkzQ,3966
24
24
  relationalai/clients/client.py,sha256=4SSunUwuFEcRFXOPYotpSLDPr0CKuwJ4335W0DesR90,35792
@@ -26,6 +26,7 @@ relationalai/clients/config.py,sha256=hERaKjc3l4kd-kf0l-NUOHrWunCn8gmFWpuE0j3ScJ
26
26
  relationalai/clients/direct_access_client.py,sha256=VGjQ7wzduxCo04BkxSZjlPAgqK-aBc32zIXcMfAzzSU,6436
27
27
  relationalai/clients/export_procedure.py.jinja,sha256=nhvVcs5hQyWExFDuROQbi1VyYzOCa_ZIRPR2KzZwDtI,10582
28
28
  relationalai/clients/hash_util.py,sha256=pZVR1FX3q4G_19p_r6wpIR2tIM8_WUlfAR7AVZJjIYM,1495
29
+ relationalai/clients/local.py,sha256=uX1Or2WO0juDuqa6TCCvm3G2ieP6p0PtYp_jfrCMlVc,23577
29
30
  relationalai/clients/profile_polling.py,sha256=pUH7WKH4nYDD0SlQtg3wsWdj0K7qt6nZqUw8jTthCBs,2565
30
31
  relationalai/clients/result_helpers.py,sha256=wDSD02Ngx6W-YQqBIGKnpXD4Ju3pA1e9Nz6ORRI6SRI,17808
31
32
  relationalai/clients/snowflake.py,sha256=QPJrRolINDkjZb8xyuvaLJIWOEYXdeALLSNqIAAXUEY,166006
@@ -294,41 +295,43 @@ relationalai/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
294
295
  relationalai/loaders/csv.py,sha256=SyzLDQb46Y0QGdahxkp1_mII3NhxCkyCWNwQUielXXs,7743
295
296
  relationalai/loaders/loader.py,sha256=FExfWHYyOPv_5f17N4wEIqRRWBPGfC13XvD791Ik93Y,7180
296
297
  relationalai/loaders/types.py,sha256=w4kvPMpuRoz2ckOCakHrSvtXLetVsQHLi4V3up8hzig,619
297
- relationalai/semantics/__init__.py,sha256=RTWxOsS6oCMO-T8z3-rjrhjejQIvErwlLxbVDKEpulE,911
298
+ relationalai/semantics/__init__.py,sha256=SnJCjUGj-y9e5-75jxLsiZRM_xLmhOVaZwmgxtscinI,935
298
299
  relationalai/semantics/designs/query_builder/identify_by.md,sha256=AsbusFqT6YB44-iEGfuH4GVOxf1ZjxkpFovvWPMJHuI,4877
299
300
  relationalai/semantics/devtools/__init__.py,sha256=hckMw2EtrVBiE71ABXX8bWPdI-6DV9uHqkhYG_nl8S4,85
300
301
  relationalai/semantics/devtools/benchmark_lqp.py,sha256=btySKVtUUNBuPY-l6DrkbRNlvZcNXrKUqdvo_Hqsc98,21242
301
302
  relationalai/semantics/devtools/compilation_manager.py,sha256=XBqG_nYWtK3s_J6MeCmkLqy3qm7l778zDAhH7DEO91g,11169
302
303
  relationalai/semantics/devtools/extract_lqp.py,sha256=gxI3EvPUTPAkwgnkCKAkEm2vA6QkLfoM8AXXiVz0c34,3696
303
- relationalai/semantics/internal/__init__.py,sha256=JXrpFaL-fdZrvKpWTEn1UoLXITOoTGnAYwmgeiglhSk,774
304
+ relationalai/semantics/internal/__init__.py,sha256=BS0WE1GbT-HpQ5p_zMr9Fcvph562WMvMQNI9czfKNt0,798
304
305
  relationalai/semantics/internal/annotations.py,sha256=PkrRN-gHO2ksh1hDKB1VVIB39dONvLdTd8_Y0rCR3fE,367
305
- relationalai/semantics/internal/internal.py,sha256=hElTyxtnTfNsmX9kJZ2I5yU4yA3udFyu2xk-qq8G3T0,149986
306
+ relationalai/semantics/internal/internal.py,sha256=U3FV4jgWRJGFPk7ZwPzOQl_YMHcwBFH6kXrxJNs5OjA,150750
306
307
  relationalai/semantics/internal/snowflake.py,sha256=8D6WYDFKtt8R-sc9o1Oxgtl6Xwehs2Txw_lKNBid7UA,13467
308
+ relationalai/semantics/lqp/README.md,sha256=9DsEL81q5z49YteGzLPBs_HhpZS1vO--MOBlQpCkI_Q,1116
307
309
  relationalai/semantics/lqp/__init__.py,sha256=XgcQZxK-zz_LqPDVtwREhsIvjTuUIt4BZhIedCeMY-s,48
308
310
  relationalai/semantics/lqp/builtins.py,sha256=IWRYJ1J-HGEQqBn8QVOyjZvgEiq6W9tZ0nBLdHz5wjA,576
309
311
  relationalai/semantics/lqp/compiler.py,sha256=oOGlN03NVvltKN5KSDOqvb0TsAER_igUe9CnOcHAuoY,943
310
- relationalai/semantics/lqp/constructors.py,sha256=KWXW3OxpZE8E-OYYjrjE_uFAXRekuGHn0TNSPPQyY7g,2336
311
- relationalai/semantics/lqp/executor.py,sha256=7Jk2eKlGZ0H4wXInjnHKZehDVGOq09W6zY1mFALwIyE,21160
312
+ relationalai/semantics/lqp/constructors.py,sha256=bGFUv3tLCJD8lGOSGRAPntTBOgczio96_Gn49YoHpl0,2363
313
+ relationalai/semantics/lqp/executor.py,sha256=GuPiSJpLaMYqjZOlVEFLOUilyuLcfkQgZ62UoxMpvtM,21597
312
314
  relationalai/semantics/lqp/intrinsics.py,sha256=oKPIcW8PYgU-yPTO21iSF00RBsFKPFFP5MICe6izjKk,871
313
- relationalai/semantics/lqp/ir.py,sha256=DUw0ltul0AS9CRjntNlmllWTwXpxMyYg4iJ9t7NFYMA,1791
314
- relationalai/semantics/lqp/model2lqp.py,sha256=mtxXXOMWTMrLYyB84x0OqdmwAACfQ7au1IhiKZ2_lqY,35262
315
- relationalai/semantics/lqp/passes.py,sha256=WNVuGxf1jU-UYyoEW5XvnREwJ-NW4_iMECW-Gaphaq8,28531
315
+ relationalai/semantics/lqp/ir.py,sha256=6W9mUH0W7u5eIfF1S3o33uSOfQuM3UcqEkxrxpr1X_8,1867
316
+ relationalai/semantics/lqp/model2lqp.py,sha256=PTe2PtHioWAclu6tdkCu5iGaHJxPIe7zIG1Ew72qxDo,36957
317
+ relationalai/semantics/lqp/passes.py,sha256=i5LrS92Wn-Aa6Hase4UXlogUEGL_tUYHNAYDr16CVw0,28540
316
318
  relationalai/semantics/lqp/pragmas.py,sha256=FzzldrJEAZ1AIcEw6D-FfaVg3CoahRYgPCFo7xHfg1g,375
317
319
  relationalai/semantics/lqp/primitives.py,sha256=9Hjow-Yp06jt0xatuUrH1dw0ErnzknIr9K0TB_AwdjU,11029
318
320
  relationalai/semantics/lqp/result_helpers.py,sha256=oYpLoTBnzsiyOVIWA2rLMHlgs7P7BoEkqthQ2aMosnk,10123
319
321
  relationalai/semantics/lqp/types.py,sha256=3TZ61ybwNV8lDyUMujZIWNFz3Fgn4uifsJb8ExfoMDg,4508
320
322
  relationalai/semantics/lqp/utils.py,sha256=iOoS-f8kyFjrgAnpK4cWDvAA-WmPgDRggSKUXm_JdTc,6317
321
- relationalai/semantics/lqp/validators.py,sha256=YO_ciSgEVNILWUbkxIagKpIxI4oqV0fRSTO2Ok0rPJk,1526
322
- relationalai/semantics/lqp/rewrite/__init__.py,sha256=3LxYHZm6-vaqs-5Co9DQ8awxk838f5huiR5OEaLc8Ww,411
323
+ relationalai/semantics/lqp/validators.py,sha256=FlKMKclHj0L71QUtl0aqKknqksSWM-di4N9bjGDJvnY,1561
324
+ relationalai/semantics/lqp/rewrite/__init__.py,sha256=V9ERED9qdh4VvY9Ud_M8Zn8lhVANdOGIgW03l55sGj0,492
325
+ relationalai/semantics/lqp/rewrite/annotate_constraints.py,sha256=W0_pQYWuq7ocEWNp5rWnq7YjRuJwsEHan1gIrAiRCXU,2201
323
326
  relationalai/semantics/lqp/rewrite/cdc.py,sha256=I6DeMOZScx-3UAVoSCMn9cuOgLzwdvJVKNwsgFa6R_k,10390
324
327
  relationalai/semantics/lqp/rewrite/extract_common.py,sha256=sbihURqk4wtc1ekDWXWltq9LrO42XTLfOHl5D6nT5vw,18371
325
- relationalai/semantics/lqp/rewrite/extract_keys.py,sha256=dSr5SVkYmrhiR0XPY5eRAnWD66dcZYgXdilXcERv634,18682
328
+ relationalai/semantics/lqp/rewrite/extract_keys.py,sha256=iSbwGQG9p8j-erknEwl2pZkunJEpXTlnL9ohr4KVS8M,19317
326
329
  relationalai/semantics/lqp/rewrite/function_annotations.py,sha256=9ZzLASvXh_OgQ04eup0AyoMIh2HxWHkoRETLm1-XtWs,4660
327
- relationalai/semantics/lqp/rewrite/functional_dependencies.py,sha256=pQo7a7oS1wsep3ObdxPPaV962RlR0iBWzBmd7lCzCvQ,11564
328
- relationalai/semantics/lqp/rewrite/quantify_vars.py,sha256=wYMEXzCW_D_Y_1rSLvuAAqw9KN1oIOn_vIMxELzRVb4,11568
330
+ relationalai/semantics/lqp/rewrite/functional_dependencies.py,sha256=4oQcVQtAGDqY850B1bNszigQopf6y9Y_CaUyWx42PtM,12718
331
+ relationalai/semantics/lqp/rewrite/quantify_vars.py,sha256=bOowgQ45zmP0HOhsTlE92WdVBCTXSkszcCYbPMeIibw,12004
329
332
  relationalai/semantics/lqp/rewrite/splinter.py,sha256=oeDjP_F2PVLVexAKFn8w7CLtO9oy-R-tS2IOmzw_Ujk,3199
330
333
  relationalai/semantics/metamodel/__init__.py,sha256=I-XqQAGycD0nKkKYvnF3G9d0QK_1LIM4xXICw8g8fBA,805
331
- relationalai/semantics/metamodel/builtins.py,sha256=lW8VdaSICyr8gxhFzaE-fD8wHSLBuErDOzntEC9FNL0,38407
334
+ relationalai/semantics/metamodel/builtins.py,sha256=O26klqMH4ud5nqb2Os6ISsxaPsCj5X1eVKD5RuGUmtA,38657
332
335
  relationalai/semantics/metamodel/compiler.py,sha256=XBsAnbFwgZ_TcRry6yXGWLyw_MaO2WJDp1EnC_ubhps,4525
333
336
  relationalai/semantics/metamodel/dataflow.py,sha256=wfj1tARrR4yEAaTwUTrAcxEcz81VkUal4U_AX1esovk,3929
334
337
  relationalai/semantics/metamodel/dependency.py,sha256=iJLx-w_zqde7CtbGcXxLxZBdUKZYl7AUykezPI9ccck,33926
@@ -336,23 +339,23 @@ relationalai/semantics/metamodel/executor.py,sha256=_pm--QNvAjd-GgiMKMrpkPZ2eE0H
336
339
  relationalai/semantics/metamodel/factory.py,sha256=Vk3ASwWan08mfGehoOOwMixuU_mEbG2vNl8JLSCJ2OU,12581
337
340
  relationalai/semantics/metamodel/helpers.py,sha256=aeXWkS-iKfLqqXtlMjQZyqIIiIsG9dqP4cQA3cUmM08,15403
338
341
  relationalai/semantics/metamodel/ir.py,sha256=4Xl3oc92Q7_s33axtrZUXr-GL8VGJsKc7yaSNcO6jXY,33578
339
- relationalai/semantics/metamodel/types.py,sha256=m3NolF3B_fBSnkQKA9o1feEawaW7RhR-t6W9OSxSFfc,11492
342
+ relationalai/semantics/metamodel/types.py,sha256=9ErIkHgsTcPgsoEet-meiftLs4W1MJb-G1H_1EzFfLY,11557
340
343
  relationalai/semantics/metamodel/util.py,sha256=cmSmeww34JVMqcFudwVAY820IPM2ETSELJylwJ3GRJk,16654
341
344
  relationalai/semantics/metamodel/visitor.py,sha256=DFY0DACLhxlZ0e4p0vWqbK6ZJr_GWEvH66CU_HVuoTk,35527
342
345
  relationalai/semantics/metamodel/rewrite/__init__.py,sha256=9ONWFSdMPHkWpObDMSljt8DywhpFf4Ehsq1aT3fTPt8,344
343
346
  relationalai/semantics/metamodel/rewrite/discharge_constraints.py,sha256=0v613BqCLlo4sgWuZjcLSxxakp3d34mYWbG4ldhzGno,1949
344
347
  relationalai/semantics/metamodel/rewrite/dnf_union_splitter.py,sha256=ZXX190gCKXhdB-Iyi4MGowc4FS9P0PIJTtTT0LrTr6A,7970
345
348
  relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py,sha256=vQ0-7t_GORskB1ZG50KuzM4phm6YNPvehfFn3v_LbgI,3354
346
- relationalai/semantics/metamodel/rewrite/flatten.py,sha256=uw7pKBGdrGqGYZU9NewAjvqRuhJk7As49hA_Wcwfp2k,21918
349
+ relationalai/semantics/metamodel/rewrite/flatten.py,sha256=SWvDA3NJqU0ZEJ3kzaXaJ6ZC9xeHuZ8Ju9S1jxU1Nyc,22189
347
350
  relationalai/semantics/metamodel/rewrite/format_outputs.py,sha256=n0IxC3RL3UMly6MWsq342EGfL2yGj3vOgVG_wg7kt-o,6225
348
351
  relationalai/semantics/metamodel/typer/__init__.py,sha256=E3ydmhWRdm-cAqWsNR24_Qd3NcwiHx8ElO2tzNysAXc,143
349
352
  relationalai/semantics/metamodel/typer/checker.py,sha256=frY0gilDO6skbDiYFiIpDUOWyt9s9jAJsRBs848DcG0,19184
350
- relationalai/semantics/metamodel/typer/typer.py,sha256=7kD5o08Q1bv9M5aUn9diDM5AfiuiRYi37xplqcVyLT8,62363
353
+ relationalai/semantics/metamodel/typer/typer.py,sha256=6yyLfGXPuh71TbAvK4I9AkMI4Ap5LlHhhMuDYWzj6Dw,62774
351
354
  relationalai/semantics/reasoners/__init__.py,sha256=cLrGNKFX859EdPjk2n6MdYLvueaFtTEnfVYnBriQMfI,303
352
355
  relationalai/semantics/reasoners/experimental/__init__.py,sha256=ZWXb3Oun7m_G2c3ijKnqxbEsAzTMVa7ciBXjdi4dCNI,144
353
356
  relationalai/semantics/reasoners/graph/README.md,sha256=QgKEXTllp5PO-yK8oDfMx1PNTYF2uVoneMRKsWTY5GU,23953
354
357
  relationalai/semantics/reasoners/graph/__init__.py,sha256=jSXR6J05SQZdjxQ5Y-ovqFqGTAXCOWeQDcvpfoBYgDA,1282
355
- relationalai/semantics/reasoners/graph/core.py,sha256=CBerRlgcNoiur8kIJTRnLFllibK7pBFrfViY1yfRXfI,400039
358
+ relationalai/semantics/reasoners/graph/core.py,sha256=2ZzGTWlS-IUTqVcdVx0w_GrgxIyppCvHsls1uBjFe4Q,399524
356
359
  relationalai/semantics/reasoners/graph/design/beyond_demand_transform.md,sha256=Givh0W6B6Hlow6TpmK-8adpEYd8b3O_WmdgMOQIyKs0,55749
357
360
  relationalai/semantics/reasoners/graph/tests/README.md,sha256=XbauTzt6VA_YEOcrlZwsu4WOW5UoWV8M6F57wmxe5QU,1023
358
361
  relationalai/semantics/reasoners/optimization/__init__.py,sha256=lpavly1Qa3VKvLgrbpp-tsxY9hcqHL6buxuekgKPakw,2212
@@ -408,12 +411,12 @@ relationalai/tools/cli.py,sha256=EBrPdJQsltUQGClQTYaEDVmEmm4w_UGdb8fT_DKIeOQ,770
408
411
  relationalai/tools/cli_controls.py,sha256=84K0sjfsVwqi9C8ZlpvPi6XZPhjyW-R06Pir9Ex_Xtg,70468
409
412
  relationalai/tools/cli_helpers.py,sha256=r-gJnWnb3d6yIn_ccyp3qx_Vpqh-FINCFMyPBVCA-Jg,14041
410
413
  relationalai/tools/constants.py,sha256=A8Qz0CPs2cRUs5xaZ-Y7BCyvqmI6RLvipzwLDYZ3_PU,4505
411
- relationalai/tools/debugger.py,sha256=yb03qO8ENHG2rBOPOF-rPKHGrJmaNy6iWXijg6T0dUI,6881
414
+ relationalai/tools/debugger.py,sha256=iWO1tMJud3dXHIkrjdZ5Temp0MR2AwN5_QGDt-ddmcs,6934
412
415
  relationalai/tools/debugger_client.py,sha256=g9vBaeJLKVq6vW63W-KKSaPJ--g5Wuf4LcIuYRA_pk4,3729
413
416
  relationalai/tools/debugger_server.py,sha256=UXVMtbmvgp7IqN9TzVnUvPj-TVrb6GzJOJ2z15Al9YU,9880
414
417
  relationalai/tools/dev.py,sha256=ZFYbBj25Wf5iy6womAEkLF5RD6O0vZLAOUPQgPcKkS8,22931
415
418
  relationalai/tools/notes,sha256=5ufkUHNktVRvQayBVktn2rLgDBapAEKxKJxQ20tRjpA,263
416
- relationalai/tools/qb_debugger.py,sha256=EKGf_b8wdxxVLz_zo2PfHOPyvpTtPNwEx9ndKg-lq_w,16322
419
+ relationalai/tools/qb_debugger.py,sha256=A9SyD1z77Ocsxm42XhUl-QspDylEtBe5K_Khxnq3Xhs,16373
417
420
  relationalai/tools/query_utils.py,sha256=SevPuWHZUjHc4A-RbyiJN0oWAVQGGo72UM3Saj29DwY,821
418
421
  relationalai/tools/snapshot_viewer.py,sha256=60DW41X4NpjxmPjf1B8mG3oIocHMLLNEbThIdJavi_o,28779
419
422
  relationalai/util/__init__.py,sha256=FcHFPzeyDcQwENQg2KA70lBsFx5TtN7xo0quy_cJDQI,208
@@ -439,8 +442,8 @@ frontend/debugger/dist/index.html,sha256=0wIQ1Pm7BclVV1wna6Mj8OmgU73B9rSEGPVX-Wo
439
442
  frontend/debugger/dist/assets/favicon-Dy0ZgA6N.png,sha256=tPXOEhOrM4tJyZVJQVBO_yFgNAlgooY38ZsjyrFstgg,620
440
443
  frontend/debugger/dist/assets/index-Cssla-O7.js,sha256=MxgIGfdKQyBWgufck1xYggQNhW5nj6BPjCF6Wleo-f0,298886
441
444
  frontend/debugger/dist/assets/index-DlHsYx1V.css,sha256=21pZtAjKCcHLFjbjfBQTF6y7QmOic-4FYaKNmwdNZVE,60141
442
- relationalai-0.12.9.dist-info/METADATA,sha256=r7ebl7OUAHSnHZxFdPUL8woKPut0wWKjJ6Z1wvHc6Ko,2562
443
- relationalai-0.12.9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
444
- relationalai-0.12.9.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
445
- relationalai-0.12.9.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
446
- relationalai-0.12.9.dist-info/RECORD,,
445
+ relationalai-0.12.11.dist-info/METADATA,sha256=Gaq2yLT7R1yQ5rf6a7IwR1fWRaFaZ-sMLV5cMdQmeWg,2563
446
+ relationalai-0.12.11.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
447
+ relationalai-0.12.11.dist-info/entry_points.txt,sha256=fo_oLFJih3PUgYuHXsk7RnCjBm9cqRNR--ab6DgI6-0,88
448
+ relationalai-0.12.11.dist-info/licenses/LICENSE,sha256=pPyTVXFYhirkEW9VsnHIgUjT0Vg8_xsE6olrF5SIgpc,11343
449
+ relationalai-0.12.11.dist-info/RECORD,,