pylegend 0.12.0__py3-none-any.whl → 0.14.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 (30) hide show
  1. pylegend/core/database/sql_to_string/db_extension.py +177 -1
  2. pylegend/core/language/pandas_api/pandas_api_groupby_series.py +357 -0
  3. pylegend/core/language/pandas_api/pandas_api_series.py +202 -8
  4. pylegend/core/language/shared/expression.py +5 -0
  5. pylegend/core/language/shared/literal_expressions.py +22 -1
  6. pylegend/core/language/shared/operations/boolean_operation_expressions.py +144 -0
  7. pylegend/core/language/shared/operations/date_operation_expressions.py +91 -0
  8. pylegend/core/language/shared/operations/integer_operation_expressions.py +183 -1
  9. pylegend/core/language/shared/operations/string_operation_expressions.py +31 -1
  10. pylegend/core/language/shared/primitives/boolean.py +40 -0
  11. pylegend/core/language/shared/primitives/date.py +39 -0
  12. pylegend/core/language/shared/primitives/datetime.py +18 -0
  13. pylegend/core/language/shared/primitives/integer.py +54 -1
  14. pylegend/core/language/shared/primitives/strictdate.py +25 -1
  15. pylegend/core/language/shared/primitives/string.py +16 -2
  16. pylegend/core/sql/metamodel.py +50 -1
  17. pylegend/core/sql/metamodel_extension.py +77 -1
  18. pylegend/core/tds/pandas_api/frames/functions/aggregate_function.py +21 -11
  19. pylegend/core/tds/pandas_api/frames/functions/iloc.py +99 -0
  20. pylegend/core/tds/pandas_api/frames/functions/loc.py +136 -0
  21. pylegend/core/tds/pandas_api/frames/pandas_api_applied_function_tds_frame.py +3 -0
  22. pylegend/core/tds/pandas_api/frames/pandas_api_base_tds_frame.py +50 -2
  23. pylegend/core/tds/pandas_api/frames/pandas_api_groupby_tds_frame.py +87 -27
  24. pylegend/core/tds/pandas_api/frames/pandas_api_tds_frame.py +12 -0
  25. {pylegend-0.12.0.dist-info → pylegend-0.14.0.dist-info}/METADATA +1 -1
  26. {pylegend-0.12.0.dist-info → pylegend-0.14.0.dist-info}/RECORD +30 -27
  27. {pylegend-0.12.0.dist-info → pylegend-0.14.0.dist-info}/WHEEL +1 -1
  28. {pylegend-0.12.0.dist-info → pylegend-0.14.0.dist-info}/licenses/LICENSE +0 -0
  29. {pylegend-0.12.0.dist-info → pylegend-0.14.0.dist-info}/licenses/LICENSE.spdx +0 -0
  30. {pylegend-0.12.0.dist-info → pylegend-0.14.0.dist-info}/licenses/NOTICE +0 -0
@@ -11,21 +11,24 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
-
14
+ from typing import overload
15
15
 
16
16
  from pylegend._typing import (
17
17
  PyLegendOptional,
18
18
  PyLegendUnion,
19
19
  PyLegendList,
20
20
  PyLegendDict,
21
+ PyLegendSet,
21
22
  TYPE_CHECKING,
22
23
  )
23
24
  from pylegend.core.language.pandas_api.pandas_api_aggregate_specification import PyLegendAggInput
24
25
  from pylegend.core.language.shared.primitives.primitive import PyLegendPrimitiveOrPythonPrimitive
25
26
  from pylegend.core.tds.pandas_api.frames.pandas_api_base_tds_frame import PandasApiBaseTdsFrame
27
+ from pylegend.core.tds.tds_column import TdsColumn
26
28
 
27
29
  if TYPE_CHECKING:
28
30
  from pylegend.core.tds.pandas_api.frames.pandas_api_tds_frame import PandasApiTdsFrame
31
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import GroupbySeries
29
32
 
30
33
 
31
34
  class PandasApiGroupbyTdsFrame:
@@ -38,8 +41,8 @@ class PandasApiGroupbyTdsFrame:
38
41
  __observed: bool
39
42
  __dropna: bool
40
43
 
41
- __grouping_column_name_list: PyLegendList[str]
42
- __selected_columns: PyLegendOptional[PyLegendList[str]]
44
+ __grouping_columns: PyLegendList[TdsColumn]
45
+ __selected_columns: PyLegendOptional[PyLegendList[TdsColumn]]
43
46
 
44
47
  @classmethod
45
48
  def name(cls) -> str:
