vtlengine 1.1rc2__py3-none-any.whl → 1.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.
- vtlengine/API/_InternalApi.py +231 -6
- vtlengine/API/__init__.py +256 -65
- vtlengine/AST/ASTComment.py +56 -0
- vtlengine/AST/ASTConstructor.py +71 -18
- vtlengine/AST/ASTConstructorModules/Expr.py +191 -72
- vtlengine/AST/ASTConstructorModules/ExprComponents.py +81 -38
- vtlengine/AST/ASTConstructorModules/Terminals.py +76 -31
- vtlengine/AST/ASTConstructorModules/__init__.py +50 -0
- vtlengine/AST/ASTEncoders.py +4 -0
- vtlengine/AST/ASTString.py +622 -0
- vtlengine/AST/ASTTemplate.py +28 -2
- vtlengine/AST/DAG/__init__.py +10 -1
- vtlengine/AST/__init__.py +127 -14
- vtlengine/Exceptions/messages.py +9 -0
- vtlengine/Interpreter/__init__.py +53 -8
- vtlengine/Model/__init__.py +9 -4
- vtlengine/Operators/Aggregation.py +7 -5
- vtlengine/Operators/Analytic.py +16 -11
- vtlengine/Operators/Conditional.py +20 -5
- vtlengine/Operators/Time.py +11 -10
- vtlengine/Utils/__init__.py +49 -0
- vtlengine/__init__.py +4 -2
- vtlengine/files/parser/__init__.py +16 -26
- vtlengine/files/parser/_rfc_dialect.py +1 -1
- vtlengine/py.typed +0 -0
- vtlengine-1.1.1.dist-info/METADATA +92 -0
- {vtlengine-1.1rc2.dist-info → vtlengine-1.1.1.dist-info}/RECORD +29 -26
- {vtlengine-1.1rc2.dist-info → vtlengine-1.1.1.dist-info}/WHEEL +1 -1
- vtlengine-1.1rc2.dist-info/METADATA +0 -248
- {vtlengine-1.1rc2.dist-info → vtlengine-1.1.1.dist-info}/LICENSE.md +0 -0
vtlengine/AST/ASTConstructor.py
CHANGED
|
@@ -23,6 +23,7 @@ from vtlengine.AST import (
|
|
|
23
23
|
PersistentAssignment,
|
|
24
24
|
Start,
|
|
25
25
|
)
|
|
26
|
+
from vtlengine.AST.ASTConstructorModules import extract_token_info
|
|
26
27
|
from vtlengine.AST.ASTConstructorModules.Expr import Expr
|
|
27
28
|
from vtlengine.AST.ASTConstructorModules.ExprComponents import ExprComp
|
|
28
29
|
from vtlengine.AST.ASTConstructorModules.Terminals import Terminals
|
|
@@ -64,7 +65,9 @@ class ASTVisitor(VtlVisitor):
|
|
|
64
65
|
for statement in statements:
|
|
65
66
|
statements_nodes.append(self.visitStatement(statement))
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
token_info = extract_token_info(ctx)
|
|
69
|
+
|
|
70
|
+
start_node = Start(children=statements_nodes, **token_info)
|
|
68
71
|
|
|
69
72
|
return start_node
|
|
70
73
|
|
|
@@ -99,7 +102,8 @@ class ASTVisitor(VtlVisitor):
|
|
|
99
102
|
|
|
100
103
|
right_node = Expr().visitExpr(ctx_list[2])
|
|
101
104
|
|
|
102
|
-
|
|
105
|
+
token_info = extract_token_info(ctx)
|
|
106
|
+
assignment_node = Assignment(left=left_node, op=op_node, right=right_node, **token_info)
|
|
103
107
|
return assignment_node
|
|
104
108
|
|
|
105
109
|
# | varID PUT_SYMBOL expr # persistAssignment
|
|
@@ -114,7 +118,10 @@ class ASTVisitor(VtlVisitor):
|
|
|
114
118
|
|
|
115
119
|
right_node = Expr().visitExpr(ctx_list[2])
|
|
116
120
|
|
|
117
|
-
|
|
121
|
+
token_info = extract_token_info(ctx)
|
|
122
|
+
persistent_assignment_node = PersistentAssignment(
|
|
123
|
+
left=left_node, op=op_node, right=right_node, **token_info
|
|
124
|
+
)
|
|
118
125
|
return persistent_assignment_node
|
|
119
126
|
|
|
120
127
|
"""______________________________________________________________________________________
|
|
@@ -167,8 +174,14 @@ class ASTVisitor(VtlVisitor):
|
|
|
167
174
|
else:
|
|
168
175
|
return_node = return_[0]
|
|
169
176
|
|
|
177
|
+
token_info = extract_token_info(ctx)
|
|
178
|
+
|
|
170
179
|
return Operator(
|
|
171
|
-
op=operator,
|
|
180
|
+
op=operator,
|
|
181
|
+
parameters=parameters,
|
|
182
|
+
output_type=return_node,
|
|
183
|
+
expression=expr,
|
|
184
|
+
**token_info,
|
|
172
185
|
)
|
|
173
186
|
|
|
174
187
|
"""
|
|
@@ -189,11 +202,14 @@ class ASTVisitor(VtlVisitor):
|
|
|
189
202
|
signature_type, ruleset_elements = self.visitRulesetSignature(ctx_list[5])
|
|
190
203
|
ruleset_rules = self.visitRuleClauseDatapoint(ctx_list[8])
|
|
191
204
|
|
|
205
|
+
token_info = extract_token_info(ctx)
|
|
206
|
+
|
|
192
207
|
return DPRuleset(
|
|
193
208
|
name=ruleset_name,
|
|
194
209
|
params=ruleset_elements,
|
|
195
210
|
rules=ruleset_rules,
|
|
196
211
|
signature_type=signature_type,
|
|
212
|
+
**token_info,
|
|
197
213
|
)
|
|
198
214
|
|
|
199
215
|
def visitRulesetSignature(self, ctx: Parser.RulesetSignatureContext):
|
|
@@ -209,6 +225,7 @@ class ASTVisitor(VtlVisitor):
|
|
|
209
225
|
if isinstance(value_domain, TerminalNodeImpl)
|
|
210
226
|
and value_domain.getSymbol().type == Parser.VALUE_DOMAIN
|
|
211
227
|
]
|
|
228
|
+
kind = ""
|
|
212
229
|
if len(value_domains) != 0:
|
|
213
230
|
kind = "ValuedomainID"
|
|
214
231
|
|
|
@@ -269,7 +286,10 @@ class ASTVisitor(VtlVisitor):
|
|
|
269
286
|
]
|
|
270
287
|
|
|
271
288
|
if len(when) != 0:
|
|
272
|
-
|
|
289
|
+
token_info = extract_token_info(when[0].getSymbol())
|
|
290
|
+
rule_node = HRBinOp(
|
|
291
|
+
left=expr_node[0], op=when[0].getSymbol().text, right=expr_node[1], **token_info
|
|
292
|
+
)
|
|
273
293
|
|
|
274
294
|
else:
|
|
275
295
|
rule_node = expr_node[0]
|
|
@@ -287,7 +307,10 @@ class ASTVisitor(VtlVisitor):
|
|
|
287
307
|
]
|
|
288
308
|
er_level = None if len(er_level) == 0 else er_level[0]
|
|
289
309
|
|
|
290
|
-
|
|
310
|
+
token_info = extract_token_info(ctx)
|
|
311
|
+
return DPRule(
|
|
312
|
+
name=rule_name, rule=rule_node, erCode=er_code, erLevel=er_level, **token_info
|
|
313
|
+
)
|
|
291
314
|
|
|
292
315
|
def visitParameterItem(self, ctx: Parser.ParameterItemContext):
|
|
293
316
|
"""
|
|
@@ -314,7 +337,10 @@ class ASTVisitor(VtlVisitor):
|
|
|
314
337
|
|
|
315
338
|
if isinstance(argument_type, (Dataset, Component, Scalar)):
|
|
316
339
|
argument_type.name = argument_name.value
|
|
317
|
-
|
|
340
|
+
token_info = extract_token_info(ctx)
|
|
341
|
+
return Argument(
|
|
342
|
+
name=argument_name.value, type_=argument_type, default=argument_default, **token_info
|
|
343
|
+
)
|
|
318
344
|
|
|
319
345
|
"""
|
|
320
346
|
-----------------------------------
|
|
@@ -342,11 +368,14 @@ class ASTVisitor(VtlVisitor):
|
|
|
342
368
|
if len(ruleset_rules) == 0:
|
|
343
369
|
raise Exception(f"No rules found for the ruleset {ruleset_name}")
|
|
344
370
|
|
|
371
|
+
token_info = extract_token_info(ctx)
|
|
372
|
+
|
|
345
373
|
return HRuleset(
|
|
346
374
|
signature_type=signature_type,
|
|
347
375
|
name=ruleset_name,
|
|
348
376
|
element=ruleset_elements,
|
|
349
377
|
rules=ruleset_rules,
|
|
378
|
+
**token_info,
|
|
350
379
|
)
|
|
351
380
|
|
|
352
381
|
# TODO Add support for value Domains.
|
|
@@ -379,18 +408,24 @@ class ASTVisitor(VtlVisitor):
|
|
|
379
408
|
and identifier.getSymbol().type == Parser.IDENTIFIER
|
|
380
409
|
][0]
|
|
381
410
|
|
|
411
|
+
token_info = extract_token_info(ctx)
|
|
382
412
|
if conditions:
|
|
383
413
|
identifiers_list = [
|
|
384
414
|
DefIdentifier(
|
|
385
415
|
value=elto.alias if getattr(elto, "alias", None) else elto.value,
|
|
386
416
|
kind=kind,
|
|
417
|
+
**token_info,
|
|
387
418
|
)
|
|
388
419
|
for elto in conditions[0]
|
|
389
420
|
]
|
|
390
|
-
identifiers_list.append(
|
|
421
|
+
identifiers_list.append(
|
|
422
|
+
DefIdentifier(value=dataset.getSymbol().text, kind=kind, **token_info)
|
|
423
|
+
)
|
|
391
424
|
return signature_type, identifiers_list
|
|
392
425
|
else:
|
|
393
|
-
return signature_type, DefIdentifier(
|
|
426
|
+
return signature_type, DefIdentifier(
|
|
427
|
+
value=dataset.getSymbol().text, kind=kind, **token_info
|
|
428
|
+
)
|
|
394
429
|
|
|
395
430
|
# TODO Support for valueDomainSignature.
|
|
396
431
|
def visitValueDomainSignature(self, ctx: Parser.ValueDomainSignatureContext):
|
|
@@ -453,7 +488,9 @@ class ASTVisitor(VtlVisitor):
|
|
|
453
488
|
]
|
|
454
489
|
er_level = None if len(er_level) == 0 else er_level[0]
|
|
455
490
|
|
|
456
|
-
|
|
491
|
+
token_info = extract_token_info(ctx)
|
|
492
|
+
|
|
493
|
+
return HRule(name=rule_name, rule=rule_node, erCode=er_code, erLevel=er_level, **token_info)
|
|
457
494
|
|
|
458
495
|
def visitCodeItemRelation(self, ctx: Parser.CodeItemRelationContext):
|
|
459
496
|
"""
|
|
@@ -470,22 +507,29 @@ class ASTVisitor(VtlVisitor):
|
|
|
470
507
|
when = ctx_list[0].getSymbol().text
|
|
471
508
|
vd_value = Terminals().visitValueDomainValue(ctx_list[3])
|
|
472
509
|
op = Terminals().visitComparisonOperand(ctx_list[4])
|
|
510
|
+
token_info_value = extract_token_info(ctx_list[3])
|
|
511
|
+
token_info_op = extract_token_info(ctx_list[4])
|
|
473
512
|
else:
|
|
474
513
|
vd_value = Terminals().visitValueDomainValue(ctx_list[0])
|
|
475
514
|
op = Terminals().visitComparisonOperand(ctx_list[1])
|
|
515
|
+
token_info_value = extract_token_info(ctx_list[0])
|
|
516
|
+
token_info_op = extract_token_info(ctx_list[1])
|
|
476
517
|
|
|
477
518
|
rule_node = HRBinOp(
|
|
478
|
-
left=DefIdentifier(value=vd_value, kind="CodeItemID"
|
|
519
|
+
left=DefIdentifier(value=vd_value, kind="CodeItemID", **token_info_value),
|
|
520
|
+
op=op,
|
|
521
|
+
right=None,
|
|
522
|
+
**token_info_op,
|
|
479
523
|
)
|
|
480
524
|
items = [
|
|
481
525
|
item for item in ctx_list if isinstance(item, Parser.CodeItemRelationClauseContext)
|
|
482
526
|
]
|
|
483
|
-
|
|
527
|
+
token_info = extract_token_info(items[0])
|
|
484
528
|
# Means that no concatenations of operations is needed for that rule.
|
|
485
529
|
if len(items) == 1:
|
|
486
530
|
cir_node = self.visitCodeItemRelationClause(items[0])
|
|
487
531
|
if isinstance(cir_node, HRBinOp):
|
|
488
|
-
rule_node.right = HRUnOp(op=cir_node.op, operand=cir_node.right)
|
|
532
|
+
rule_node.right = HRUnOp(op=cir_node.op, operand=cir_node.right, **token_info)
|
|
489
533
|
|
|
490
534
|
elif isinstance(cir_node, DefIdentifier):
|
|
491
535
|
rule_node.right = cir_node
|
|
@@ -494,7 +538,9 @@ class ASTVisitor(VtlVisitor):
|
|
|
494
538
|
else:
|
|
495
539
|
previous_node = self.visitCodeItemRelationClause(items[0])
|
|
496
540
|
if isinstance(previous_node, HRBinOp):
|
|
497
|
-
previous_node = HRUnOp(
|
|
541
|
+
previous_node = HRUnOp(
|
|
542
|
+
op=previous_node.op, operand=previous_node.right, **token_info
|
|
543
|
+
)
|
|
498
544
|
|
|
499
545
|
for item in items[1:]:
|
|
500
546
|
item_node = self.visitCodeItemRelationClause(item)
|
|
@@ -506,7 +552,8 @@ class ASTVisitor(VtlVisitor):
|
|
|
506
552
|
|
|
507
553
|
if when is not None:
|
|
508
554
|
expr_node = ExprComp().visitExprComponent(ctx_list[1])
|
|
509
|
-
|
|
555
|
+
token_when_info = extract_token_info(ctx_list[1])
|
|
556
|
+
rule_node = HRBinOp(left=expr_node, op=when, right=rule_node, **token_when_info)
|
|
510
557
|
|
|
511
558
|
return rule_node
|
|
512
559
|
|
|
@@ -531,14 +578,20 @@ class ASTVisitor(VtlVisitor):
|
|
|
531
578
|
op = ctx_list[0].getSymbol().text
|
|
532
579
|
value = Terminals().visitValueDomainValue(ctx_list[1])
|
|
533
580
|
|
|
534
|
-
code_item = DefIdentifier(
|
|
581
|
+
code_item = DefIdentifier(
|
|
582
|
+
value=value, kind="CodeItemID", **extract_token_info(ctx_list[1])
|
|
583
|
+
)
|
|
535
584
|
if right_condition:
|
|
536
585
|
code_item._right_condition = right_condition[0]
|
|
537
586
|
|
|
538
|
-
return HRBinOp(
|
|
587
|
+
return HRBinOp(
|
|
588
|
+
left=None, op=op, right=code_item, **extract_token_info(ctx_list[0].getSymbol())
|
|
589
|
+
)
|
|
539
590
|
else:
|
|
540
591
|
value = Terminals().visitValueDomainValue(ctx_list[0])
|
|
541
|
-
code_item = DefIdentifier(
|
|
592
|
+
code_item = DefIdentifier(
|
|
593
|
+
value=value, kind="CodeItemID", **extract_token_info(ctx_list[0])
|
|
594
|
+
)
|
|
542
595
|
if right_condition:
|
|
543
596
|
code_item._right_condition = right_condition[0]
|
|
544
597
|
|