vtlengine 1.0.3rc3__py3-none-any.whl → 1.1__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 vtlengine might be problematic. Click here for more details.

Files changed (53) hide show
  1. vtlengine/API/_InternalApi.py +288 -61
  2. vtlengine/API/__init__.py +269 -71
  3. vtlengine/API/data/schema/json_schema_2.1.json +116 -0
  4. vtlengine/AST/ASTComment.py +56 -0
  5. vtlengine/AST/ASTConstructor.py +76 -22
  6. vtlengine/AST/ASTConstructorModules/Expr.py +238 -120
  7. vtlengine/AST/ASTConstructorModules/ExprComponents.py +126 -61
  8. vtlengine/AST/ASTConstructorModules/Terminals.py +97 -42
  9. vtlengine/AST/ASTConstructorModules/__init__.py +50 -0
  10. vtlengine/AST/ASTEncoders.py +5 -1
  11. vtlengine/AST/ASTString.py +608 -0
  12. vtlengine/AST/ASTTemplate.py +28 -2
  13. vtlengine/AST/DAG/__init__.py +10 -4
  14. vtlengine/AST/Grammar/lexer.py +0 -1
  15. vtlengine/AST/Grammar/parser.py +185 -440
  16. vtlengine/AST/VtlVisitor.py +0 -1
  17. vtlengine/AST/__init__.py +127 -14
  18. vtlengine/DataTypes/TimeHandling.py +50 -15
  19. vtlengine/DataTypes/__init__.py +79 -7
  20. vtlengine/Exceptions/__init__.py +3 -5
  21. vtlengine/Exceptions/messages.py +74 -105
  22. vtlengine/Interpreter/__init__.py +136 -46
  23. vtlengine/Model/__init__.py +14 -11
  24. vtlengine/Operators/Aggregation.py +17 -9
  25. vtlengine/Operators/Analytic.py +64 -20
  26. vtlengine/Operators/Assignment.py +0 -1
  27. vtlengine/Operators/CastOperator.py +44 -44
  28. vtlengine/Operators/Clause.py +16 -10
  29. vtlengine/Operators/Comparison.py +20 -12
  30. vtlengine/Operators/Conditional.py +47 -15
  31. vtlengine/Operators/General.py +9 -4
  32. vtlengine/Operators/HROperators.py +4 -14
  33. vtlengine/Operators/Join.py +15 -14
  34. vtlengine/Operators/Numeric.py +32 -26
  35. vtlengine/Operators/RoleSetter.py +6 -2
  36. vtlengine/Operators/Set.py +12 -8
  37. vtlengine/Operators/String.py +9 -9
  38. vtlengine/Operators/Time.py +145 -124
  39. vtlengine/Operators/Validation.py +10 -4
  40. vtlengine/Operators/__init__.py +56 -69
  41. vtlengine/Utils/__init__.py +55 -1
  42. vtlengine/__extras_check.py +17 -0
  43. vtlengine/__init__.py +2 -2
  44. vtlengine/files/output/__init__.py +2 -1
  45. vtlengine/files/output/_time_period_representation.py +2 -1
  46. vtlengine/files/parser/__init__.py +52 -46
  47. vtlengine/files/parser/_time_checking.py +4 -4
  48. {vtlengine-1.0.3rc3.dist-info → vtlengine-1.1.dist-info}/METADATA +21 -17
  49. vtlengine-1.1.dist-info/RECORD +61 -0
  50. {vtlengine-1.0.3rc3.dist-info → vtlengine-1.1.dist-info}/WHEEL +1 -1
  51. vtlengine/DataTypes/NumericTypesHandling.py +0 -38
  52. vtlengine-1.0.3rc3.dist-info/RECORD +0 -58
  53. {vtlengine-1.0.3rc3.dist-info → vtlengine-1.1.dist-info}/LICENSE.md +0 -0
@@ -17,10 +17,14 @@ from vtlengine.DataTypes import (
17
17
  TimeInterval,
18
18
  TimePeriod,
19
19
  )
20
- from vtlengine.DataTypes.TimeHandling import DURATION_MAPPING
20
+ from vtlengine.DataTypes.TimeHandling import PERIOD_IND_MAPPING
21
21
  from vtlengine.Exceptions import InputValidationException, SemanticError
22
22
  from vtlengine.files.parser._rfc_dialect import register_rfc
23
- from vtlengine.files.parser._time_checking import check_date, check_time, check_time_period
23
+ from vtlengine.files.parser._time_checking import (
24
+ check_date,
25
+ check_time,
26
+ check_time_period,
27
+ )
24
28
  from vtlengine.Model import Component, Dataset, Role
25
29
 
