pytrilogy 0.3.148__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.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 (206) hide show
  1. LICENSE.md +19 -0
  2. _preql_import_resolver/__init__.py +5 -0
  3. _preql_import_resolver/_preql_import_resolver.cpython-312-aarch64-linux-gnu.so +0 -0
  4. pytrilogy-0.3.148.dist-info/METADATA +555 -0
  5. pytrilogy-0.3.148.dist-info/RECORD +206 -0
  6. pytrilogy-0.3.148.dist-info/WHEEL +5 -0
  7. pytrilogy-0.3.148.dist-info/entry_points.txt +2 -0
  8. pytrilogy-0.3.148.dist-info/licenses/LICENSE.md +19 -0
  9. trilogy/__init__.py +27 -0
  10. trilogy/ai/README.md +10 -0
  11. trilogy/ai/__init__.py +19 -0
  12. trilogy/ai/constants.py +92 -0
  13. trilogy/ai/conversation.py +107 -0
  14. trilogy/ai/enums.py +7 -0
  15. trilogy/ai/execute.py +50 -0
  16. trilogy/ai/models.py +34 -0
  17. trilogy/ai/prompts.py +100 -0
  18. trilogy/ai/providers/__init__.py +0 -0
  19. trilogy/ai/providers/anthropic.py +106 -0
  20. trilogy/ai/providers/base.py +24 -0
  21. trilogy/ai/providers/google.py +146 -0
  22. trilogy/ai/providers/openai.py +89 -0
  23. trilogy/ai/providers/utils.py +68 -0
  24. trilogy/authoring/README.md +3 -0
  25. trilogy/authoring/__init__.py +148 -0
  26. trilogy/constants.py +119 -0
  27. trilogy/core/README.md +52 -0
  28. trilogy/core/__init__.py +0 -0
  29. trilogy/core/constants.py +6 -0
  30. trilogy/core/enums.py +454 -0
  31. trilogy/core/env_processor.py +239 -0
  32. trilogy/core/environment_helpers.py +320 -0
  33. trilogy/core/ergonomics.py +193 -0
  34. trilogy/core/exceptions.py +123 -0
  35. trilogy/core/functions.py +1240 -0
  36. trilogy/core/graph_models.py +142 -0
  37. trilogy/core/internal.py +85 -0
  38. trilogy/core/models/__init__.py +0 -0
  39. trilogy/core/models/author.py +2662 -0
  40. trilogy/core/models/build.py +2603 -0
  41. trilogy/core/models/build_environment.py +165 -0
  42. trilogy/core/models/core.py +506 -0
  43. trilogy/core/models/datasource.py +434 -0
  44. trilogy/core/models/environment.py +756 -0
  45. trilogy/core/models/execute.py +1213 -0
  46. trilogy/core/optimization.py +251 -0
  47. trilogy/core/optimizations/__init__.py +12 -0
  48. trilogy/core/optimizations/base_optimization.py +17 -0
  49. trilogy/core/optimizations/hide_unused_concept.py +47 -0
  50. trilogy/core/optimizations/inline_datasource.py +102 -0
  51. trilogy/core/optimizations/predicate_pushdown.py +245 -0
  52. trilogy/core/processing/README.md +94 -0
  53. trilogy/core/processing/READMEv2.md +121 -0
  54. trilogy/core/processing/VIRTUAL_UNNEST.md +30 -0
  55. trilogy/core/processing/__init__.py +0 -0
  56. trilogy/core/processing/concept_strategies_v3.py +508 -0
  57. trilogy/core/processing/constants.py +15 -0
  58. trilogy/core/processing/discovery_node_factory.py +451 -0
  59. trilogy/core/processing/discovery_utility.py +548 -0
  60. trilogy/core/processing/discovery_validation.py +167 -0
  61. trilogy/core/processing/graph_utils.py +43 -0
  62. trilogy/core/processing/node_generators/README.md +9 -0
  63. trilogy/core/processing/node_generators/__init__.py +31 -0
  64. trilogy/core/processing/node_generators/basic_node.py +160 -0
  65. trilogy/core/processing/node_generators/common.py +270 -0
  66. trilogy/core/processing/node_generators/constant_node.py +38 -0
  67. trilogy/core/processing/node_generators/filter_node.py +315 -0
  68. trilogy/core/processing/node_generators/group_node.py +213 -0
  69. trilogy/core/processing/node_generators/group_to_node.py +117 -0
  70. trilogy/core/processing/node_generators/multiselect_node.py +207 -0
  71. trilogy/core/processing/node_generators/node_merge_node.py +695 -0
  72. trilogy/core/processing/node_generators/recursive_node.py +88 -0
  73. trilogy/core/processing/node_generators/rowset_node.py +165 -0
  74. trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
  75. trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +261 -0
  76. trilogy/core/processing/node_generators/select_merge_node.py +786 -0
  77. trilogy/core/processing/node_generators/select_node.py +95 -0
  78. trilogy/core/processing/node_generators/synonym_node.py +98 -0
  79. trilogy/core/processing/node_generators/union_node.py +91 -0
  80. trilogy/core/processing/node_generators/unnest_node.py +182 -0
  81. trilogy/core/processing/node_generators/window_node.py +201 -0
  82. trilogy/core/processing/nodes/README.md +28 -0
  83. trilogy/core/processing/nodes/__init__.py +179 -0
  84. trilogy/core/processing/nodes/base_node.py +522 -0
  85. trilogy/core/processing/nodes/filter_node.py +75 -0
  86. trilogy/core/processing/nodes/group_node.py +194 -0
  87. trilogy/core/processing/nodes/merge_node.py +420 -0
  88. trilogy/core/processing/nodes/recursive_node.py +46 -0
  89. trilogy/core/processing/nodes/select_node_v2.py +242 -0
  90. trilogy/core/processing/nodes/union_node.py +53 -0
  91. trilogy/core/processing/nodes/unnest_node.py +62 -0
  92. trilogy/core/processing/nodes/window_node.py +56 -0
  93. trilogy/core/processing/utility.py +823 -0
  94. trilogy/core/query_processor.py +604 -0
  95. trilogy/core/statements/README.md +35 -0
  96. trilogy/core/statements/__init__.py +0 -0
  97. trilogy/core/statements/author.py +536 -0
  98. trilogy/core/statements/build.py +0 -0
  99. trilogy/core/statements/common.py +20 -0
  100. trilogy/core/statements/execute.py +155 -0
  101. trilogy/core/table_processor.py +66 -0
  102. trilogy/core/utility.py +8 -0
  103. trilogy/core/validation/README.md +46 -0
  104. trilogy/core/validation/__init__.py +0 -0
  105. trilogy/core/validation/common.py +161 -0
  106. trilogy/core/validation/concept.py +146 -0
  107. trilogy/core/validation/datasource.py +227 -0
  108. trilogy/core/validation/environment.py +73 -0
  109. trilogy/core/validation/fix.py +256 -0
  110. trilogy/dialect/__init__.py +32 -0
  111. trilogy/dialect/base.py +1431 -0
  112. trilogy/dialect/bigquery.py +314 -0
  113. trilogy/dialect/common.py +147 -0
  114. trilogy/dialect/config.py +159 -0
  115. trilogy/dialect/dataframe.py +50 -0
  116. trilogy/dialect/duckdb.py +376 -0
  117. trilogy/dialect/enums.py +149 -0
  118. trilogy/dialect/metadata.py +173 -0
  119. trilogy/dialect/mock.py +190 -0
  120. trilogy/dialect/postgres.py +117 -0
  121. trilogy/dialect/presto.py +110 -0
  122. trilogy/dialect/results.py +89 -0
  123. trilogy/dialect/snowflake.py +129 -0
  124. trilogy/dialect/sql_server.py +137 -0
  125. trilogy/engine.py +48 -0
  126. trilogy/execution/__init__.py +17 -0
  127. trilogy/execution/config.py +119 -0
  128. trilogy/execution/state/__init__.py +0 -0
  129. trilogy/execution/state/file_state_store.py +0 -0
  130. trilogy/execution/state/sqllite_state_store.py +0 -0
  131. trilogy/execution/state/state_store.py +301 -0
  132. trilogy/executor.py +656 -0
  133. trilogy/hooks/__init__.py +4 -0
  134. trilogy/hooks/base_hook.py +40 -0
  135. trilogy/hooks/graph_hook.py +135 -0
  136. trilogy/hooks/query_debugger.py +166 -0
  137. trilogy/metadata/__init__.py +0 -0
  138. trilogy/parser.py +10 -0
  139. trilogy/parsing/README.md +21 -0
  140. trilogy/parsing/__init__.py +0 -0
  141. trilogy/parsing/common.py +1069 -0
  142. trilogy/parsing/config.py +5 -0
  143. trilogy/parsing/exceptions.py +8 -0
  144. trilogy/parsing/helpers.py +1 -0
  145. trilogy/parsing/parse_engine.py +2863 -0
  146. trilogy/parsing/render.py +773 -0
  147. trilogy/parsing/trilogy.lark +544 -0
  148. trilogy/py.typed +0 -0
  149. trilogy/render.py +45 -0
  150. trilogy/scripts/README.md +9 -0
  151. trilogy/scripts/__init__.py +0 -0
  152. trilogy/scripts/agent.py +41 -0
  153. trilogy/scripts/agent_info.py +306 -0
  154. trilogy/scripts/common.py +430 -0
  155. trilogy/scripts/dependency/Cargo.lock +617 -0
  156. trilogy/scripts/dependency/Cargo.toml +39 -0
  157. trilogy/scripts/dependency/README.md +131 -0
  158. trilogy/scripts/dependency/build.sh +25 -0
  159. trilogy/scripts/dependency/src/directory_resolver.rs +387 -0
  160. trilogy/scripts/dependency/src/lib.rs +16 -0
  161. trilogy/scripts/dependency/src/main.rs +770 -0
  162. trilogy/scripts/dependency/src/parser.rs +435 -0
  163. trilogy/scripts/dependency/src/preql.pest +208 -0
  164. trilogy/scripts/dependency/src/python_bindings.rs +311 -0
  165. trilogy/scripts/dependency/src/resolver.rs +716 -0
  166. trilogy/scripts/dependency/tests/base.preql +3 -0
  167. trilogy/scripts/dependency/tests/cli_integration.rs +377 -0
  168. trilogy/scripts/dependency/tests/customer.preql +6 -0
  169. trilogy/scripts/dependency/tests/main.preql +9 -0
  170. trilogy/scripts/dependency/tests/orders.preql +7 -0
  171. trilogy/scripts/dependency/tests/test_data/base.preql +9 -0
  172. trilogy/scripts/dependency/tests/test_data/consumer.preql +1 -0
  173. trilogy/scripts/dependency.py +323 -0
  174. trilogy/scripts/display.py +555 -0
  175. trilogy/scripts/environment.py +59 -0
  176. trilogy/scripts/fmt.py +32 -0
  177. trilogy/scripts/ingest.py +472 -0
  178. trilogy/scripts/ingest_helpers/__init__.py +1 -0
  179. trilogy/scripts/ingest_helpers/foreign_keys.py +123 -0
  180. trilogy/scripts/ingest_helpers/formatting.py +93 -0
  181. trilogy/scripts/ingest_helpers/typing.py +161 -0
  182. trilogy/scripts/init.py +105 -0
  183. trilogy/scripts/parallel_execution.py +748 -0
  184. trilogy/scripts/plan.py +189 -0
  185. trilogy/scripts/refresh.py +106 -0
  186. trilogy/scripts/run.py +79 -0
  187. trilogy/scripts/serve.py +202 -0
  188. trilogy/scripts/serve_helpers/__init__.py +41 -0
  189. trilogy/scripts/serve_helpers/file_discovery.py +142 -0
  190. trilogy/scripts/serve_helpers/index_generation.py +206 -0
  191. trilogy/scripts/serve_helpers/models.py +38 -0
  192. trilogy/scripts/single_execution.py +131 -0
  193. trilogy/scripts/testing.py +129 -0
  194. trilogy/scripts/trilogy.py +75 -0
  195. trilogy/std/__init__.py +0 -0
  196. trilogy/std/color.preql +3 -0
  197. trilogy/std/date.preql +13 -0
  198. trilogy/std/display.preql +18 -0
  199. trilogy/std/geography.preql +22 -0
  200. trilogy/std/metric.preql +15 -0
  201. trilogy/std/money.preql +67 -0
  202. trilogy/std/net.preql +14 -0
  203. trilogy/std/ranking.preql +7 -0
  204. trilogy/std/report.preql +5 -0
  205. trilogy/std/semantic.preql +6 -0
  206. trilogy/utility.py +34 -0
