pytrilogy 0.0.2.58__py3-none-any.whl → 0.0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. {pytrilogy-0.0.2.58.dist-info → pytrilogy-0.0.3.0.dist-info}/METADATA +9 -2
  2. pytrilogy-0.0.3.0.dist-info/RECORD +99 -0
  3. {pytrilogy-0.0.2.58.dist-info → pytrilogy-0.0.3.0.dist-info}/WHEEL +1 -1
  4. trilogy/__init__.py +2 -2
  5. trilogy/core/enums.py +1 -7
  6. trilogy/core/env_processor.py +17 -5
  7. trilogy/core/environment_helpers.py +11 -25
  8. trilogy/core/exceptions.py +4 -0
  9. trilogy/core/functions.py +695 -261
  10. trilogy/core/graph_models.py +10 -10
  11. trilogy/core/internal.py +11 -2
  12. trilogy/core/models/__init__.py +0 -0
  13. trilogy/core/models/author.py +2110 -0
  14. trilogy/core/models/build.py +1845 -0
  15. trilogy/core/models/build_environment.py +151 -0
  16. trilogy/core/models/core.py +370 -0
  17. trilogy/core/models/datasource.py +297 -0
  18. trilogy/core/models/environment.py +696 -0
  19. trilogy/core/models/execute.py +931 -0
  20. trilogy/core/optimization.py +14 -16
  21. trilogy/core/optimizations/base_optimization.py +1 -1
  22. trilogy/core/optimizations/inline_constant.py +6 -6
  23. trilogy/core/optimizations/inline_datasource.py +17 -11
  24. trilogy/core/optimizations/predicate_pushdown.py +17 -16
  25. trilogy/core/processing/concept_strategies_v3.py +180 -145
  26. trilogy/core/processing/graph_utils.py +1 -1
  27. trilogy/core/processing/node_generators/basic_node.py +19 -18
  28. trilogy/core/processing/node_generators/common.py +50 -44
  29. trilogy/core/processing/node_generators/filter_node.py +26 -13
  30. trilogy/core/processing/node_generators/group_node.py +26 -21
  31. trilogy/core/processing/node_generators/group_to_node.py +11 -8
  32. trilogy/core/processing/node_generators/multiselect_node.py +60 -43
  33. trilogy/core/processing/node_generators/node_merge_node.py +76 -38
  34. trilogy/core/processing/node_generators/rowset_node.py +57 -36
  35. trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +27 -34
  36. trilogy/core/processing/node_generators/select_merge_node.py +161 -64
  37. trilogy/core/processing/node_generators/select_node.py +13 -13
  38. trilogy/core/processing/node_generators/union_node.py +12 -11
  39. trilogy/core/processing/node_generators/unnest_node.py +9 -7
  40. trilogy/core/processing/node_generators/window_node.py +19 -16
  41. trilogy/core/processing/nodes/__init__.py +21 -18
  42. trilogy/core/processing/nodes/base_node.py +82 -66
  43. trilogy/core/processing/nodes/filter_node.py +19 -13
  44. trilogy/core/processing/nodes/group_node.py +50 -35
  45. trilogy/core/processing/nodes/merge_node.py +45 -36
  46. trilogy/core/processing/nodes/select_node_v2.py +53 -39
  47. trilogy/core/processing/nodes/union_node.py +5 -7
  48. trilogy/core/processing/nodes/unnest_node.py +7 -11
  49. trilogy/core/processing/nodes/window_node.py +9 -4
  50. trilogy/core/processing/utility.py +103 -75
  51. trilogy/core/query_processor.py +65 -47
  52. trilogy/core/statements/__init__.py +0 -0
  53. trilogy/core/statements/author.py +413 -0
  54. trilogy/core/statements/build.py +0 -0
  55. trilogy/core/statements/common.py +30 -0
  56. trilogy/core/statements/execute.py +42 -0
  57. trilogy/dialect/base.py +146 -106
  58. trilogy/dialect/common.py +9 -10
  59. trilogy/dialect/duckdb.py +1 -1
  60. trilogy/dialect/enums.py +4 -2
  61. trilogy/dialect/presto.py +1 -1
  62. trilogy/dialect/sql_server.py +1 -1
  63. trilogy/executor.py +44 -32
  64. trilogy/hooks/base_hook.py +6 -4
  65. trilogy/hooks/query_debugger.py +110 -93
  66. trilogy/parser.py +1 -1
  67. trilogy/parsing/common.py +303 -64
  68. trilogy/parsing/parse_engine.py +263 -617
  69. trilogy/parsing/render.py +50 -26
  70. trilogy/scripts/trilogy.py +2 -1
  71. pytrilogy-0.0.2.58.dist-info/RECORD +0 -87
  72. trilogy/core/models.py +0 -4960
  73. {pytrilogy-0.0.2.58.dist-info → pytrilogy-0.0.3.0.dist-info}/LICENSE.md +0 -0
  74. {pytrilogy-0.0.2.58.dist-info → pytrilogy-0.0.3.0.dist-info}/entry_points.txt +0 -0
  75. {pytrilogy-0.0.2.58.dist-info → pytrilogy-0.0.3.0.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,15 @@
1
1
  import networkx as nx
2
2
 
3
- from trilogy.core.models import Concept, Datasource
3
+ from trilogy.core.models.build import BuildConcept, BuildDatasource
4
4
 
5
5
 
6
- def concept_to_node(input: Concept) -> str:
6
+ def concept_to_node(input: BuildConcept) -> str:
7
7
  # if input.purpose == Purpose.METRIC:
8
8
  # return f"c~{input.namespace}.{input.name}@{input.grain}"
9
- return f"c~{input.address}@{input.grain}"
9
+ return f"c~{input.address}@{input.grain.without_condition()}"
10
10
 
11
11
 
12
- def datasource_to_node(input: Datasource) -> str:
12
+ def datasource_to_node(input: BuildDatasource) -> str:
13
13
  # if isinstance(input, JoinedDataSource):
14
14
  # return "ds~join~" + ",".join(
15
15
  # [datasource_to_node(sub) for sub in input.datasources]
@@ -22,12 +22,12 @@ class ReferenceGraph(nx.DiGraph):
22
22
  super().__init__(*args, **kwargs)
23
23
 
24
24
  def add_node(self, node_for_adding, **attr):
25
- if isinstance(node_for_adding, Concept):
25
+ if isinstance(node_for_adding, BuildConcept):
26
26
  node_name = concept_to_node(node_for_adding)
27
27
  attr["type"] = "concept"
28
28
  attr["concept"] = node_for_adding
29
29
  attr["grain"] = node_for_adding.grain
30
- elif isinstance(node_for_adding, Datasource):
30
+ elif isinstance(node_for_adding, BuildDatasource):
31
31
  node_name = datasource_to_node(node_for_adding)
32
32
  attr["type"] = "datasource"
33
33
  attr["ds"] = node_for_adding
@@ -37,19 +37,19 @@ class ReferenceGraph(nx.DiGraph):
37
37
  super().add_node(node_name, **attr)
38
38
 
39
39
  def add_edge(self, u_of_edge, v_of_edge, **attr):
40
- if isinstance(u_of_edge, Concept):
40
+ if isinstance(u_of_edge, BuildConcept):
41
41
  orig = u_of_edge
42
42
  u_of_edge = concept_to_node(u_of_edge)
43
43
  if u_of_edge not in self.nodes:
44
44
  self.add_node(orig)
45
- elif isinstance(u_of_edge, Datasource):
45
+ elif isinstance(u_of_edge, BuildDatasource):
46
46
  u_of_edge = datasource_to_node(u_of_edge)
47
47
 
48
- if isinstance(v_of_edge, Concept):
48
+ if isinstance(v_of_edge, BuildConcept):
49
49
  orig = v_of_edge
50
50
  v_of_edge = concept_to_node(v_of_edge)
51
51
  if v_of_edge not in self.nodes:
52
52
  self.add_node(orig)
53
- elif isinstance(v_of_edge, Datasource):
53
+ elif isinstance(v_of_edge, BuildDatasource):
54
54
  v_of_edge = datasource_to_node(v_of_edge)
55
55
  super().add_edge(u_of_edge, v_of_edge, **attr)
trilogy/core/internal.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from trilogy.core.constants import ALL_ROWS_CONCEPT, INTERNAL_NAMESPACE
2
- from trilogy.core.enums import FunctionType, Purpose
3
- from trilogy.core.models import Concept, DataType, Function, Grain
2
+ from trilogy.core.enums import Derivation, FunctionType, Granularity, Purpose
3
+ from trilogy.core.models.author import Concept, Function, Grain
4
+ from trilogy.core.models.core import DataType
4
5
 
5
6
  DEFAULT_CONCEPTS = {
6
7
  ALL_ROWS_CONCEPT: Concept(
@@ -15,6 +16,8 @@ DEFAULT_CONCEPTS = {
15
16
  output_datatype=DataType.INTEGER,
16
17
  output_purpose=Purpose.CONSTANT,
17
18
  ),
19
+ granularity=Granularity.SINGLE_ROW,
20
+ derivation=Derivation.CONSTANT,
18
21
  ),
19
22
  "concept_name": Concept(
20
23
  name="concept_name",
@@ -22,6 +25,8 @@ DEFAULT_CONCEPTS = {
22
25
  datatype=DataType.STRING,
23
26
  purpose=Purpose.KEY,
24
27
  grain=Grain(),
28
+ granularity=Granularity.SINGLE_ROW,
29
+ derivation=Derivation.CONSTANT,
25
30
  ),
26
31
  "datasource": Concept(
27
32
  name="datasource",
@@ -29,6 +34,8 @@ DEFAULT_CONCEPTS = {
29
34
  datatype=DataType.STRING,
30
35
  purpose=Purpose.KEY,
31
36
  grain=Grain(),
37
+ granularity=Granularity.SINGLE_ROW,
38
+ derivation=Derivation.CONSTANT,
32
39
  ),
33
40
  "query_text": Concept(
34
41
  name="query_text",
@@ -36,5 +43,7 @@ DEFAULT_CONCEPTS = {
36
43
  datatype=DataType.STRING,
37
44
  purpose=Purpose.KEY,
38
45
  grain=Grain(),
46
+ granularity=Granularity.SINGLE_ROW,
47
+ derivation=Derivation.CONSTANT,
39
48
  ),
40
49
  }
File without changes