@@ -101,39 +104,65 @@ class PandasApiGroupbyTdsFrame:
101
104
  f"but got: {self.__dropna} (type: {type(self.__dropna).__name__})"
102
105
  )
103
106
 
104
- input_cols: PyLegendList[str] = []
107
+ input_cols: PyLegendSet[str]
105
108
  if isinstance(self.__by, str):
106
- input_cols = [self.__by]
109
+ input_cols = set([self.__by])
107
110
  elif isinstance(self.__by, list):
108
- input_cols = self.__by
111
+ input_cols = set(self.__by)
109
112
  else:
110
113
  raise TypeError(
111
114
  f"The 'by' parameter in groupby function must be a string or a list of strings."
112
115
  f"but got: {self.__by} (type: {type(self.__by).__name__})"
113
- )
116
+ ) # pragma: no cover
117
+ group_by_names: PyLegendList[str]
118
+ if isinstance(self.__by, str):
119
+ group_by_names = [self.__by]
120
+ elif isinstance(self.__by, list):
121
+ group_by_names = self.__by
122
+ else:
123
+ raise TypeError(
124
+ f"The 'by' parameter in groupby function must be a string or a list of strings."
125
+ f"but got: {self.__by} (type: {type(self.__by).__name__})"
126
+ ) # pragma: no cover
114
127
 
115
- if len(input_cols) == 0:
128
+ if len(group_by_names) == 0:
116
129
  raise ValueError("The 'by' parameter in groupby function must contain at least one column name.")
117
130
 
118
- available_columns = {c.get_name() for c in self.__base_frame.columns()}
119
- missing_cols = [col for col in input_cols if col not in available_columns]
131
+ base_col_map = {col.get_name(): col for col in self.__base_frame.columns()}
132
+
133
+ self.__grouping_columns = [
134
+ base_col_map[name]
135
+ for name in group_by_names
136
+ if name in base_col_map
137
+ ]
120
138
 
121
- if len(missing_cols) > 0:
139
+ if len(self.__grouping_columns) < len(input_cols):
140
+ available_columns = {c.get_name() for c in self.__base_frame.columns()}
141
+ missing_cols = [col for col in input_cols if col not in available_columns]
122
142
  raise KeyError(
123
143
  f"Column(s) {missing_cols} in groupby function's provided columns list "
124
144
  f"do not exist in the current frame. "
125
145
  f"Current frame columns: {sorted(available_columns)}"
126
146
  )
127
147
 
128
- self.__grouping_column_name_list = input_cols.copy()
148
+ @overload
149
+ def __getitem__(self, key: str) -> "GroupbySeries":
150
+ ...
151
+
152
+ @overload
153
+ def __getitem__(self, key: PyLegendList[str]) -> "PandasApiGroupbyTdsFrame":
154
+ ...
129
155
 
130
- def __getitem__(self, item: PyLegendUnion[str, PyLegendList[str]]) -> "PandasApiGroupbyTdsFrame":
131
- columns_to_select: PyLegendList[str] = []
156
+ def __getitem__(
157
+ self,
158
+ item: PyLegendUnion[str, PyLegendList[str]]
159
+ ) -> PyLegendUnion["PandasApiGroupbyTdsFrame", "GroupbySeries"]:
160
+ columns_to_select: PyLegendSet[str]
132
161
 
133
162
  if isinstance(item, str):
134
- columns_to_select = [item]
163
+ columns_to_select = set([item])
135
164
  elif isinstance(item, list):
136
- columns_to_select = item
165
+ columns_to_select = set(item)
137
166
  else:
138
167
  raise TypeError(
139
168
  f"Column selection after groupby function must be a string or a list of strings, "
@@ -143,10 +172,12 @@ class PandasApiGroupbyTdsFrame:
143
172
  if len(columns_to_select) == 0:
144
173
  raise ValueError("When performing column selection after groupby, at least one column must be selected.")
145
174
 
146
- available_columns = {c.get_name() for c in self.__base_frame.columns()}
147
- missing_cols = [col for col in columns_to_select if col not in available_columns]
175
+ selected_columns: PyLegendList[TdsColumn] = [
176
+ col for col in self.__base_frame.columns() if col.get_name() in columns_to_select]
148
177
 
149
- if len(missing_cols) > 0:
178
+ if len(selected_columns) < len(columns_to_select):
179
+ available_columns = {c.get_name() for c in self.__base_frame.columns()}
180
+ missing_cols = [col for col in columns_to_select if col not in available_columns]
150
181
  raise KeyError(
151
182
  f"Column(s) {missing_cols} selected after groupby do not exist in the current frame. "
152
183
  f"Current frame columns: {sorted(available_columns)}"
@@ -163,16 +194,47 @@ class PandasApiGroupbyTdsFrame:
163
194
  dropna=self.__dropna,
164
195
  )
165
196
 
166
- new_frame.__selected_columns = columns_to_select.copy()
197
+ new_frame.__selected_columns = selected_columns
198
+
199
+ if selected_columns is not None and isinstance(item, str):
200
+ column: TdsColumn = selected_columns[0]
201
+ col_type = column.get_type()
202
+ if col_type == "Boolean": # pragma: no cover (Boolean column not supported in PURE)
203
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import BooleanGroupbySeries
204
+ return BooleanGroupbySeries(new_frame)
205
+ elif col_type == "String":
206
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import StringGroupbySeries
207
+ return StringGroupbySeries(new_frame)
208
+ elif col_type == "Number":
209
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import NumberGroupbySeries
210
+ return NumberGroupbySeries(new_frame)
211
+ elif col_type == "Integer":
212
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import IntegerGroupbySeries
213
+ return IntegerGroupbySeries(new_frame)
214
+ elif col_type == "Float":
215
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import FloatGroupbySeries
216
+ return FloatGroupbySeries(new_frame)
217
+ elif col_type == "Date":
218
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import DateGroupbySeries
219
+ return DateGroupbySeries(new_frame)
220
+ elif col_type == "DateTime":
221
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import DateTimeGroupbySeries
222
+ return DateTimeGroupbySeries(new_frame)
223
+ elif col_type == "StrictDate":
224
+ from pylegend.core.language.pandas_api.pandas_api_groupby_series import StrictDateGroupbySeries
225
+ return StrictDateGroupbySeries(new_frame)
226
+ else:
227
+ raise ValueError(f"Unsupported column type '{col_type}' for column '{column.get_name()}'") # pragma: no cover
228
+
167
229
  return new_frame
168
230
 
169
231
  def base_frame(self) -> PandasApiBaseTdsFrame:
170
232
  return self.__base_frame
171
233
 
172
- def grouping_column_name_list(self) -> PyLegendList[str]:
173
- return self.__grouping_column_name_list.copy()
234
+ def get_grouping_columns(self) -> PyLegendList[TdsColumn]:
235
+ return self.__grouping_columns.copy()
174
236
 
175
- def selected_columns(self) -> PyLegendOptional[PyLegendList[str]]:
237
+ def get_selected_columns(self) -> PyLegendOptional[PyLegendList[TdsColumn]]:
176
238
  if self.__selected_columns is None:
177
239
  return None
178
240
  return self.__selected_columns.copy()
@@ -197,7 +259,7 @@ class PandasApiGroupbyTdsFrame:
197
259
  aggregated_result = PandasApiAppliedFunctionTdsFrame(
198
260
  SortValuesFunction(
199
261
  base_frame=aggregated_result,
200
- by=self.grouping_column_name_list(),
262
+ by=[col.get_name() for col in self.get_grouping_columns()],
201
263
  axis=0,
202
264
  ascending=True,
203
265
  inplace=False,
@@ -217,10 +279,8 @@ class PandasApiGroupbyTdsFrame:
217
279
  *args: PyLegendPrimitiveOrPythonPrimitive,
218
280
  **kwargs: PyLegendPrimitiveOrPythonPrimitive,
219
281
  ) -> "PandasApiTdsFrame":
220
- from pylegend.core.tds.pandas_api.frames.pandas_api_applied_function_tds_frame import PandasApiAppliedFunctionTdsFrame
221
- from pylegend.core.tds.pandas_api.frames.functions.aggregate_function import AggregateFunction
222
282
 
223
- return PandasApiAppliedFunctionTdsFrame(AggregateFunction(self, func, axis, *args, **kwargs))
283
+ return self.aggregate(func, axis, *args, **kwargs)
224
284
 
225
285
  def sum(
226
286
  self,
@@ -47,6 +47,8 @@ from pylegend.core.tds.tds_frame import PyLegendTdsFrame
47
47
  if TYPE_CHECKING:
48
48
  from pylegend.core.language.pandas_api.pandas_api_series import Series
49
49
  from pylegend.core.tds.pandas_api.frames.pandas_api_groupby_tds_frame import PandasApiGroupbyTdsFrame
50
+ from pylegend.core.tds.pandas_api.frames.functions.iloc import PandasApiIlocIndexer
51
+ from pylegend.core.tds.pandas_api.frames.functions.loc import PandasApiLocIndexer
50
52
 
51
53
  __all__: PyLegendSequence[str] = [
52
54
  "PandasApiTdsFrame"
@@ -301,6 +303,16 @@ class PandasApiTdsFrame(PyLegendTdsFrame):
301
303
  ) -> "PandasApiTdsFrame":
302
304
  pass # pragma: no cover
303
305
 
306
+ @property
307
+ @abstractmethod
308
+ def iloc(self) -> "PandasApiIlocIndexer":
309
+ pass # pragma: no cover
310
+
311
+ @property
312
+ @abstractmethod
313
+ def loc(self) -> "PandasApiLocIndexer":
314
+ pass # pragma: no cover
315
+
304
316
  @abstractmethod
305
317
  def head(self, n: int = 5) -> "PandasApiTdsFrame":
306
318
  pass # pragma: no cover
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pylegend
3
- Version: 0.12.0
3
+ Version: 0.14.0
4
4
  Summary: Python language binding for Legend data management platform
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -4,7 +4,7 @@ pylegend/core/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
4
4
  pylegend/core/database/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
5
5
  pylegend/core/database/sql_to_string/__init__.py,sha256=_qWOoReR9ygprnShQRBtp4wFmqtiPEa88jAhOZpYY2c,1028
6
6
  pylegend/core/database/sql_to_string/config.py,sha256=xrwPFcuZyzZcKNGeOQTnFW2y7CqhT6laSAazVl93JLU,1384
7
- pylegend/core/database/sql_to_string/db_extension.py,sha256=o-hwigD4SCqibcJ0roVfwDPDavyr8IqVNBrvxjg-zLo,55897
7
+ pylegend/core/database/sql_to_string/db_extension.py,sha256=Mt1uCgub9ChjF2k151Ybthr_KO0VoyrqULYPAlkpZA0,62530
8
8
  pylegend/core/database/sql_to_string/generator.py,sha256=xk3siXWyR7_ahn6pwsUMi80V_7NV2tYa7x5dosiNJR4,2607
9
9
  pylegend/core/language/__init__.py,sha256=sw70dEA5RT660Qmpjxdi1XKEWDwshuedomqHhyIJpvI,4331
10
10
  pylegend/core/language/legacy_api/__init__.py,sha256=g6w4WCuQ2pqQG6yyn-QLLXED3ttOOB8YnXzVt3ijb28,578
@@ -16,39 +16,40 @@ pylegend/core/language/legendql_api/legendql_api_tds_row.py,sha256=5hejBF2uYjXua
16
16
  pylegend/core/language/pandas_api/__init__.py,sha256=g6w4WCuQ2pqQG6yyn-QLLXED3ttOOB8YnXzVt3ijb28,578
17
17
  pylegend/core/language/pandas_api/pandas_api_aggregate_specification.py,sha256=T_RaPB9y_7kcnMC_CIEDJhxORID1plR99IGGPZvDnBk,1474
18
18
  pylegend/core/language/pandas_api/pandas_api_custom_expressions.py,sha256=xOXp0NdyNW6j_R_1sCy1JcdN9EWIqYRXngocsINpllE,2590
19
- pylegend/core/language/pandas_api/pandas_api_series.py,sha256=WJ--FaWeODIvS26RErugschR_CmypjzVu6H64sfwokQ,7359
19
+ pylegend/core/language/pandas_api/pandas_api_groupby_series.py,sha256=MU6o_e2NIwo2OZHcXS8zuxZa14QG5SygXjnhHRy8H-4,16200
20
+ pylegend/core/language/pandas_api/pandas_api_series.py,sha256=Jock_ZYikBBCr-bVHpYEcoKV7bg0hdzQV4KJU99Z0O4,16452
20
21
  pylegend/core/language/pandas_api/pandas_api_tds_row.py,sha256=L0O5BLok3KqmzUgXFfM2fQgrpAxCfQ74bOplnetjyvw,2516
21
22
  pylegend/core/language/shared/__init__.py,sha256=g6w4WCuQ2pqQG6yyn-QLLXED3ttOOB8YnXzVt3ijb28,578
22
23
  pylegend/core/language/shared/column_expressions.py,sha256=qWHVvwPGwKroQX94a_ovUrxCPnosVMX3tBWlTj7uJ6k,4333
23
- pylegend/core/language/shared/expression.py,sha256=-XDJ3JfkyQ2FunACUEGI4CeTgqCvBexp55_YCaZUD1k,2446
24
+ pylegend/core/language/shared/expression.py,sha256=SvLI6GxzvjSpy21NIB4ZyPLKGIR7y9CN5lV-I5zGklw,2567
24
25
  pylegend/core/language/shared/functions.py,sha256=HT1Qp5pLV3a24aItXqBnGfKT54f6Uw_pu5oGSzWTGL4,1749
25
26
  pylegend/core/language/shared/helpers.py,sha256=E7IKZwb__qj4_JpoBT2cra_umvfKP58c5U5bygMqh_o,2379
26
- pylegend/core/language/shared/literal_expressions.py,sha256=YfLdbhkN5RZm_NRaseWngoZ7iSEbe42FuF2criZVYD8,6295
27
+ pylegend/core/language/shared/literal_expressions.py,sha256=DqbHBOTMYD0PDXdZzuAOVXNfeMnqaEWFEHvgeDzZsF8,6877
27
28
  pylegend/core/language/shared/operations/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
28
29
  pylegend/core/language/shared/operations/binary_expression.py,sha256=I3CIWwbKlKq1R8ekUXY8QKyHro8b7fIgeM8hTPwN5jA,4006
29
- pylegend/core/language/shared/operations/boolean_operation_expressions.py,sha256=6NYAilcC6QEn4J_mWTZdDCJhbPMam36Xl6Ai9N1kJsQ,4630
30
+ pylegend/core/language/shared/operations/boolean_operation_expressions.py,sha256=jOs_b-Clt4Jij9Z-Xt1YLQ-xaDmZGosfRRzSiRvtgJk,10309
30
31
  pylegend/core/language/shared/operations/collection_operation_expressions.py,sha256=PuyICSjPadQNWkp8aZnCZblRnG_uh7lPEXMDN9nwKRI,22412
31
- pylegend/core/language/shared/operations/date_operation_expressions.py,sha256=NFgOjS2GyviFIq2eR7wT1niO2NIGr8FeeYNIhmDjig0,27905
32
+ pylegend/core/language/shared/operations/date_operation_expressions.py,sha256=CiWBJIyyMu-u7c3Ho-wOCjcqzpm5hvyYthS7F8udsg8,31507
32
33
  pylegend/core/language/shared/operations/float_operation_expressions.py,sha256=GsKflYlswzfvb2eEqObRgcoO218zdNj3atS-5g8YzJI,6849
33
- pylegend/core/language/shared/operations/integer_operation_expressions.py,sha256=eWayMDrYjmoD1RbMjTf2WRWV2m2ZefpqNKYoFLl1cmQ,9524
34
+ pylegend/core/language/shared/operations/integer_operation_expressions.py,sha256=VsI5pQEya_XWmAvmRvmr97HJB_R2XZSJS6qypE-NBEI,16817
34
35
  pylegend/core/language/shared/operations/nary_expression.py,sha256=GXqsmpR_Jb_SothvIXWeQ6lJp03SKwEA2zqL-JomlNc,3663
35
36
  pylegend/core/language/shared/operations/nullary_expression.py,sha256=dMq3hi7_t0TFboOoQQHjuNZ7D9hLYfc_NozNaUCJTtI,2242
36
37
  pylegend/core/language/shared/operations/number_operation_expressions.py,sha256=EK0_T0_AY2bBK-A4yXoHmDsXTnshVP6lz_JLPl4w7Ds,39376
37
38
  pylegend/core/language/shared/operations/primitive_operation_expressions.py,sha256=BdnxYxD0qnBzKppA9GJC1V9FDhGjyh1uuauRX8UObx0,6365
38
- pylegend/core/language/shared/operations/string_operation_expressions.py,sha256=BId4aquXndVmEDxJ_jwApGX07KPRkB_VIKPNjRyVBy4,44427
39
+ pylegend/core/language/shared/operations/string_operation_expressions.py,sha256=-HNYQTdA8L9D3-FXztqGsvK3JQ2konMwkGyvFyRjpcE,45507
39
40
  pylegend/core/language/shared/operations/unary_expression.py,sha256=1VWE43rN4x4NLc6aL3xRzleK9c_UfrLawlyYgX3SG48,3132
40
41
  pylegend/core/language/shared/pct_helpers.py,sha256=tQo0BkaPro8Tqc3Tt2hmMrQOLsf4Ra0ENgDRQOhZe1I,1998
41
42
  pylegend/core/language/shared/primitive_collection.py,sha256=ShUtgdZkZ8cKdQJLP5iU_zYDK7piMzWlimvjhnyfnGk,13098
42
43
  pylegend/core/language/shared/primitives/__init__.py,sha256=9p7VVRhzeRQwTkxXQBBZuJY6P9V-yX0Q_elviaYIgPg,1649
43
- pylegend/core/language/shared/primitives/boolean.py,sha256=x0JgS8E9AXv0fkExuCCyD9Paim2xwfU9cn-1Jh3bqtI,4058
44
- pylegend/core/language/shared/primitives/date.py,sha256=CFiz6LquJIUHBIdHGZ5j16wYcw-Bo4nYHeM7Hne1EWI,9062
45
- pylegend/core/language/shared/primitives/datetime.py,sha256=F8m-pLm_VcefI-_iF8CCjbi-AZKzrXxqyuXZtxJB_AU,2495
44
+ pylegend/core/language/shared/primitives/boolean.py,sha256=94HG7VxSBOD20xYyLZT314c8s7yuMwmERIf2CxokBr0,6127
45
+ pylegend/core/language/shared/primitives/date.py,sha256=_qYAqIiTGv6Pr-Xcd2JznKUQ0lRGvicAHuylgmhrCck,11249
46
+ pylegend/core/language/shared/primitives/datetime.py,sha256=HnmsRM1kgwVHtiqiPWIV9ecyo_7m7l9Ps8GKvZqBf1A,3464
46
47
  pylegend/core/language/shared/primitives/float.py,sha256=LpD3nWogv8aT6RECgI7rVmsRPY4ji96JCXdTEAr2EAg,6146
47
- pylegend/core/language/shared/primitives/integer.py,sha256=SFG0oDfk9Uewk2Ek9rfbqkubJM6646_qpSfe3L6Jr0M,7651
48
+ pylegend/core/language/shared/primitives/integer.py,sha256=OxLTeJhlkwWY7KQN8ofpkUEP-9XZtKmmAmwIxhz7Mqo,10631
48
49
  pylegend/core/language/shared/primitives/number.py,sha256=aktoWf4sgc8evO8f9cUYbPVPjHeppKzJ_Jw_wIUakUE,14816
49
50
  pylegend/core/language/shared/primitives/primitive.py,sha256=ARWpw7AXxg55ni7yGRYCO6JKxzgJnME_ZZcKyD-J5qo,4815
50
- pylegend/core/language/shared/primitives/strictdate.py,sha256=FidyUqdWTaOrk6tomYHQvhfnGW--zVTt9ldIgGxJk5M,2503
51
- pylegend/core/language/shared/primitives/string.py,sha256=03iZG_YvlUYAdM0Njg5lugp_k3v5NhnqkVi8RBKzJVk,16197
51
+ pylegend/core/language/shared/primitives/strictdate.py,sha256=AXcH9fuWYVe4YO2KCnn2heUTaQ4y6pUM4ulGGLbTpow,3789
52
+ pylegend/core/language/shared/primitives/string.py,sha256=bc0NYsd0oRMfA8w-2PSCO1ATiiIo2yV_hxv7-yOBtGs,16803
52
53
  pylegend/core/language/shared/tds_row.py,sha256=23sxVfa74T-TlfAs1CgvwjhV26b-FyZ72yGy9BqP7CE,9027
53
54
  pylegend/core/project_cooridnates.py,sha256=t1G6gJzcRQRbCjGpCOk0vBiqd0F8Y_e15Nu4NuzYd6I,3751
54
55
  pylegend/core/request/__init__.py,sha256=6jQTL8B8Sd1rsCXHr4dZ398OrvROoGI6Y_aAI_FOfiI,1082
@@ -57,8 +58,8 @@ pylegend/core/request/legend_client.py,sha256=PLCCiazvFG2ujcHN-vGDQxpEl5QvFHBNNc
57
58
  pylegend/core/request/response_reader.py,sha256=TNMi2GKk4lkmf7VMeY5n2AwhxxuWbX4M8pgC2_pXFbE,1691
58
59
  pylegend/core/request/service_client.py,sha256=oNvMR6qNl5UcxpcAjIb4CCpd0MB3Z-Y5OJSyFPGeerM,3377
59
60
  pylegend/core/sql/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
60
- pylegend/core/sql/metamodel.py,sha256=UNGJ9mZWw7sJQzNwXsZjZtrASTBfPrM2Un8-BEd8jDg,20330
61
- pylegend/core/sql/metamodel_extension.py,sha256=5y63ms2MLdfW07X6R5hsozinWEr7LoB_lGXvROP4byk,16382
61
+ pylegend/core/sql/metamodel.py,sha256=VHJ2C0MVUgWH5k3DF2b2_LJNvK_24MbhefbWHu9v2dQ,21464
62
+ pylegend/core/sql/metamodel_extension.py,sha256=Cwqqzh7do4uPaBb_7xLZFq-3Oh3AtywwHM-OqATYs4Y,18297
62
63
  pylegend/core/tds/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
63
64
  pylegend/core/tds/abstract/__init__.py,sha256=g6w4WCuQ2pqQG6yyn-QLLXED3ttOOB8YnXzVt3ijb28,578
64
65
  pylegend/core/tds/abstract/frames/__init__.py,sha256=g6w4WCuQ2pqQG6yyn-QLLXED3ttOOB8YnXzVt3ijb28,578
@@ -112,22 +113,24 @@ pylegend/core/tds/legendql_api/frames/legendql_api_tds_frame.py,sha256=BFDdgeZ66
112
113
  pylegend/core/tds/pandas_api/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
113
114
  pylegend/core/tds/pandas_api/frames/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
114
115
  pylegend/core/tds/pandas_api/frames/functions/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
115
- pylegend/core/tds/pandas_api/frames/functions/aggregate_function.py,sha256=rpFjIOE9LmbfL78b3fiD2dRB0Dq0hqGmdQLHcsvi59Y,21110
116
+ pylegend/core/tds/pandas_api/frames/functions/aggregate_function.py,sha256=L-re1fgm1VPgy2VeY0BoXIDEhpfciWV-pgDK164HVFI,21646
116
117
  pylegend/core/tds/pandas_api/frames/functions/assign_function.py,sha256=uhCv1sDnVBZmT3H5Alu2NUvek8aKqWz5HIG2Vtut-hs,6931
117
118
  pylegend/core/tds/pandas_api/frames/functions/drop.py,sha256=tJMeL9Or43QDng9SsxYvW_yus3Hjp03PSlX7P857d7s,7269
118
119
  pylegend/core/tds/pandas_api/frames/functions/dropna.py,sha256=OVVwUsPSAykm1g-afVvwxQCr_AaoQtH0cFRVffl9eHs,6161
119
120
  pylegend/core/tds/pandas_api/frames/functions/fillna.py,sha256=7XKfIpRlTtoIS1jzfPemOMuytH4njqQ_4GF2UKZliG0,6553
120
121
  pylegend/core/tds/pandas_api/frames/functions/filter.py,sha256=TE-OfQqOrBwhS7bKDChsLRTAWOZreZikGQhQPByy8uA,7959
121
122
  pylegend/core/tds/pandas_api/frames/functions/filtering.py,sha256=FmzzobMoL-_mt3uFssveGTNCVGo6ZfttXZsj1c56uIo,3181
123
+ pylegend/core/tds/pandas_api/frames/functions/iloc.py,sha256=PEgqcQKyPATh1y1dEIrsVjsc7jUXdZPyE7Z2bAE6bDM,3698
124
+ pylegend/core/tds/pandas_api/frames/functions/loc.py,sha256=ZI0NGcPrDf0XHcf95ow-HHIwZslMAJXk5O7HDssckec,5418
122
125
  pylegend/core/tds/pandas_api/frames/functions/merge.py,sha256=bp9a9reNtUAKqaz1Kft3m7wegHKxOmIVoJH135A1iV0,21225
123
126
  pylegend/core/tds/pandas_api/frames/functions/rename.py,sha256=afXj8EhsTVUNJAZDFAM_K3VOX5oH3TA2FxSDoZHfT6M,8898
124
127
  pylegend/core/tds/pandas_api/frames/functions/sort_values_function.py,sha256=sppDTCW3X0RXLYD2zBvjKEObtc_JfEtoNY7lj-60zqQ,7132
125
128
  pylegend/core/tds/pandas_api/frames/functions/truncate_function.py,sha256=VUr9jzVhnU_mJVootUQfcEG8Q66vSJba1QGUGQiYxCk,6214
126
- pylegend/core/tds/pandas_api/frames/pandas_api_applied_function_tds_frame.py,sha256=u2ONcOw9kP1JJxl2VZH_fKIaqdyY0n9nuIy_p-yQ93g,2967
127
- pylegend/core/tds/pandas_api/frames/pandas_api_base_tds_frame.py,sha256=HBmAuI2VW6Fc67CzJ3vJV_OcEP0lYCDKJjVYB89ObBk,36833
128
- pylegend/core/tds/pandas_api/frames/pandas_api_groupby_tds_frame.py,sha256=0K4Hb3FPs7ZzlZCWFG-65ZKkqEvHHj_FvE26g9rz7ps,13714
129
+ pylegend/core/tds/pandas_api/frames/pandas_api_applied_function_tds_frame.py,sha256=3BcR2OH5uGvKIep6P1hrgK8QoT5RCzZeh9KfBx1TmgU,3071
130
+ pylegend/core/tds/pandas_api/frames/pandas_api_base_tds_frame.py,sha256=eK-goe9LdQJQLwdlfAllQ0kE8OCUECO9qRzyYnPQNZw,39017
131
+ pylegend/core/tds/pandas_api/frames/pandas_api_groupby_tds_frame.py,sha256=YEtrE07ynHzGBJpSa7FhCQ2834NrOjPkECowfCPFJrQ,16820
129
132
  pylegend/core/tds/pandas_api/frames/pandas_api_input_tds_frame.py,sha256=FgwIJCkawXuIjXYfVVrLa5RHfOO5xnSFI0pXti34L_8,2116
130
- pylegend/core/tds/pandas_api/frames/pandas_api_tds_frame.py,sha256=QYRFRJ605cpb4en2r048EFyoPsl8ieymjChGQr87oz0,11833
133
+ pylegend/core/tds/pandas_api/frames/pandas_api_tds_frame.py,sha256=vPPtO_zvElaZfa4kgUEOIMnBMe133TNqTGE2DDDyC3M,12233
131
134
  pylegend/core/tds/result_handler/__init__.py,sha256=8RE84xfkARwDbaQCvZulXcvDJlI-V5DuJp9RsdaGnqU,1141
132
135
  pylegend/core/tds/result_handler/result_handler.py,sha256=7tSzOswFCapAAdACphIR3Q0QISYyjo_On_vtsUIPAbA,1183
133
136
  pylegend/core/tds/result_handler/to_csv_file_result_handler.py,sha256=lm0UG87RNUXqQwOtSgxHbLKzAHebNuE3zIXM3ErtOxM,2270
@@ -169,9 +172,9 @@ pylegend/legacy_api_tds_client.py,sha256=IXfo2pdBFV3M3S4RYKJcvudMc_OGdR0yvJhTV-o
169
172
  pylegend/legendql_api_tds_client.py,sha256=oS6NET5pAA-hfVhVvwG6sRF7omyBs_gEYSAgA8Tky8U,2357
170
173
  pylegend/utils/__init__.py,sha256=LXTDJSDmHQXtnMDZouhZp9IZQVpY6ONkINbUYjtnMkE,578
171
174
  pylegend/utils/class_utils.py,sha256=t4PpF3jAXS_D6p9TqlSppryNYNOuy5C-kbKn2Kgb4QU,973
172
- pylegend-0.12.0.dist-info/METADATA,sha256=YEOJdVd5mlhj77NLk1oUZWflNte8um_E9OvDE9wYbTc,4281
173
- pylegend-0.12.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
174
- pylegend-0.12.0.dist-info/licenses/LICENSE,sha256=AGR96_qQPZO66Gjqq4G6r_g670K35VtW-IobTAkmZJM,11343
175
- pylegend-0.12.0.dist-info/licenses/LICENSE.spdx,sha256=i7TsBclLotUvMjx9vZ_6S8Pp0r4uknWGw1RwiKBBvQ4,207
176
- pylegend-0.12.0.dist-info/licenses/NOTICE,sha256=2Lr4FqiscyRI7-vyn7c2z-zqUw2p6x7upJyBvFKkHjk,167
177
- pylegend-0.12.0.dist-info/RECORD,,
175
+ pylegend-0.14.0.dist-info/METADATA,sha256=9onT96z16Z8t06EPg1At-Zqd31fTSiuFUEt9GVgEQkc,4281
176
+ pylegend-0.14.0.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
177
+ pylegend-0.14.0.dist-info/licenses/LICENSE,sha256=AGR96_qQPZO66Gjqq4G6r_g670K35VtW-IobTAkmZJM,11343
178
+ pylegend-0.14.0.dist-info/licenses/LICENSE.spdx,sha256=i7TsBclLotUvMjx9vZ_6S8Pp0r4uknWGw1RwiKBBvQ4,207
179
+ pylegend-0.14.0.dist-info/licenses/NOTICE,sha256=2Lr4FqiscyRI7-vyn7c2z-zqUw2p6x7upJyBvFKkHjk,167
180
+ pylegend-0.14.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any