@@ -0,0 +1,193 @@
1
+ from trilogy.constants import CONFIG
2
+
3
+ # source: https://github.com/aaronbassett/Pass-phrase
4
+ CTE_NAMES = """quizzical
5
+ highfalutin
6
+ wakeful
7
+ cheerful
8
+ thoughtful
9
+ cooperative
10
+ questionable
11
+ abundant
12
+ uneven
13
+ yummy
14
+ juicy
15
+ vacuous
16
+ concerned
17
+ young
18
+ sparkling
19
+ abhorrent
20
+ sweltering
21
+ late
22
+ macho
23
+ scrawny
24
+ friendly
25
+ kaput
26
+ divergent
27
+ busy
28
+ charming
29
+ protective
30
+ premium
31
+ puzzled
32
+ waggish
33
+ rambunctious
34
+ puffy
35
+ hard
36
+ sedate
37
+ yellow
38
+ resonant
39
+ dapper
40
+ courageous
41
+ vast
42
+ cool
43
+ elated
44
+ wary
45
+ bewildered
46
+ level
47
+ wooden
48
+ ceaseless
49
+ tearful
50
+ cloudy
51
+ gullible
52
+ flashy
53
+ trite
54
+ quick
55
+ nondescript
56
+ round
57
+ slow
58
+ spiritual
59
+ brave
60
+ tenuous
61
+ abstracted
62
+ colossal
63
+ sloppy
64
+ obsolete
65
+ elegant
66
+ fabulous
67
+ vivacious
68
+ exuberant
69
+ faithful
70
+ helpless
71
+ odd
72
+ sordid
73
+ blue
74
+ imported
75
+ ugly
76
+ ruthless
77
+ deeply
78
+ eminent
79
+ badger
80
+ barracuda
81
+ bear
82
+ boa
83
+ cheetah
84
+ chimpanzee
85
+ civet
86
+ cobra
87
+ cougar
88
+ coyote
89
+ crocodile
90
+ dingo
91
+ eagle
92
+ eel
93
+ fossa
94
+ fox
95
+ human
96
+ jackal
97
+ jaguar
98
+ komodo
99
+ leopard
100
+ lion
101
+ lynx
102
+ mamba
103
+ mandrill
104
+ marlin
105
+ monitor
106
+ ocelot
107
+ petrel
108
+ python
109
+ ray
110
+ salamander
111
+ serval
112
+ shark
113
+ skua
114
+ tiger
115
+ viper
116
+ wolf
117
+ wolverine
118
+ albatross
119
+ avocet
120
+ budgie
121
+ canary
122
+ chick
123
+ chickadee
124
+ chicken
125
+ cockatiel
126
+ cockatoo
127
+ coot
128
+ covey
129
+ crow
130
+ cuckoo
131
+ darter
132
+ dove
133
+ duck
134
+ falcon
135
+ finch
136
+ flamingo
137
+ fowl
138
+ goldfinch
139
+ goose
140
+ grouse
141
+ hawk
142
+ heron
143
+ jackdaw
144
+ jay
145
+ kestrel
146
+ lark
147
+ loon
148
+ macaw
149
+ magpie
150
+ martin
151
+ osprey
152
+ ostrich
153
+ owl
154
+ parakeet
155
+ parrot
156
+ pelican
157
+ penguin
158
+ pigeon
159
+ pintail
160
+ puffin
161
+ quail
162
+ quetzal
163
+ rail
164
+ raven
165
+ razorbill
166
+ rhea
167
+ rook
168
+ shrike
169
+ skylark
170
+ snipe
171
+ sparrow
172
+ starling
173
+ stork
174
+ swallow
175
+ swift
176
+ tanager
177
+ thrush
178
+ toucan
179
+ turkey
180
+ vulture
181
+ warbler""".split(
182
+ "\n"
183
+ )
184
+
185
+
186
+ def generate_cte_names():
187
+ if CONFIG.randomize_cte_names:
188
+ from random import shuffle
189
+
190
+ new = [*CTE_NAMES]
191
+ shuffle(new)
192
+ return new
193
+ return CTE_NAMES
@@ -0,0 +1,123 @@
1
+ from dataclasses import dataclass
2
+ from typing import Any, List, Sequence
3
+
4
+ from trilogy.core.enums import Modifier
5
+ from trilogy.core.models.core import (
6
+ ArrayType,
7
+ DataType,
8
+ MapType,
9
+ NumericType,
10
+ StructType,
11
+ TraitDataType,
12
+ )
13
+
14
+
15
+ class ConfigurationException(Exception):
16
+ pass
17
+
18
+
19
+ class UndefinedConceptException(Exception):
20
+ def __init__(self, message, suggestions: List[str]):
21
+ super().__init__(self, message)
22
+ self.message = message
23
+ self.suggestions = suggestions
24
+
25
+
26
+ class FrozenEnvironmentException(Exception):
27
+ pass
28
+
29
+
30
+ class InvalidSyntaxException(Exception):
31
+ pass
32
+
33
+
34
+ class MissingParameterException(InvalidSyntaxException):
35
+ pass
36
+
37
+
38
+ class UnresolvableQueryException(Exception):
39
+ pass
40
+
41
+
42
+ class NoDatasourceException(UnresolvableQueryException):
43
+ pass
44
+
45
+
46
+ class ModelValidationError(Exception):
47
+ def __init__(
48
+ self,
49
+ message,
50
+ children: Sequence["ModelValidationError"] | None = None,
51
+ **kwargs,
52
+ ):
53
+ super().__init__(self, message, **kwargs)
54
+ self.message = message
55
+ self.children = children
56
+
57
+
58
+ class DatasourceModelValidationError(ModelValidationError):
59
+ pass
60
+
61
+
62
+ class DatasourceGrainValidationError(DatasourceModelValidationError):
63
+ pass
64
+
65
+
66
+ @dataclass
67
+ class DatasourceColumnBindingData:
68
+ address: str
69
+ value: Any
70
+ value_type: (
71
+ DataType | ArrayType | StructType | MapType | NumericType | TraitDataType
72
+ )
73
+ value_modifiers: List[Modifier]
74
+ actual_type: (
75
+ DataType | ArrayType | StructType | MapType | NumericType | TraitDataType
76
+ )
77
+ actual_modifiers: List[Modifier]
78
+
79
+ def format_failure(self):
80
+ value_mods = (
81
+ f"({', '.join(x.name for x in self.value_modifiers)})"
82
+ if self.value_modifiers
83
+ else ""
84
+ )
85
+ actual_mods = (
86
+ f"({', '.join(x.name for x in self.actual_modifiers)})"
87
+ if self.actual_modifiers
88
+ else ""
89
+ )
90
+ return f"Value '{self.value}' for concept {self.address} has inferred type {self.value_type}{value_mods} vs expected type {str(self.actual_type)}{actual_mods}"
91
+
92
+ def is_modifier_issue(self) -> bool:
93
+ return len(self.value_modifiers) > 0 and any(
94
+ [x not in self.actual_modifiers for x in self.value_modifiers]
95
+ )
96
+
97
+ def is_type_issue(self) -> bool:
98
+ return self.value_type != self.actual_type
99
+
100
+
101
+ class DatasourceColumnBindingError(DatasourceModelValidationError):
102
+ def __init__(
103
+ self,
104
+ address: str,
105
+ errors: list[DatasourceColumnBindingData],
106
+ message: str | None = None,
107
+ ):
108
+ if not message:
109
+ message = f"Datasource {address} failed validation. Data type mismatch: {[failure.format_failure() for failure in errors]}"
110
+ super().__init__(message)
111
+ self.errors = errors
112
+ self.dataset_address = address
113
+
114
+
115
+ class ConceptModelValidationError(ModelValidationError):
116
+ pass
117
+
118
+
119
+ class AmbiguousRelationshipResolutionException(UnresolvableQueryException):
120
+ def __init__(self, message, parents: List[set[str]]):
121
+ super().__init__(self, message)
122
+ self.message = message
123
+ self.parents = parents