26
30
  TIME_CHECKS_MAPPING: Dict[Type[ScalarType], Any] = {
@@ -38,14 +42,9 @@ def _validate_csv_path(components: Dict[str, Component], csv_path: Path) -> None
38
42
  raise Exception(f"Path {csv_path} is not a file.")
39
43
  register_rfc()
40
44
  try:
41
- with open(csv_path, "r") as f:
45
+ with open(csv_path, "r", errors="replace", encoding="utf-8") as f:
42
46
  reader = DictReader(f, dialect="rfc")
43
47
  csv_columns = reader.fieldnames
44
-
45
- except UnicodeDecodeError as error:
46
- # https://coderwall.com/p/stzy9w/raising-unicodeencodeerror-and-unicodedecodeerror-
47
- # manually-for-testing-purposes
48
- raise InputValidationException("0-1-2-5", file=csv_path.name) from error
49
48
  except InputValidationException as ie:
50
49
  raise InputValidationException("{}".format(str(ie))) from None
51
50
  except Exception as e:
@@ -73,8 +72,11 @@ def _sanitize_pandas_columns(
73
72
  components: Dict[str, Component], csv_path: Union[str, Path], data: pd.DataFrame
74
73
  ) -> pd.DataFrame:
75
74
  # Fast loading from SDMX-CSV
76
- if ("DATAFLOW" in data.columns and data.columns[0] == "DATAFLOW" and
77
- "DATAFLOW" not in components):
75
+ if (
76
+ "DATAFLOW" in data.columns
77
+ and data.columns[0] == "DATAFLOW"
78
+ and "DATAFLOW" not in components
79
+ ):
78
80
  data.drop(columns=["DATAFLOW"], inplace=True)
79
81
  if "STRUCTURE" in data.columns and data.columns[0] == "STRUCTURE":
80
82
  if "STRUCTURE" not in components:
@@ -102,32 +104,18 @@ def _sanitize_pandas_columns(
102
104
  return data
103
105
 
104
106
 
105
- def _pandas_load_csv(components: Dict[str, Component], csv_path: Path) -> pd.DataFrame:
106
- obj_dtypes = {comp_name: np.object_ for comp_name, comp in components.items()}
107
-
108
- try:
109
- data = pd.read_csv(
110
- csv_path, dtype=obj_dtypes, engine="c", keep_default_na=False, na_values=[""]
111
- )
112
- except UnicodeDecodeError:
113
- raise InputValidationException(code="0-1-2-5", file=csv_path.name)
114
-
115
- return _sanitize_pandas_columns(components, csv_path, data)
116
-
107
+ def _pandas_load_csv(components: Dict[str, Component], csv_path: Union[str, Path]) -> pd.DataFrame:
108
+ obj_dtypes = {comp_name: object for comp_name, comp in components.items()}
117
109
 
118
- def _pandas_load_s3_csv(components: Dict[str, Component], csv_path: str) -> pd.DataFrame:
119
- obj_dtypes = {comp_name: np.object_ for comp_name, comp in components.items()}
120
-
121
- # start = time()
122
- try:
123
- data = pd.read_csv(
124
- csv_path, dtype=obj_dtypes, engine="c", keep_default_na=False, na_values=[""]
125
- )
110
+ data = pd.read_csv(
111
+ csv_path,
112
+ dtype=obj_dtypes,
113
+ engine="c",
114
+ keep_default_na=False,
115
+ na_values=[""],
116
+ encoding_errors="replace",
117
+ )
126
118
 
127
- except UnicodeDecodeError:
128
- raise InputValidationException(code="0-1-2-5", file=csv_path)
129
- except Exception as e:
130
- raise InputValidationException(f"ERROR: {str(e)}, review file {str(csv_path)}")
131
119
  return _sanitize_pandas_columns(components, csv_path, data)
132
120
 
133
121
 
@@ -165,7 +153,6 @@ def _validate_pandas(
165
153
  comp_name = ""
166
154
  comp = None
167
155
  try:
168
-
169
156
  for comp_name, comp in components.items():
170
157
  if comp.data_type in (Date, TimePeriod, TimeInterval):
171
158
  data[comp_name] = data[comp_name].map(
@@ -173,27 +160,45 @@ def _validate_pandas(
173
160
  )
174
161
  elif comp.data_type == Integer:
175
162
  data[comp_name] = data[comp_name].map(
176
- lambda x: Integer.cast(float(x)), na_action="ignore"
163
+ lambda x: Integer.cast(float(str(x))), na_action="ignore"
177
164
  )
178
165
  elif comp.data_type == Number:
179
- data[comp_name] = data[comp_name].map(lambda x: float(x), na_action="ignore")
166
+ data[comp_name] = data[comp_name].map(lambda x: float((str(x))), na_action="ignore")
180
167
  elif comp.data_type == Boolean:
181
168
  data[comp_name] = data[comp_name].map(
182
- lambda x: _parse_boolean(x), na_action="ignore"
169
+ lambda x: _parse_boolean(str(x)), na_action="ignore"
183
170
  )
184
171
  elif comp.data_type == Duration:
185
172
  values_correct = (
186
173
  data[comp_name]
187
- .map(lambda x: x.replace(" ", "") in DURATION_MAPPING, na_action="ignore")
174
+ .map(
175
+ lambda x: Duration.validate_duration(x),
176
+ na_action="ignore",
177
+ )
188
178
  .all()
189
179
  )
190
180
  if not values_correct:
191
- raise ValueError(f"Duration values are not correct in column {comp_name}")
181
+ try:
182
+ values_correct = (
183
+ data[comp_name]
184
+ .map(
185
+ lambda x: x.replace(" ", "") in PERIOD_IND_MAPPING, # type: ignore[union-attr]
186
+ na_action="ignore",
187
+ )
188
+ .all()
189
+ )
190
+ if not values_correct:
191
+ raise ValueError(
192
+ f"Duration values are not correct in column {comp_name}"
193
+ )
194
+ except ValueError:
195
+ raise ValueError(f"Duration values are not correct in column {comp_name}")
192
196
  else:
193
197
  data[comp_name] = data[comp_name].map(
194
198
  lambda x: str(x).replace('"', ""), na_action="ignore"
195
199
  )
196
- data[comp_name] = data[comp_name].astype(np.object_, errors="raise")
200
+ data[comp_name] = data[comp_name].astype(object, errors="raise")
201
+
197
202
  except ValueError:
198
203
  str_comp = SCALAR_TYPES_CLASS_REVERSE[comp.data_type] if comp else "Null"
199
204
  raise SemanticError("0-1-1-12", name=dataset_name, column=comp_name, type=str_comp)
@@ -202,14 +207,15 @@ def _validate_pandas(
202
207
 
203
208
 
204
209
  def load_datapoints(
205
- components: Dict[str, Component], dataset_name: str, csv_path: Optional[Union[Path, str]] = None
210
+ components: Dict[str, Component],
211
+ dataset_name: str,
212
+ csv_path: Optional[Union[Path, str]] = None,
206
213
  ) -> pd.DataFrame:
207
214
  if csv_path is None or (isinstance(csv_path, Path) and not csv_path.exists()):
208
215
  return pd.DataFrame(columns=list(components.keys()))
209
- elif isinstance(csv_path, str):
210
- data = _pandas_load_s3_csv(components, csv_path)
211
- elif isinstance(csv_path, Path):
212
- _validate_csv_path(components, csv_path)
216
+ elif isinstance(csv_path, (str, Path)):
217
+ if isinstance(csv_path, Path):
218
+ _validate_csv_path(components, csv_path)
213
219
  data = _pandas_load_csv(components, csv_path)
214
220
  else:
215
221
  raise Exception("Invalid csv_path type")
@@ -21,16 +21,16 @@ def check_date(value: str) -> str:
21
21
  raise InputValidationException(f"Date {value} is out of range for the month.")
22
22
  if "month must be in 1..12" in str(e):
23
23
  raise InputValidationException(
24
- f"Date {value} is invalid. " f"Month must be between 1 and 12."
24
+ f"Date {value} is invalid. Month must be between 1 and 12."
25
25
  )
26
26
  raise InputValidationException(
27
- f"Date {value} is not in the correct format. " f"Use YYYY-MM-DD."
27
+ f"Date {value} is not in the correct format. Use YYYY-MM-DD."
28
28
  )
29
29
 
30
30
  # Check date is between 1900 and 9999
31
31
  if not 1800 <= date_value.year <= 9999:
32
32
  raise InputValidationException(
33
- f"Date {value} is invalid. " f"Year must be between 1900 and 9999."
33
+ f"Date {value} is invalid. Year must be between 1900 and 9999."
34
34
  )
35
35
 
36
36
  return date_value.isoformat()
@@ -68,7 +68,7 @@ def check_time(value: str) -> str:
68
68
  raise ValueError("Start date is greater than end date.")
69
69
  return value
70
70
  raise ValueError(
71
- "Time is not in the correct format. " "Use YYYY-MM-DD/YYYY-MM-DD or YYYY or YYYY-MM."
71
+ "Time is not in the correct format. Use YYYY-MM-DD/YYYY-MM-DD or YYYY or YYYY-MM."
72
72
  )
73
73
 
74
74
 
@@ -1,31 +1,35 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: vtlengine
3
- Version: 1.0.3rc3
3
+ Version: 1.1
4
4
  Summary: Run and Validate VTL Scripts
5
5
  License: AGPL-3.0
6
6
  Keywords: vtl,sdmx,vtlengine,Validation and Transformation Language
7
7
  Author: MeaningfulData
8
8
  Author-email: info@meaningfuldata.eu
9
- Requires-Python: >=3.10,<4.0
9
+ Maintainer: Francisco Javier Hernandez del Caño
10
+ Maintainer-email: javier.hernandez@meaningfuldata.eu
11
+ Requires-Python: >=3.9
10
12
  Classifier: Development Status :: 5 - Production/Stable
11
13
  Classifier: Intended Audience :: Developers
12
14
  Classifier: Intended Audience :: Information Technology
13
15
  Classifier: Intended Audience :: Science/Research
14
- Classifier: License :: OSI Approved :: GNU Affero General Public License v3
15
- Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.10
17
- Classifier: Programming Language :: Python :: 3.11
18
- Classifier: Programming Language :: Python :: 3.12
19
- Classifier: Programming Language :: Python :: 3.13
20
16
  Classifier: Typing :: Typed
21
- Requires-Dist: antlr4-python3-runtime (==4.9.2)
22
- Requires-Dist: bottleneck (>=1.3.4,<2.0.0)
23
- Requires-Dist: duckdb (>=1.1.1,<2.0.0)
24
- Requires-Dist: networkx (>=2.8.8,<3.0.0)
25
- Requires-Dist: numexpr (>=2.9.0,<3.0.0)
26
- Requires-Dist: pandas (>=2.1.4,<3.0.0)
27
- Requires-Dist: s3fs (>=2024.9.0,<2025.0.0)
28
- Requires-Dist: sqlglot (>=22.2.0,<23.0.0)
17
+ Provides-Extra: all
18
+ Provides-Extra: s3
19
+ Requires-Dist: antlr4-python3-runtime (>=4.9.2,<4.10)
20
+ Requires-Dist: duckdb (>=1.1,<1.2)
21
+ Requires-Dist: fsspec (>=2022.11.0,<2023.0) ; extra == "all"
22
+ Requires-Dist: fsspec (>=2022.11.0,<2023.0) ; extra == "s3"
23
+ Requires-Dist: jsonschema (>=3.2.0,<5.0)
24
+ Requires-Dist: networkx (>=2.8,<3.0)
25
+ Requires-Dist: numpy (>=1.23.2,<2) ; python_version < "3.13"
26
+ Requires-Dist: numpy (>=2.1.0) ; python_version >= "3.13"
27
+ Requires-Dist: pandas (>=2.1.4,<2.2) ; python_version < "3.13"
28
+ Requires-Dist: pandas (>=2.2,<3.0) ; python_version >= "3.13"
29
+ Requires-Dist: pysdmx[xml] (>=1.3.0,<2.0)
30
+ Requires-Dist: s3fs (>=2022.11.0,<2023.0) ; extra == "all"
31
+ Requires-Dist: s3fs (>=2022.11.0,<2023.0) ; extra == "s3"
32
+ Requires-Dist: sqlglot (>=22.2.0,<23.0)
29
33
  Project-URL: Authors, https://github.com/Meaningful-Data/vtlengine/graphs/contributors
30
34
  Project-URL: Documentation, https://docs.vtlengine.meaningfuldata.eu
31
35
  Project-URL: IssueTracker, https://github.com/Meaningful-Data/vtlengine/issues
@@ -0,0 +1,61 @@
1
+ vtlengine/API/_InternalApi.py,sha256=uSPW-Lny_zSVrhHfkz6FbBEaxQXNySTGPI2LF8wKTHY,22761
2
+ vtlengine/API/__init__.py,sha256=IiJZWSlHpUWq73Qv1_V-Tirim-ZnpF3xexFtW1Psyx8,17866
3
+ vtlengine/API/data/schema/json_schema_2.1.json,sha256=v3-C0Xnq8qScJSPAtLgb3rjKMrd3nz-bIxgZdTSEUiU,4336
4
+ vtlengine/AST/ASTComment.py,sha256=bAJW7aaqBXU2LqMtRvL_XOttdl1AFZufa15vmQdvNlY,1667
5
+ vtlengine/AST/ASTConstructor.py,sha256=X55I98BKG1ItyGIDObF9ALVfCcWnU-0wwCWJsiPILkg,21488
6
+ vtlengine/AST/ASTConstructorModules/Expr.py,sha256=aCL3uuQF0BJIels6rTckL8FAAykzImYb3AESs7umFcY,70066
7
+ vtlengine/AST/ASTConstructorModules/ExprComponents.py,sha256=2Ft4e5w2NtbfaqSNW8I9qSpG9iUaPIfdug7yYWo2gqE,38553
8
+ vtlengine/AST/ASTConstructorModules/Terminals.py,sha256=7zWDx_SFcbnL35G7Y0qZwl-lLEsfqReyzBX0UxwTCOk,27054
9
+ vtlengine/AST/ASTConstructorModules/__init__.py,sha256=J6g6NhJD8j0Ek1YmpethxRiFdjhLxUTM0mc3NHRFLlM,1879
10
+ vtlengine/AST/ASTDataExchange.py,sha256=kPSz21DGbEv-2bZowObseqf2d2_iQj1VnrqWuD9ZwtA,140
11
+ vtlengine/AST/ASTEncoders.py,sha256=-Ar6a0GqMdJZK4CtZ1pUpIeGv57oSdN5qy3-aF0Zt9c,948
12
+ vtlengine/AST/ASTString.py,sha256=y_xWVm2OHgsFs9As1-0PjEnmftjaoRsZJHZNtsFcKXc,25297
13
+ vtlengine/AST/ASTTemplate.py,sha256=qUkz0AE1ay3gFrCidzhJAqxRnZR8nj98DOKAW2rXoso,12961
14
+ vtlengine/AST/ASTVisitor.py,sha256=3QQTudBpbR4pPQdH7y07EgwuzhoGzNQ59qox8R-E3fM,500
15
+ vtlengine/AST/DAG/__init__.py,sha256=ViL1vfLOCU28Yx8cOMt8aIvguSrzYYTb9qPhAwoExwY,15074
16
+ vtlengine/AST/DAG/_words.py,sha256=lEuBQ_w-KoKGna-x3gFGfbX1KP4Ez5EgdomH2LOeodk,170
17
+ vtlengine/AST/Grammar/Vtl.g4,sha256=86bBWjQLCHZSuB5iLIk0JZRgMyMg0n7xbU8qzot2cIE,26313
18
+ vtlengine/AST/Grammar/VtlTokens.g4,sha256=SwDR_59U25APqslczFcvTUiPoH7bC6kGaH2GkJ3kYzA,9972
19
+ vtlengine/AST/Grammar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ vtlengine/AST/Grammar/lexer.py,sha256=ncoPevKkUpGyYx5mVKcKjocVhFoKSdu-5NSQDPY2V3g,105742
21
+ vtlengine/AST/Grammar/parser.py,sha256=ISi5OWmPbLitMp-8fg-wa1-475TfKZWK98jXjyOLi-8,634355
22
+ vtlengine/AST/Grammar/tokens.py,sha256=YF7tO0nF2zYC-VaBAJLyc6VitM72CvYfFQpoPDGCMzo,3139
23
+ vtlengine/AST/VtlVisitor.py,sha256=NJfXJVP6wNmasJmPLlojFqm9R5VSamOAKg_w7BMrhac,35332
24
+ vtlengine/AST/__init__.py,sha256=JnPilognG2rT2gtpjD4OwKFX0O3ZqvV-ic8gJxRu7Xo,11672
25
+ vtlengine/DataTypes/TimeHandling.py,sha256=CYnC0sb1qbRjTnCSsA3wgez7QftOzrXHxbuZXlY3O3Q,20151
26
+ vtlengine/DataTypes/__init__.py,sha256=LYXrde68bYm7MLeMLmr4haeOTSE4Fnpq9G2Ewy7DiaU,23084
27
+ vtlengine/Exceptions/__init__.py,sha256=rSSskV_qCBFzg_W67Q1QBAL7Lnq88D7yi2BDYo1hytw,4727
28
+ vtlengine/Exceptions/messages.py,sha256=9Tzkm-Q4ZI7UFFmWfsiy2xI7hFKMrnPB-EmUfVgxuBo,19428
29
+ vtlengine/Interpreter/__init__.py,sha256=yFXLi3Mr7EnOmdynf-BvFwDHOBsWVjRXSkNgdmhfJVc,83533
30
+ vtlengine/Model/__init__.py,sha256=xWrwhdUOj8Y-5x38zP5XnmFPw8IkBVBBG2bPsUBGLA8,15869
31
+ vtlengine/Operators/Aggregation.py,sha256=43bqjaMqGG9zzFkcs6JLfShb1ISupmyQnXOQQ-HQo9E,11906
32
+ vtlengine/Operators/Analytic.py,sha256=GiVNwa02JNRaVcHEkqKlat9WSIgQ32OhpgOdYc9PlJo,12818
33
+ vtlengine/Operators/Assignment.py,sha256=xyJgGPoFYbq6mzX06gz7Q7L8jXJxpUkgzdY3Lrne2hw,793
34
+ vtlengine/Operators/Boolean.py,sha256=3U5lHkxW5d7QQdGDNxXeXqejlPfFrXKG8_TqknrC8Ls,2856
35
+ vtlengine/Operators/CastOperator.py,sha256=mvWfNhJ1pEEk_ZQp-3unLoYJvJShUjUu_BOYQ6ByySI,16951
36
+ vtlengine/Operators/Clause.py,sha256=_Sdt3qQUpphNRs4IQW5pSj9kagzwLluV9BRHMGNxqsI,15022
37
+ vtlengine/Operators/Comparison.py,sha256=7G2UK1BDCDJR4jTXa-txJlAJEvzXEeYaDSA_2oxjgKY,17286
38
+ vtlengine/Operators/Conditional.py,sha256=nxatC0tr8UvsOVcCMcBjK_U6hzjbd2uf3VG3YiCMUOo,19944
39
+ vtlengine/Operators/General.py,sha256=q1fpqP4IYEwURXi8Eo-_j5AUktK0dvNosL9SgSe7a8w,6711
40
+ vtlengine/Operators/HROperators.py,sha256=VVp5FcdbDXhU_VCfUA6t75bs51qx9fKJT4n15WM2vyM,8866
41
+ vtlengine/Operators/Join.py,sha256=df2XG2tKmha_WUhHEYhgZIVc_2L8Wr45o0ISm-HOReA,18108
42
+ vtlengine/Operators/Numeric.py,sha256=icYTWzEsw6VQFLYc5Wucgr8961d8ZwTFx_wfZ8Wp9Co,12083
43
+ vtlengine/Operators/RoleSetter.py,sha256=mHZIdcHC3wflj81ekLbioDG1f8yHZXYDQFymV-KnyXA,2274
44
+ vtlengine/Operators/Set.py,sha256=f1uLeY4XZF0cWEwpXRB_CczgbXr6s33DYPuFt39HlEg,7084
45
+ vtlengine/Operators/String.py,sha256=ghWtYl6oUEAAzynY1a9Hg4yqRA9Sa7uk2B6iF9uuSqQ,20230
46
+ vtlengine/Operators/Time.py,sha256=tpBZkuDldlcVnNWUNvrc8yhnG1knalZVFklGppbzw4k,42734
47
+ vtlengine/Operators/Validation.py,sha256=ev3HyU7e1XbeAtUQ1y6zY3fzBwMqetDPhG3NNveAGOE,9988
48
+ vtlengine/Operators/__init__.py,sha256=GN5eaAwmzfYKD7JJRIaRqdIJzflGc3UMvrOC9mlYNVo,37227
49
+ vtlengine/Utils/__init__.py,sha256=zhGPJA8MjHmtEEwMS4CxEFYL0tk2L5F0YPn7bitdRzM,8954
50
+ vtlengine/__extras_check.py,sha256=Wr-lxGZhXJZEacVV5cUkvKt7XM-mry0kYAe3VxNrVcY,614
51
+ vtlengine/__init__.py,sha256=E31A6eDHTZsPNI5Cq-zv9-O87D5n8du-oZtVB6u3dVk,165
52
+ vtlengine/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ vtlengine/files/output/__init__.py,sha256=4tmf-p1Y1u5Ohrwt3clQA-FMGaijKI3HC_iwn3H9J8c,1250
54
+ vtlengine/files/output/_time_period_representation.py,sha256=D5XCSXyEuX_aBzTvBV3sZxACcgwXz2Uu_YH3loMP8q0,1610
55
+ vtlengine/files/parser/__init__.py,sha256=JamEIWI0pFZxT0sKYE6Fii8H2JQcsFn4Nf3T0OLSm9g,8637
56
+ vtlengine/files/parser/_rfc_dialect.py,sha256=Y8kAYBxH_t9AieN_tYg7QRh5A4DgvabKarx9Ko3QeCQ,462
57
+ vtlengine/files/parser/_time_checking.py,sha256=UAC_Pv-eQJKrhgTguWb--xfqMMs6quyMeiAkGBt_vgI,4725
58
+ vtlengine-1.1.dist-info/LICENSE.md,sha256=2xqHuoHohba7gpcZZKtOICRjzeKsQANXG8WoV9V35KM,33893
59
+ vtlengine-1.1.dist-info/METADATA,sha256=0F0SO41WyyQfA4zhfkYmIaM0-6eSlShGKoDE7i2uebI,8971
60
+ vtlengine-1.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
61
+ vtlengine-1.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,38 +0,0 @@
1
- import operator
2
- from decimal import Decimal
3
- from typing import Union
4
-
5
-
6
- def decimal_add(a: Union[float, int], b: Union[float, int]) -> float:
7
- """
8
- Adds two numbers, if they are floats, converts them to Decimal and then to float
9
- :param a: first number
10
- :param b: second number
11
- :return: the sum of the two numbers
12
- """
13
- if isinstance(a, float) and isinstance(b, float):
14
- decimal_value = Decimal(a) + Decimal(b)
15
- return float(decimal_value)
16
-
17
- return operator.add(a, b)
18
-
19
-
20
- def decimal_sub(a: Union[float, int], b: Union[float, int]) -> float:
21
- if isinstance(a, float) and isinstance(b, float):
22
- decimal_value = Decimal(a) - Decimal(b)
23
- return float(decimal_value)
24
- return operator.sub(a, b)
25
-
26
-
27
- def decimal_mul(a: Union[float, int], b: Union[float, int]) -> float:
28
- if isinstance(a, float) and isinstance(b, float):
29
- decimal_value = Decimal(a) * Decimal(b)
30
- return float(decimal_value)
31
- return operator.mul(a, b)
32
-
33
-
34
- def decimal_div(a: Union[float, int], b: Union[float, int]) -> float:
35
- if isinstance(a, float) and isinstance(b, float):
36
- decimal_value = Decimal(a) / Decimal(b)
37
- return float(decimal_value)
38
- return operator.truediv(a, b)
@@ -1,58 +0,0 @@
1
- vtlengine/API/_InternalApi.py,sha256=9dBXTc-JTD7tGSzRqtv6aonk4ONxPlhkdakgN0aOQm4,14397
2
- vtlengine/API/__init__.py,sha256=yZe1cTwUmJc1fZWfe7NW94gcUxG92Spi6D6P8miEST4,10987
3
- vtlengine/AST/ASTConstructor.py,sha256=UvAY1sRrdidBC_JfgcYtJLu8JeSj00FEaUqzsgyWtHI,19668
4
- vtlengine/AST/ASTConstructorModules/Expr.py,sha256=ERHDPcf-eufpSDgyg_iwHEZXkBtcGdUpWbTUEra3lcY,65766
5
- vtlengine/AST/ASTConstructorModules/ExprComponents.py,sha256=_rTOkafq_jo_jq2fLoggEiuB1hYvhagU4QodJibYZL0,36138
6
- vtlengine/AST/ASTConstructorModules/Terminals.py,sha256=gbvauCKjq0C07WbuZov8mqUmtAzJ-d7CukkpvgzdYgg,25146
7
- vtlengine/AST/ASTConstructorModules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- vtlengine/AST/ASTDataExchange.py,sha256=kPSz21DGbEv-2bZowObseqf2d2_iQj1VnrqWuD9ZwtA,140
9
- vtlengine/AST/ASTEncoders.py,sha256=0RxSQ-4SFTOhFtQFntNeo8VT_gq4qCi92ZK7EWWqOCM,758
10
- vtlengine/AST/ASTTemplate.py,sha256=3dd9fkWNJywDn279tUuZGcOCPbyMiGiqnBwqAB1FWrU,12357
11
- vtlengine/AST/ASTVisitor.py,sha256=3QQTudBpbR4pPQdH7y07EgwuzhoGzNQ59qox8R-E3fM,500
12
- vtlengine/AST/DAG/__init__.py,sha256=JyTaO4sqE9xZ_IcBv-aInoOFrvH0K3kc8hZCMkfth6A,14621
13
- vtlengine/AST/DAG/_words.py,sha256=lEuBQ_w-KoKGna-x3gFGfbX1KP4Ez5EgdomH2LOeodk,170
14
- vtlengine/AST/Grammar/Vtl.g4,sha256=86bBWjQLCHZSuB5iLIk0JZRgMyMg0n7xbU8qzot2cIE,26313
15
- vtlengine/AST/Grammar/VtlTokens.g4,sha256=SwDR_59U25APqslczFcvTUiPoH7bC6kGaH2GkJ3kYzA,9972
16
- vtlengine/AST/Grammar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- vtlengine/AST/Grammar/lexer.py,sha256=an_9C6ASQ2PN_0tAn41plIYt3gTx2cMrcbtBDXQyI-c,105743
18
- vtlengine/AST/Grammar/parser.py,sha256=4AA9tdgPuAyXELW5Cr6hZaHq3pdNKp0NeDpp8sPaVb0,635423
19
- vtlengine/AST/Grammar/tokens.py,sha256=YF7tO0nF2zYC-VaBAJLyc6VitM72CvYfFQpoPDGCMzo,3139
20
- vtlengine/AST/VtlVisitor.py,sha256=OXx2mzbHEs7U_uKsbEzmAmXnFkWO8_Hv4aeUNTPYkJQ,35333
21
- vtlengine/AST/__init__.py,sha256=_-NLJ-GCX5mMmAUGPnY3NzErnFEgjg8LdoGfpdRQjrU,9809
22
- vtlengine/DataTypes/NumericTypesHandling.py,sha256=eeSUhnRkAlcYjwbLZcuuUuJUNFWR3tVWQj8DfEHythk,1230
23
- vtlengine/DataTypes/TimeHandling.py,sha256=wRXhY7YmnKPkEk1yL_X1GkKVIya-vN3JaL_jRr2p9V0,18944
24
- vtlengine/DataTypes/__init__.py,sha256=fhIorhqFkV9hPgJ0NQByRd1Cg_aiK_yUOGfBH11wPho,21617
25
- vtlengine/Exceptions/__init__.py,sha256=_wgOY4XH92hDPOm5rHrR8R9xTc8kqMt0uF2gYLqlnB8,4780
26
- vtlengine/Exceptions/messages.py,sha256=OMEI4isYdpL743_lU-b0ur8aiW643joVprCL9MS_RI0,21946
27
- vtlengine/Interpreter/__init__.py,sha256=MkGxr-GDbXTgXnyG70ls3c7i8aZMr51ud6wUhEHU0S4,80456
28
- vtlengine/Model/__init__.py,sha256=gnDArV8BXnK_x2Oj1lslAyMjtU7RyDSejV4920XfmvI,15593
29
- vtlengine/Operators/Aggregation.py,sha256=04Gb6TsDS1BrBWxrihmGDCN6yYJcnCgtiC8GpltUKC4,11621
30
- vtlengine/Operators/Analytic.py,sha256=ODi-vyyTiIETMtj_Ifc9xmneg-38oophS8VaX1oBdJY,11329
31
- vtlengine/Operators/Assignment.py,sha256=Iz_ap-kfP9q-jRaTjb4iLyx9BYW-zMWYGBDOwSf8rZU,794
32
- vtlengine/Operators/Boolean.py,sha256=3U5lHkxW5d7QQdGDNxXeXqejlPfFrXKG8_TqknrC8Ls,2856
33
- vtlengine/Operators/CastOperator.py,sha256=WoK5-laTd7asYWEu0YcV0sLKt4P8k1MjLFXFBws9QKk,16727
34
- vtlengine/Operators/Clause.py,sha256=KT9_upNvFvVjr4ry2TUyYnwP3WwQB8xaZWf1MoQwwkw,14784
35
- vtlengine/Operators/Comparison.py,sha256=_yqY0fCzm5J8L9LqCQReUlMxP5w2iL9ppAQR1i-byAg,17180
36
- vtlengine/Operators/Conditional.py,sha256=kV6vPWTt98wn5xoPblJ7rwbknJURSPKrLcN0-j47y7w,18530
37
- vtlengine/Operators/General.py,sha256=qWGiTfE4pueh32ZrgQD3hYfhiffqpU-3eo-2BBzHztY,6642
38
- vtlengine/Operators/HROperators.py,sha256=HFpZWGvYo4wpVSsbwKEFJQzhINZoYnypp4c77Q0LSXM,8970
39
- vtlengine/Operators/Join.py,sha256=utTY7J9amAzA-G4RiK7yynBTMB-VLzwQaxn1XvnmzqM,17987
40
- vtlengine/Operators/Numeric.py,sha256=iiah3HhHPHB6aNfiol5vMV07lCfmvxF8viiHhmKj6Ww,11906
41
- vtlengine/Operators/RoleSetter.py,sha256=mbYsXrTDaa9qnjkr5T1EMW1DEh2gN4HqX4eZbGUg5XE,2232
42
- vtlengine/Operators/Set.py,sha256=sosjBAgV6RlY1UxfyLr2afxYSSLT1U_buS5BohOZlrM,6930
43
- vtlengine/Operators/String.py,sha256=7-NH9ZzsJwgaVpZYJ_fpvqTDr7aiMuM0zZW5_CcSuug,20142
44
- vtlengine/Operators/Time.py,sha256=BHXmbmDES3EkAMgu1PyfNTWk7zWNPb3p5InPuaOztNQ,42929
45
- vtlengine/Operators/Validation.py,sha256=fFmtECG4J0FmaW7SmeOTs3WZeNfOE-D1bI3T6IVzrr4,9932
46
- vtlengine/Operators/__init__.py,sha256=oNkMlvTAfYmWK1X1Ngih9L87TZ9FTeFgk6nM3rL0lFQ,37197
47
- vtlengine/Utils/__init__.py,sha256=I_LphVLMqunGRuZ3DnHVeNfHdFaBZb3tUsf2gXKGJsg,7552
48
- vtlengine/__init__.py,sha256=L9tGzRGQ8HMDS23sVWIbBvj41sXR89pf0ZMzEidIEMM,89
49
- vtlengine/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- vtlengine/files/output/__init__.py,sha256=fOvKUGr2EHOELMx6bL2deLjffz2Q_0vQnqtvITBWyvg,1170
51
- vtlengine/files/output/_time_period_representation.py,sha256=Afukc1XQlJOsgv0kKrLJV1xergd2nLqyIzOsQy2GMSI,1579
52
- vtlengine/files/parser/__init__.py,sha256=LiIoya46Y537kFt-7IMl4xCqiV4SCxsINgQqb_a0bfs,8787
53
- vtlengine/files/parser/_rfc_dialect.py,sha256=Y8kAYBxH_t9AieN_tYg7QRh5A4DgvabKarx9Ko3QeCQ,462
54
- vtlengine/files/parser/_time_checking.py,sha256=JoVhuOgSuMFw4_OoMn2XsR7PKXT-cpxUYEUTHs5KPjs,4740
55
- vtlengine-1.0.3rc3.dist-info/LICENSE.md,sha256=2xqHuoHohba7gpcZZKtOICRjzeKsQANXG8WoV9V35KM,33893
56
- vtlengine-1.0.3rc3.dist-info/METADATA,sha256=UX1RolcI5LX_RzGJ-6KMjc3D_GIuA4bx5WNYSprLF_Y,8773
57
- vtlengine-1.0.3rc3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
58
- vtlengine-1.0.3rc3.dist-info/RECORD,,