pytrilogy 0.0.2.46__py3-none-any.whl → 0.0.2.48__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.

Potentially problematic release.


This version of pytrilogy might be problematic. Click here for more details.

Files changed (69) hide show
  1. {pytrilogy-0.0.2.46.dist-info → pytrilogy-0.0.2.48.dist-info}/METADATA +1 -1
  2. pytrilogy-0.0.2.48.dist-info/RECORD +85 -0
  3. trilogy/__init__.py +2 -2
  4. trilogy/constants.py +4 -2
  5. trilogy/core/enums.py +7 -1
  6. trilogy/core/env_processor.py +1 -2
  7. trilogy/core/environment_helpers.py +5 -5
  8. trilogy/core/functions.py +11 -10
  9. trilogy/core/internal.py +2 -3
  10. trilogy/core/models.py +448 -394
  11. trilogy/core/optimization.py +37 -21
  12. trilogy/core/optimizations/__init__.py +1 -1
  13. trilogy/core/optimizations/base_optimization.py +6 -6
  14. trilogy/core/optimizations/inline_constant.py +7 -4
  15. trilogy/core/optimizations/inline_datasource.py +14 -5
  16. trilogy/core/optimizations/predicate_pushdown.py +20 -10
  17. trilogy/core/processing/concept_strategies_v3.py +40 -24
  18. trilogy/core/processing/graph_utils.py +2 -3
  19. trilogy/core/processing/node_generators/__init__.py +7 -5
  20. trilogy/core/processing/node_generators/basic_node.py +4 -4
  21. trilogy/core/processing/node_generators/common.py +10 -11
  22. trilogy/core/processing/node_generators/filter_node.py +7 -9
  23. trilogy/core/processing/node_generators/group_node.py +10 -11
  24. trilogy/core/processing/node_generators/group_to_node.py +5 -5
  25. trilogy/core/processing/node_generators/multiselect_node.py +10 -12
  26. trilogy/core/processing/node_generators/node_merge_node.py +7 -9
  27. trilogy/core/processing/node_generators/rowset_node.py +9 -8
  28. trilogy/core/processing/node_generators/select_merge_node.py +11 -10
  29. trilogy/core/processing/node_generators/select_node.py +5 -5
  30. trilogy/core/processing/node_generators/union_node.py +75 -0
  31. trilogy/core/processing/node_generators/unnest_node.py +2 -3
  32. trilogy/core/processing/node_generators/window_node.py +3 -4
  33. trilogy/core/processing/nodes/__init__.py +9 -5
  34. trilogy/core/processing/nodes/base_node.py +17 -13
  35. trilogy/core/processing/nodes/filter_node.py +3 -4
  36. trilogy/core/processing/nodes/group_node.py +8 -10
  37. trilogy/core/processing/nodes/merge_node.py +11 -11
  38. trilogy/core/processing/nodes/select_node_v2.py +8 -9
  39. trilogy/core/processing/nodes/union_node.py +50 -0
  40. trilogy/core/processing/nodes/unnest_node.py +2 -3
  41. trilogy/core/processing/nodes/window_node.py +2 -3
  42. trilogy/core/processing/utility.py +37 -40
  43. trilogy/core/query_processor.py +68 -44
  44. trilogy/dialect/base.py +95 -53
  45. trilogy/dialect/bigquery.py +2 -3
  46. trilogy/dialect/common.py +5 -4
  47. trilogy/dialect/config.py +0 -2
  48. trilogy/dialect/duckdb.py +2 -2
  49. trilogy/dialect/enums.py +5 -5
  50. trilogy/dialect/postgres.py +2 -2
  51. trilogy/dialect/presto.py +3 -4
  52. trilogy/dialect/snowflake.py +2 -2
  53. trilogy/dialect/sql_server.py +3 -4
  54. trilogy/engine.py +2 -1
  55. trilogy/executor.py +43 -30
  56. trilogy/hooks/base_hook.py +5 -4
  57. trilogy/hooks/graph_hook.py +2 -1
  58. trilogy/hooks/query_debugger.py +18 -8
  59. trilogy/parsing/common.py +15 -20
  60. trilogy/parsing/parse_engine.py +124 -88
  61. trilogy/parsing/render.py +32 -35
  62. trilogy/parsing/trilogy.lark +8 -1
  63. trilogy/scripts/trilogy.py +6 -4
  64. trilogy/utility.py +1 -1
  65. pytrilogy-0.0.2.46.dist-info/RECORD +0 -83
  66. {pytrilogy-0.0.2.46.dist-info → pytrilogy-0.0.2.48.dist-info}/LICENSE.md +0 -0
  67. {pytrilogy-0.0.2.46.dist-info → pytrilogy-0.0.2.48.dist-info}/WHEEL +0 -0
  68. {pytrilogy-0.0.2.46.dist-info → pytrilogy-0.0.2.48.dist-info}/entry_points.txt +0 -0
  69. {pytrilogy-0.0.2.46.dist-info → pytrilogy-0.0.2.48.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytrilogy
3
- Version: 0.0.2.46
3
+ Version: 0.0.2.48
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -0,0 +1,85 @@
1
+ trilogy/__init__.py,sha256=rBXQoKLExpvOodgSnjarZ5SG_tlNVQvyadW0PFK1aFs,291
2
+ trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ trilogy/constants.py,sha256=qZ1d0hoKPPV2HHCoFwPYTVB7b6bXjpWvXd3lE-zEhy8,1494
4
+ trilogy/engine.py,sha256=yOPnR7XCjWG82Gym_LLZBkYKKJdLCvqdCyt8zguNcnM,1103
5
+ trilogy/executor.py,sha256=SbReI_xWd081WZeRt_YAyVTdMOGg2XPrsaOKgMS7YUY,15969
6
+ trilogy/parser.py,sha256=UtuqSiGiCjpMAYgo1bvNq-b7NSzCA5hzbUW31RXaMII,281
7
+ trilogy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ trilogy/utility.py,sha256=eguES83XhmSOAQSBu5xq4aAXimiZFrxcUu81zDL22ug,707
9
+ trilogy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ trilogy/core/constants.py,sha256=7XaCpZn5mQmjTobbeBn56SzPWq9eMNDfzfsRU-fP0VE,171
11
+ trilogy/core/enums.py,sha256=iBrgUSGhGX865mV784KIU4qKmg6d7bZV71CgdZh20VI,6944
12
+ trilogy/core/env_processor.py,sha256=Pt4lmJfbShBbeSe5M7_FrTk5krrOziiAA__Slnettvc,2585
13
+ trilogy/core/environment_helpers.py,sha256=CSmQyEXE6EZ4XFYuQQITUHuWXxXGo9AL4UsTnu0404A,7159
14
+ trilogy/core/ergonomics.py,sha256=ASLDd0RqKWrZiG3XcKHo8nyTjaB_8xfE9t4NZ1UvGpc,1639
15
+ trilogy/core/exceptions.py,sha256=1c1lQCwSw4_5CQS3q7scOkXU8GQvullJXfPHubprl90,617
16
+ trilogy/core/functions.py,sha256=qpVLwTNU_qHQyIvNish5O2AlbpRMQQOqZWEUiSMnpqE,10721
17
+ trilogy/core/graph_models.py,sha256=mameUTiuCajtihDw_2-W218xyJlvTusOWrEKP1yAWgk,2003
18
+ trilogy/core/internal.py,sha256=-CykZknaWieFh5begaQJ4EgGP9qJccGg4XXdmBirxEc,1074
19
+ trilogy/core/models.py,sha256=UjuDuda6TWk_y5Pq3mx_BVfmLP3U6WH4EHhd88ddp4E,166378
20
+ trilogy/core/optimization.py,sha256=Jy3tVJNeqhpK6VSyTvgIWKCao6y-VCZ7mYA69MIF6L0,7989
21
+ trilogy/core/query_processor.py,sha256=eIRV7WEeEI-3OICEdXjJoQe2DhCimJfyFVW9CI6tU-Q,18845
22
+ trilogy/core/optimizations/__init__.py,sha256=EBanqTXEzf1ZEYjAneIWoIcxtMDite5-n2dQ5xcfUtg,356
23
+ trilogy/core/optimizations/base_optimization.py,sha256=P4kF-eCXkBxO-5c6tLHhMZ4ODRH1A04hb_6ovkaVyLw,505
24
+ trilogy/core/optimizations/inline_constant.py,sha256=c-YHOg6eAufL4EaCf4-0PbY_D4skBHW0ldR55_phsMA,1277
25
+ trilogy/core/optimizations/inline_datasource.py,sha256=LsngRKBy-LYcx1sfo1-rnDym_ly73YV9WkEngSjpFx8,3943
26
+ trilogy/core/optimizations/predicate_pushdown.py,sha256=XPWEBv8jXnc0OL2JDPNwFvJ5AtOE7dLzJK0LzdmdZMo,9252
27
+ trilogy/core/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ trilogy/core/processing/concept_strategies_v3.py,sha256=tODAJjYyIwR1RII_4GjZ8f0TP18GvOe49aF1x8MxXto,36985
29
+ trilogy/core/processing/graph_utils.py,sha256=stbYnDxnK-1kbo9L4XNU85FQhWCP-oZYO7LCXhAdC5M,1198
30
+ trilogy/core/processing/utility.py,sha256=kwv-eEnFxZTLbZvJxhVxK-IUPBa83VII3gqXmXMBzBM,18709
31
+ trilogy/core/processing/node_generators/__init__.py,sha256=s_YV1OYc336DuS9591259qjI_K_CtOCuhkf4t2aOgYs,733
32
+ trilogy/core/processing/node_generators/basic_node.py,sha256=VqVyb4wXI_B2OmfwtpsypimzcevoPe_pnstlKLU3S5s,2878
33
+ trilogy/core/processing/node_generators/common.py,sha256=kETikLR2fWbrKywPL0TXXj6YY4rpOA8PjsUSyx_mNyE,8907
34
+ trilogy/core/processing/node_generators/filter_node.py,sha256=Br10q3yHtQbA337dR8JwzQMCGqo_H0kjF1vprK7PPns,7610
35
+ trilogy/core/processing/node_generators/group_node.py,sha256=wlj8N4Nd1_8cpmccoe0BocM9jUEYsc-1WEMDCoh1WSw,4876
36
+ trilogy/core/processing/node_generators/group_to_node.py,sha256=RNvDo0x1TNFCDi97IAZ4taLMEe9Wv0XzNtuCCM9vjvw,2537
37
+ trilogy/core/processing/node_generators/multiselect_node.py,sha256=abS8mWWoTxRXYdjKTgRgdfeLiWcJjZ7qgESYwDv5e_o,6510
38
+ trilogy/core/processing/node_generators/node_merge_node.py,sha256=IYDS5DNF-5_dpgwre_n1Kh7RBnt4srzgYkaUahe_K_o,14001
39
+ trilogy/core/processing/node_generators/rowset_node.py,sha256=C5aPc-KIcedTepv9HyG5kth2fUkMwLs_uQy5YEgZsVo,4584
40
+ trilogy/core/processing/node_generators/select_merge_node.py,sha256=JFoBKETwhmd2KdmoNq4wT2SOrd3Jh-GGcO5qMiUh8JE,12691
41
+ trilogy/core/processing/node_generators/select_node.py,sha256=bjTylBa-vYbmzpuSpphmIo_Oi78YZpI8ppHnN9KDYDk,1795
42
+ trilogy/core/processing/node_generators/union_node.py,sha256=MVmLqOZbCEVqZYVZxxWxtDMvyEdSnAg7pU9NzoOXy1I,2517
43
+ trilogy/core/processing/node_generators/unnest_node.py,sha256=MNNjWW7Dp3A_Xv_XGjzdHU1PHQBauZHMBVKRJhqRZJY,2255
44
+ trilogy/core/processing/node_generators/window_node.py,sha256=x4n5NWEouMsOS0V9myyJNmEg2e3kUDPLWXQhq3PyUdY,3510
45
+ trilogy/core/processing/nodes/__init__.py,sha256=WNUmYmZF3uqF2qiJ1L7y0u9qiVD9YnluKds0wA5opJE,4813
46
+ trilogy/core/processing/nodes/base_node.py,sha256=A7Kx_2KlEjE3jcsvvFcwMmvCJiIRFS7jDjePTCpNU9E,15573
47
+ trilogy/core/processing/nodes/filter_node.py,sha256=metDcI7b2QsONOy5l0Mx7by1OhXac0N8yKUDoL_2WWo,2342
48
+ trilogy/core/processing/nodes/group_node.py,sha256=j6uiHmAA01ByhZmeJQrAm4ophdvo517b-OibEZSQFLg,7249
49
+ trilogy/core/processing/nodes/merge_node.py,sha256=Nc0nV56C-1DzanTg54llvlkuHyK05A17XMa2ut0OeK0,14921
50
+ trilogy/core/processing/nodes/select_node_v2.py,sha256=Hk_fQnI8NzpDSaPDNu_C-2QWktf3ZORhzbx0TeOK5Q8,8144
51
+ trilogy/core/processing/nodes/union_node.py,sha256=WHycDepNr16flkgQdwyZRo1g-kzYKWVUb6CZ7N_U4OA,1402
52
+ trilogy/core/processing/nodes/unnest_node.py,sha256=aR1XKa-bT7f45QYKUOS0EUuc0t4GbvYAEG8ZYFJ67sI,2151
53
+ trilogy/core/processing/nodes/window_node.py,sha256=kXHhOZ9CZ8AQvUbJXCIxUPQ-NF3ooZT7VBgNUyM3VM8,1213
54
+ trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ trilogy/dialect/base.py,sha256=KZwtnni34pfghrBH2nBfa8ZDf-BH_cEuQKxBB3JvZWo,38003
56
+ trilogy/dialect/bigquery.py,sha256=mKC3zoEU232h9RtIXJjqiZ72lWH8a6S28p6wAZKrAfg,2952
57
+ trilogy/dialect/common.py,sha256=b0E6JqdKaaSzThLiFa9jwUg4YnXahf-3bqmzOn5z-6E,3827
58
+ trilogy/dialect/config.py,sha256=UiBY2tBbNk9owx-zxP_3lN9lErEUXhXIU_bcXA18AvU,2992
59
+ trilogy/dialect/duckdb.py,sha256=qh5XMgtl9LBUZ8DJ65GLui_nk0Iq9n11bbA6Ek9sum0,3419
60
+ trilogy/dialect/enums.py,sha256=iaghGgOl6zRr4RxRn4TxRnxZU9iSYJG6hN5wqYiBRNQ,3948
61
+ trilogy/dialect/postgres.py,sha256=VH4EB4myjIeZTHeFU6vK00GxY9c53rCBjg2mLbdaCEE,3254
62
+ trilogy/dialect/presto.py,sha256=y2BMOXvpKh1_cXnpGhG0sjhGP-pNVLkf760Hz_pNw_s,3386
63
+ trilogy/dialect/snowflake.py,sha256=wmao9p26jX5yIX5SC8sRAZTXkPGTvq6ixO693QTfhz8,2989
64
+ trilogy/dialect/sql_server.py,sha256=7iFpo2xztQ4ZJVwJ5n8kntWreymRzz035iClGZp3Nyc,3117
65
+ trilogy/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ trilogy/hooks/base_hook.py,sha256=gD6_sjzTzchpLIn3CvJzkM9IvaWNfQUra3yDh9-s8qQ,1125
67
+ trilogy/hooks/graph_hook.py,sha256=wljLY-Ac22vgn7PlsVlRy9HswrapRvVzHrFMlD8qhOY,2468
68
+ trilogy/hooks/query_debugger.py,sha256=FoDh2bu2NiwLusVhKa5El_l8EKaqfET7zn55GP0TkOE,4644
69
+ trilogy/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ trilogy/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ trilogy/parsing/common.py,sha256=haPZbJrola5Fvwp940A-MJ1o-EhGXKsRFa-Y2e7OsjU,10370
72
+ trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
73
+ trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
74
+ trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
75
+ trilogy/parsing/parse_engine.py,sha256=M2CAqqA-JlR6TK17jkPlcOmy4YhPVlH8YByVTDP3cCI,67122
76
+ trilogy/parsing/render.py,sha256=Dr0QKIaAUi9uxfZZJVNV-todKoTA-tsWXNXPJ4Ohjn0,15650
77
+ trilogy/parsing/trilogy.lark,sha256=d_d3H8ExBcrVffPLq1TgTcEyWDppPJO2zB6cC6mdq9I,12489
78
+ trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ trilogy/scripts/trilogy.py,sha256=DQDW81E5mDMWFP8oPw8q-IyrR2JGxQSDWgUWe2VTSRQ,3731
80
+ pytrilogy-0.0.2.48.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
81
+ pytrilogy-0.0.2.48.dist-info/METADATA,sha256=Rcj4LfUCQoMs2K3dtgpBeFRpNOonJ9A0Q7kstGsMKnk,8426
82
+ pytrilogy-0.0.2.48.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
83
+ pytrilogy-0.0.2.48.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
84
+ pytrilogy-0.0.2.48.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
85
+ pytrilogy-0.0.2.48.dist-info/RECORD,,
trilogy/__init__.py CHANGED
@@ -1,9 +1,9 @@
1
+ from trilogy.constants import CONFIG
1
2
  from trilogy.core.models import Environment
2
3
  from trilogy.dialect.enums import Dialects
3
4
  from trilogy.executor import Executor
4
5
  from trilogy.parser import parse
5
- from trilogy.constants import CONFIG
6
6
 
7
- __version__ = "0.0.2.46"
7
+ __version__ = "0.0.2.48"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
trilogy/constants.py CHANGED
@@ -1,7 +1,7 @@
1
- from logging import getLogger
1
+ import random
2
2
  from dataclasses import dataclass, field
3
3
  from enum import Enum
4
- import random
4
+ from logging import getLogger
5
5
 
6
6
  logger = getLogger("trilogy")
7
7
 
@@ -44,6 +44,7 @@ class Rendering:
44
44
  """Control how the SQL is rendered"""
45
45
 
46
46
  parameters: bool = True
47
+ concise: bool = False
47
48
 
48
49
 
49
50
  # TODO: support loading from environments
@@ -56,6 +57,7 @@ class Config:
56
57
  comments: Comments = field(default_factory=Comments)
57
58
  optimizations: Optimizations = field(default_factory=Optimizations)
58
59
  rendering: Rendering = field(default_factory=Rendering)
60
+ select_as_definition: bool = True
59
61
 
60
62
  @property
61
63
  def show_comments(self) -> bool:
trilogy/core/enums.py CHANGED
@@ -29,6 +29,7 @@ class Purpose(Enum):
29
29
  METRIC = "metric"
30
30
  ROWSET = "rowset"
31
31
  AUTO = "auto"
32
+ UNKNOWN = "unknown"
32
33
 
33
34
  @classmethod
34
35
  def _missing_(cls, value):
@@ -44,6 +45,7 @@ class PurposeLineage(Enum):
44
45
  FILTER = "filter"
45
46
  CONSTANT = "constant"
46
47
  UNNEST = "unnest"
48
+ UNION = "union"
47
49
  ROOT = "root"
48
50
  ROWSET = "rowset"
49
51
  MULTISELECT = "multiselect"
@@ -113,6 +115,9 @@ class FunctionType(Enum):
113
115
 
114
116
  # structural
115
117
  UNNEST = "unnest"
118
+
119
+ UNION = "union"
120
+
116
121
  ALIAS = "alias"
117
122
 
118
123
  # Generic
@@ -133,6 +138,7 @@ class FunctionType(Enum):
133
138
 
134
139
  # TEXT AND MAYBE MORE
135
140
  SPLIT = "split"
141
+ LENGTH = "len"
136
142
 
137
143
  # Math
138
144
  DIVIDE = "divide"
@@ -154,7 +160,6 @@ class FunctionType(Enum):
154
160
  MAX = "max"
155
161
  MIN = "min"
156
162
  AVG = "avg"
157
- LENGTH = "len"
158
163
 
159
164
  # String
160
165
  LIKE = "like"
@@ -299,6 +304,7 @@ class SourceType(Enum):
299
304
  ROWSET = "rowset"
300
305
  MERGE = "merge"
301
306
  BASIC = "basic"
307
+ UNION = "union"
302
308
 
303
309
 
304
310
  class ShowCategory(Enum):
@@ -3,7 +3,7 @@ from trilogy.core.graph_models import (
3
3
  concept_to_node,
4
4
  datasource_to_node,
5
5
  )
6
- from trilogy.core.models import Environment, Concept, Datasource
6
+ from trilogy.core.models import Concept, Datasource, Environment
7
7
 
8
8
 
9
9
  def add_concept(
@@ -68,7 +68,6 @@ def generate_adhoc_graph(
68
68
  def generate_graph(
69
69
  environment: Environment,
70
70
  ) -> ReferenceGraph:
71
-
72
71
  return generate_adhoc_graph(
73
72
  list(environment.concepts.values())
74
73
  + list(environment.alias_origin_lookup.values()),
@@ -1,15 +1,15 @@
1
+ from trilogy.constants import DEFAULT_NAMESPACE
2
+ from trilogy.core.enums import ConceptSource, FunctionType, Purpose
3
+ from trilogy.core.functions import AttrAccess
1
4
  from trilogy.core.models import (
2
- DataType,
3
5
  Concept,
6
+ DataType,
4
7
  Environment,
5
8
  Function,
6
9
  Metadata,
7
10
  StructType,
8
11
  )
9
- from trilogy.core.functions import AttrAccess
10
- from trilogy.core.enums import Purpose, FunctionType, ConceptSource
11
- from trilogy.constants import DEFAULT_NAMESPACE
12
- from trilogy.parsing.common import process_function_args, arg_to_datatype, Meta
12
+ from trilogy.parsing.common import Meta, arg_to_datatype, process_function_args
13
13
 
14
14
 
15
15
  def generate_date_concepts(concept: Concept, environment: Environment):
trilogy/core/functions.py CHANGED
@@ -1,20 +1,21 @@
1
+ from typing import Optional
2
+
3
+ from trilogy.constants import MagicConstants
4
+ from trilogy.core.enums import DatePart, FunctionType, Granularity, Purpose
5
+ from trilogy.core.exceptions import InvalidSyntaxException
1
6
  from trilogy.core.models import (
2
- Function,
3
- Concept,
4
7
  AggregateWrapper,
5
- Parenthetical,
6
- arg_to_datatype,
7
- WindowItem,
8
+ Concept,
8
9
  DataType,
10
+ Function,
9
11
  ListType,
10
- StructType,
11
12
  MapType,
12
13
  NumericType,
14
+ Parenthetical,
15
+ StructType,
16
+ WindowItem,
17
+ arg_to_datatype,
13
18
  )
14
- from trilogy.core.enums import FunctionType, Purpose, Granularity, DatePart
15
- from trilogy.core.exceptions import InvalidSyntaxException
16
- from trilogy.constants import MagicConstants
17
- from typing import Optional
18
19
 
19
20
 
20
21
  def create_function_derived_concept(
trilogy/core/internal.py CHANGED
@@ -1,7 +1,6 @@
1
- from trilogy.core.models import Concept, DataType, Function
2
- from trilogy.core.enums import Purpose, FunctionType
3
1
  from trilogy.core.constants import ALL_ROWS_CONCEPT, INTERNAL_NAMESPACE
4
-
2
+ from trilogy.core.enums import FunctionType, Purpose
3
+ from trilogy.core.models import Concept, DataType, Function
5
4
 
6
5
  DEFAULT_CONCEPTS = {
7
6
  ALL_ROWS_CONCEPT: Concept(