pydpm_xl 0.1.39rc32__py3-none-any.whl → 0.2.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 (123) hide show
  1. py_dpm/__init__.py +1 -1
  2. py_dpm/api/__init__.py +58 -189
  3. py_dpm/api/dpm/__init__.py +20 -0
  4. py_dpm/api/{data_dictionary.py → dpm/data_dictionary.py} +903 -984
  5. py_dpm/api/dpm/explorer.py +236 -0
  6. py_dpm/api/dpm/hierarchical_queries.py +142 -0
  7. py_dpm/api/{migration.py → dpm/migration.py} +16 -19
  8. py_dpm/api/{operation_scopes.py → dpm/operation_scopes.py} +319 -267
  9. py_dpm/api/dpm_xl/__init__.py +25 -0
  10. py_dpm/api/{ast_generator.py → dpm_xl/ast_generator.py} +3 -3
  11. py_dpm/api/{complete_ast.py → dpm_xl/complete_ast.py} +191 -167
  12. py_dpm/api/dpm_xl/semantic.py +354 -0
  13. py_dpm/api/{syntax.py → dpm_xl/syntax.py} +6 -5
  14. py_dpm/api/explorer.py +4 -0
  15. py_dpm/api/semantic.py +30 -306
  16. py_dpm/cli/__init__.py +9 -0
  17. py_dpm/{client.py → cli/main.py} +8 -8
  18. py_dpm/dpm/__init__.py +11 -0
  19. py_dpm/{models.py → dpm/models.py} +112 -88
  20. py_dpm/dpm/queries/base.py +100 -0
  21. py_dpm/dpm/queries/basic_objects.py +33 -0
  22. py_dpm/dpm/queries/explorer_queries.py +352 -0
  23. py_dpm/dpm/queries/filters.py +139 -0
  24. py_dpm/dpm/queries/glossary.py +45 -0
  25. py_dpm/dpm/queries/hierarchical_queries.py +838 -0
  26. py_dpm/dpm/queries/tables.py +133 -0
  27. py_dpm/dpm/utils.py +356 -0
  28. py_dpm/dpm_xl/__init__.py +8 -0
  29. py_dpm/dpm_xl/ast/__init__.py +14 -0
  30. py_dpm/{AST/ASTConstructor.py → dpm_xl/ast/constructor.py} +6 -6
  31. py_dpm/{AST/MLGeneration.py → dpm_xl/ast/ml_generation.py} +137 -87
  32. py_dpm/{AST/ModuleAnalyzer.py → dpm_xl/ast/module_analyzer.py} +7 -7
  33. py_dpm/{AST/ModuleDependencies.py → dpm_xl/ast/module_dependencies.py} +56 -41
  34. py_dpm/{AST/ASTObjects.py → dpm_xl/ast/nodes.py} +1 -1
  35. py_dpm/{AST/check_operands.py → dpm_xl/ast/operands.py} +16 -13
  36. py_dpm/{AST/ASTTemplate.py → dpm_xl/ast/template.py} +2 -2
  37. py_dpm/{AST/WhereClauseChecker.py → dpm_xl/ast/where_clause.py} +2 -2
  38. py_dpm/dpm_xl/grammar/__init__.py +18 -0
  39. py_dpm/dpm_xl/operators/__init__.py +19 -0
  40. py_dpm/{Operators/AggregateOperators.py → dpm_xl/operators/aggregate.py} +7 -7
  41. py_dpm/{Operators/NumericOperators.py → dpm_xl/operators/arithmetic.py} +6 -6
  42. py_dpm/{Operators/Operator.py → dpm_xl/operators/base.py} +5 -5
  43. py_dpm/{Operators/BooleanOperators.py → dpm_xl/operators/boolean.py} +5 -5
  44. py_dpm/{Operators/ClauseOperators.py → dpm_xl/operators/clause.py} +8 -8
  45. py_dpm/{Operators/ComparisonOperators.py → dpm_xl/operators/comparison.py} +5 -5
  46. py_dpm/{Operators/ConditionalOperators.py → dpm_xl/operators/conditional.py} +7 -7
  47. py_dpm/{Operators/StringOperators.py → dpm_xl/operators/string.py} +5 -5
  48. py_dpm/{Operators/TimeOperators.py → dpm_xl/operators/time.py} +6 -6
  49. py_dpm/{semantics/SemanticAnalyzer.py → dpm_xl/semantic_analyzer.py} +168 -68
  50. py_dpm/{semantics/Symbols.py → dpm_xl/symbols.py} +3 -3
  51. py_dpm/dpm_xl/types/__init__.py +13 -0
  52. py_dpm/{DataTypes/TypePromotion.py → dpm_xl/types/promotion.py} +2 -2
  53. py_dpm/{DataTypes/ScalarTypes.py → dpm_xl/types/scalar.py} +2 -2
  54. py_dpm/dpm_xl/utils/__init__.py +14 -0
  55. py_dpm/{data_handlers.py → dpm_xl/utils/data_handlers.py} +2 -2
  56. py_dpm/{Utils → dpm_xl/utils}/operands_mapping.py +1 -1
  57. py_dpm/{Utils → dpm_xl/utils}/operator_mapping.py +8 -8
  58. py_dpm/{OperationScopes/OperationScopeService.py → dpm_xl/utils/scopes_calculator.py} +148 -58
  59. py_dpm/{Utils/ast_serialization.py → dpm_xl/utils/serialization.py} +2 -2
  60. py_dpm/dpm_xl/validation/__init__.py +12 -0
  61. py_dpm/{Utils/ValidationsGenerationUtils.py → dpm_xl/validation/generation_utils.py} +2 -3
  62. py_dpm/{ValidationsGeneration/PropertiesConstraintsProcessor.py → dpm_xl/validation/property_constraints.py} +56 -21
  63. py_dpm/{ValidationsGeneration/auxiliary_functions.py → dpm_xl/validation/utils.py} +2 -2
  64. py_dpm/{ValidationsGeneration/VariantsProcessor.py → dpm_xl/validation/variants.py} +149 -55
  65. py_dpm/exceptions/__init__.py +23 -0
  66. py_dpm/{Exceptions → exceptions}/exceptions.py +7 -2
  67. pydpm_xl-0.2.0.dist-info/METADATA +278 -0
  68. pydpm_xl-0.2.0.dist-info/RECORD +88 -0
  69. pydpm_xl-0.2.0.dist-info/entry_points.txt +2 -0
  70. py_dpm/Exceptions/__init__.py +0 -0
  71. py_dpm/OperationScopes/__init__.py +0 -0
  72. py_dpm/Operators/__init__.py +0 -0
  73. py_dpm/Utils/__init__.py +0 -0
  74. py_dpm/Utils/utils.py +0 -2
  75. py_dpm/ValidationsGeneration/Utils.py +0 -364
  76. py_dpm/ValidationsGeneration/__init__.py +0 -0
  77. py_dpm/api/data_dictionary_validation.py +0 -614
  78. py_dpm/db_utils.py +0 -221
  79. py_dpm/grammar/__init__.py +0 -0
  80. py_dpm/grammar/dist/__init__.py +0 -0
  81. py_dpm/grammar/dpm_xlLexer.g4 +0 -437
  82. py_dpm/grammar/dpm_xlParser.g4 +0 -263
  83. py_dpm/semantics/DAG/DAGAnalyzer.py +0 -158
  84. py_dpm/semantics/DAG/__init__.py +0 -0
  85. py_dpm/semantics/__init__.py +0 -0
  86. py_dpm/views/data_types.sql +0 -12
  87. py_dpm/views/datapoints.sql +0 -65
  88. py_dpm/views/hierarchy_operand_reference.sql +0 -11
  89. py_dpm/views/hierarchy_preconditions.sql +0 -13
  90. py_dpm/views/hierarchy_variables.sql +0 -26
  91. py_dpm/views/hierarchy_variables_context.sql +0 -14
  92. py_dpm/views/key_components.sql +0 -18
  93. py_dpm/views/module_from_table.sql +0 -11
  94. py_dpm/views/open_keys.sql +0 -13
  95. py_dpm/views/operation_info.sql +0 -27
  96. py_dpm/views/operation_list.sql +0 -18
  97. py_dpm/views/operations_versions_from_module_version.sql +0 -30
  98. py_dpm/views/precondition_info.sql +0 -17
  99. py_dpm/views/report_type_operand_reference_info.sql +0 -18
  100. py_dpm/views/subcategory_info.sql +0 -17
  101. py_dpm/views/table_info.sql +0 -19
  102. pydpm_xl-0.1.39rc32.dist-info/METADATA +0 -53
  103. pydpm_xl-0.1.39rc32.dist-info/RECORD +0 -96
  104. pydpm_xl-0.1.39rc32.dist-info/entry_points.txt +0 -2
  105. /py_dpm/{AST → cli/commands}/__init__.py +0 -0
  106. /py_dpm/{migration.py → dpm/migration.py} +0 -0
  107. /py_dpm/{AST/ASTVisitor.py → dpm_xl/ast/visitor.py} +0 -0
  108. /py_dpm/{DataTypes → dpm_xl/grammar/generated}/__init__.py +0 -0
  109. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlLexer.interp +0 -0
  110. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlLexer.py +0 -0
  111. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlLexer.tokens +0 -0
  112. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlParser.interp +0 -0
  113. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlParser.py +0 -0
  114. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlParser.tokens +0 -0
  115. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlParserListener.py +0 -0
  116. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/dpm_xlParserVisitor.py +0 -0
  117. /py_dpm/{grammar/dist → dpm_xl/grammar/generated}/listeners.py +0 -0
  118. /py_dpm/{DataTypes/TimeClasses.py → dpm_xl/types/time.py} +0 -0
  119. /py_dpm/{Utils → dpm_xl/utils}/tokens.py +0 -0
  120. /py_dpm/{Exceptions → exceptions}/messages.py +0 -0
  121. {pydpm_xl-0.1.39rc32.dist-info → pydpm_xl-0.2.0.dist-info}/WHEEL +0 -0
  122. {pydpm_xl-0.1.39rc32.dist-info → pydpm_xl-0.2.0.dist-info}/licenses/LICENSE +0 -0
  123. {pydpm_xl-0.1.39rc32.dist-info → pydpm_xl-0.2.0.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,20 @@
1
1
  from sqlalchemy.orm import Session
2
2
 
3
- from py_dpm.AST.ASTObjects import *
4
- from py_dpm.AST.ASTTemplate import ASTTemplate
5
- from py_dpm.Exceptions.exceptions import SemanticError
6
- from py_dpm.models import ItemCategory, OperandReference, OperandReferenceLocation, OperationNode, Operator, \
7
- OperatorArgument, \
8
- VariableVersion
9
- from py_dpm.OperationScopes.OperationScopeService import OperationScopeService
10
- from py_dpm.data_handlers import filter_all_data, generate_xyz
11
- from py_dpm.db_utils import get_session
3
+ from py_dpm.dpm_xl.ast.nodes import *
4
+ from py_dpm.dpm_xl.ast.template import ASTTemplate
5
+ from py_dpm.exceptions.exceptions import SemanticError
6
+ from py_dpm.dpm.models import (
7
+ ItemCategory,
8
+ OperandReference,
9
+ OperandReferenceLocation,
10
+ OperationNode,
11
+ Operator,
12
+ OperatorArgument,
13
+ VariableVersion,
14
+ )
15
+ from py_dpm.dpm_xl.utils.scopes_calculator import OperationScopeService
16
+ from py_dpm.dpm_xl.utils.data_handlers import filter_all_data, generate_xyz
17
+ from py_dpm.dpm.utils import get_session
12
18
 
13
19
 
14
20
  def gather_element(node, attribute):
@@ -39,12 +45,22 @@ class MLGeneration(ASTTemplate):
39
45
  :var df_arguments: All arguments present in the OperatorArgument table.
40
46
  """
41
47
 
42
- def __init__(self, session, data, op_version_id, release_id, operations_data=None, store=False):
48
+ def __init__(
49
+ self,
50
+ session,
51
+ data,
52
+ op_version_id,
53
+ release_id,
54
+ operations_data=None,
55
+ store=False,
56
+ ):
43
57
  super().__init__()
44
58
  self.session: Session = get_session() if store else session
45
59
  self.session_queries = get_session()
46
60
  self.data = data
47
- self.table_ids = [int(x) for x in data['table_vid'].unique()] if data is not None else []
61
+ self.table_ids = (
62
+ [int(x) for x in data["table_vid"].unique()] if data is not None else []
63
+ )
48
64
  self.op_version_id = op_version_id
49
65
  self.df_operators = Operator.get_operators(self.session)
50
66
  self.df_arguments = OperatorArgument.get_arguments(self.session)
@@ -62,13 +78,22 @@ class MLGeneration(ASTTemplate):
62
78
  self.store = store
63
79
 
64
80
  def populate_operation_scope(self):
65
- operation_scope_service = OperationScopeService(operation_version_id=self.op_version_id, session=self.session)
66
- self.existing_scopes, self.new_scopes = operation_scope_service.calculate_operation_scope(
67
- tables_vids=list(self.table_vid_dict.values()), precondition_items=self.precondition_items, only_last_release=False)
81
+ operation_scope_service = OperationScopeService(
82
+ operation_version_id=self.op_version_id, session=self.session
83
+ )
84
+ self.existing_scopes, self.new_scopes = (
85
+ operation_scope_service.calculate_operation_scope(
86
+ tables_vids=list(self.table_vid_dict.values()),
87
+ precondition_items=self.precondition_items,
88
+ only_last_release=False,
89
+ )
90
+ )
68
91
 
69
92
  def extract_operand_data(self, table, rows, cols, sheets):
70
93
  data_filtered = filter_all_data(self.data, table, rows, cols, sheets)
71
- data_filtered = data_filtered[['row_code', 'column_code', 'sheet_code', 'variable_id', 'cell_id']]
94
+ data_filtered = data_filtered[
95
+ ["row_code", "column_code", "sheet_code", "variable_id", "cell_id"]
96
+ ]
72
97
 
73
98
  list_xyz = generate_xyz(data_filtered)
74
99
 
@@ -88,16 +113,18 @@ class MLGeneration(ASTTemplate):
88
113
 
89
114
  if fallback_value is not None and isinstance(fallback_value, str):
90
115
  if len(fallback_value) == 0:
91
- fallback_value = '\"\"'
116
+ fallback_value = '""'
92
117
 
93
118
  operator_id = None
94
119
  if not getattr(node, "operator_name", None):
95
- operator = self.df_operators[self.df_operators['Symbol'] == op]['OperatorID'].values
120
+ operator = self.df_operators[self.df_operators["Symbol"] == op][
121
+ "OperatorID"
122
+ ].values
96
123
  else:
97
- operator = \
98
- self.df_operators[
99
- (self.df_operators['Symbol'] == op) & (self.df_operators['Name'] == getattr(node, "operator_name", None))][
100
- 'OperatorID'].values
124
+ operator = self.df_operators[
125
+ (self.df_operators["Symbol"] == op)
126
+ & (self.df_operators["Name"] == getattr(node, "operator_name", None))
127
+ ]["OperatorID"].values
101
128
 
102
129
  if len(operator) > 0:
103
130
  operator_id = int(operator[0])
@@ -105,9 +132,10 @@ class MLGeneration(ASTTemplate):
105
132
  argument_id = None
106
133
  if argument:
107
134
  parent_operator_id = parent_node.OperatorID
108
- argument_info = \
109
- self.df_arguments[(self.df_arguments['Name'] == argument) & (self.df_arguments['OperatorID'] == parent_operator_id)][
110
- 'ArgumentID'].values
135
+ argument_info = self.df_arguments[
136
+ (self.df_arguments["Name"] == argument)
137
+ & (self.df_arguments["OperatorID"] == parent_operator_id)
138
+ ]["ArgumentID"].values
111
139
  if len(argument_info) > 0:
112
140
  argument_id = int(argument_info[0])
113
141
 
@@ -119,7 +147,7 @@ class MLGeneration(ASTTemplate):
119
147
  UseIntervalArithmetics=interval,
120
148
  FallbackValue=fallback_value,
121
149
  IsLeaf=is_leaf,
122
- ArgumentID=argument_id
150
+ ArgumentID=argument_id,
123
151
  )
124
152
 
125
153
  self.session.add(operand_node)
@@ -172,16 +200,16 @@ class MLGeneration(ASTTemplate):
172
200
  self.visit(node.expression)
173
201
 
174
202
  def visit_BinOp(self, node: BinOp):
175
- if node.op == '+':
203
+ if node.op == "+":
176
204
  setattr(node, "operator_name", "Addition")
177
- elif node.op == '-':
205
+ elif node.op == "-":
178
206
  setattr(node, "operator_name", "Subtraction")
179
207
  operand_node = self.create_operation_node(node)
180
208
 
181
- if node.op == 'in':
209
+ if node.op == "in":
182
210
  setattr(node.left, "argument", "operand")
183
211
  setattr(node.right, "argument", "set")
184
- elif node.op == 'match':
212
+ elif node.op == "match":
185
213
  setattr(node.left, "argument", "operand")
186
214
  setattr(node.right, "argument", "pattern")
187
215
  else:
@@ -193,9 +221,9 @@ class MLGeneration(ASTTemplate):
193
221
  self.visit(node.right)
194
222
 
195
223
  def visit_UnaryOp(self, node: UnaryOp):
196
- if node.op == '+':
224
+ if node.op == "+":
197
225
  setattr(node, "operator_name", "Unary plus")
198
- elif node.op == '-':
226
+ elif node.op == "-":
199
227
  setattr(node, "operator_name", "Unary minus")
200
228
  operand_node = self.create_operation_node(node)
201
229
  setattr(node.operand, "argument", "operand")
@@ -217,10 +245,10 @@ class MLGeneration(ASTTemplate):
217
245
  self.visit(node.else_expr)
218
246
 
219
247
  def visit_WithExpression(self, node: WithExpression):
220
- parent = getattr(node, 'parent', None)
248
+ parent = getattr(node, "parent", None)
221
249
  if parent:
222
250
  setattr(node.expression, "parent", parent)
223
- setattr(node.expression, 'argument', getattr(node, 'argument', None))
251
+ setattr(node.expression, "argument", getattr(node, "argument", None))
224
252
  self.visit(node.expression)
225
253
 
226
254
  def visit_AggregationOp(self, node: AggregationOp):
@@ -242,17 +270,16 @@ class MLGeneration(ASTTemplate):
242
270
  setattr(element, "argument", "component")
243
271
  comp_node = self.create_operation_node(element, is_leaf=True)
244
272
  # property_id = ItemCategory.get_property_id_from_code(code=node.component, session=self.session)[0]
245
- if component in ('r', 'c', 's'):
246
- op_ref = OperandReference(
247
- op_node=comp_node,
248
- OperandReference=component
249
- )
273
+ if component in ("r", "c", "s"):
274
+ op_ref = OperandReference(op_node=comp_node, OperandReference=component)
250
275
  else:
251
- property_id = ItemCategory.get_property_id_from_code(code=component, session=self.session_queries)[0]
276
+ property_id = ItemCategory.get_property_id_from_code(
277
+ code=component, session=self.session_queries
278
+ )[0]
252
279
  op_ref = OperandReference(
253
280
  op_node=comp_node,
254
- OperandReference='property',
255
- PropertyID=property_id
281
+ OperandReference="property",
282
+ PropertyID=property_id,
256
283
  )
257
284
 
258
285
  self.session.add(op_ref)
@@ -295,7 +322,7 @@ class MLGeneration(ASTTemplate):
295
322
  shift_number_node = AST()
296
323
  setattr(shift_number_node, "parent", get_node)
297
324
  setattr(shift_number_node, "argument", "shift_number")
298
- setattr(shift_number_node, "scalar", getattr(node, 'shift_number', None))
325
+ setattr(shift_number_node, "scalar", getattr(node, "shift_number", None))
299
326
  self.create_operation_node(shift_number_node, is_leaf=True)
300
327
 
301
328
  # component
@@ -303,18 +330,21 @@ class MLGeneration(ASTTemplate):
303
330
  setattr(ast_element, "parent", get_node)
304
331
  setattr(ast_element, "argument", "dimension")
305
332
  setattr(ast_element, "source_reference", "property")
306
- operand_node = self.create_operation_node(ast_element, is_leaf=True) # TODO: Adapt to refPeriod
333
+ operand_node = self.create_operation_node(
334
+ ast_element, is_leaf=True
335
+ ) # TODO: Adapt to refPeriod
307
336
  if property_ref_period_mangement(node.component):
308
337
  op_ref = OperandReference(
309
- op_node=operand_node,
310
- OperandReference="refPeriod"
338
+ op_node=operand_node, OperandReference="refPeriod"
311
339
  )
312
340
  else:
313
- property_id = ItemCategory.get_property_id_from_code(code=node.component, session=self.session_queries)[0]
341
+ property_id = ItemCategory.get_property_id_from_code(
342
+ code=node.component, session=self.session_queries
343
+ )[0]
314
344
  op_ref = OperandReference(
315
345
  op_node=operand_node,
316
346
  OperandReference=getattr(ast_element, "source_reference"),
317
- PropertyID=property_id
347
+ PropertyID=property_id,
318
348
  )
319
349
  self.session.add(op_ref)
320
350
 
@@ -343,15 +373,16 @@ class MLGeneration(ASTTemplate):
343
373
  component_node = self.create_operation_node(element, is_leaf=True)
344
374
  if property_ref_period_mangement(node.component):
345
375
  op_ref = OperandReference(
346
- op_node=component_node,
347
- OperandReference="refPeriod"
376
+ op_node=component_node, OperandReference="refPeriod"
348
377
  )
349
378
  else:
350
- property_id = ItemCategory.get_property_id_from_code(code=node.component, session=self.session_queries)[0]
379
+ property_id = ItemCategory.get_property_id_from_code(
380
+ code=node.component, session=self.session_queries
381
+ )[0]
351
382
  op_ref = OperandReference(
352
383
  op_node=component_node,
353
384
  OperandReference=getattr(element, "source_reference"),
354
- PropertyID=property_id
385
+ PropertyID=property_id,
355
386
  )
356
387
  self.session.add(op_ref)
357
388
 
@@ -375,13 +406,15 @@ class MLGeneration(ASTTemplate):
375
406
  setattr(old_name, "argument", "old_name")
376
407
  setattr(old_name, "source_reference", "property")
377
408
  setattr(old_name, "scalar", node.old_name)
378
- old_property_id = ItemCategory.get_property_id_from_code(code=node.old_name, session=self.session_queries)[0]
409
+ old_property_id = ItemCategory.get_property_id_from_code(
410
+ code=node.old_name, session=self.session_queries
411
+ )[0]
379
412
  old_name_node = self.create_operation_node(old_name, is_leaf=True)
380
413
 
381
414
  old_operand_ref = OperandReference(
382
415
  op_node=old_name_node,
383
416
  OperandReference=getattr(old_name, "source_reference"),
384
- PropertyID=old_property_id
417
+ PropertyID=old_property_id,
385
418
  )
386
419
 
387
420
  self.session.add(old_operand_ref)
@@ -396,7 +429,7 @@ class MLGeneration(ASTTemplate):
396
429
  new_operand_ref = OperandReference(
397
430
  op_node=new_name_node,
398
431
  OperandReference=getattr(new_name, "source_reference"),
399
- PropertyID=old_property_id
432
+ PropertyID=old_property_id,
400
433
  )
401
434
  self.session.add(new_operand_ref)
402
435
 
@@ -415,14 +448,18 @@ class MLGeneration(ASTTemplate):
415
448
  def visit_PreconditionItem(self, node: PreconditionItem):
416
449
  operand_node = self.create_operation_node(node, is_leaf=True)
417
450
  operand_reference = "PreconditionItem" # "$_{}".format(node.value)
418
- precondition_var = VariableVersion.check_precondition(self.session, node.variable_code, self.release_id)
451
+ precondition_var = VariableVersion.check_precondition(
452
+ self.session, node.variable_code, self.release_id
453
+ )
419
454
  variable_id = None
420
455
  precondition_code = None
421
456
  if precondition_var:
422
457
  variable_id = precondition_var.VariableID
423
458
  precondition_code = precondition_var.Code
424
459
  else:
425
- preconditions_vars = VariableVersion.get_all_preconditions(self.session, self.release_id)
460
+ preconditions_vars = VariableVersion.get_all_preconditions(
461
+ self.session, self.release_id
462
+ )
426
463
  precondition_found = False
427
464
  for precondition in preconditions_vars:
428
465
  if precondition.Code in node.variable_code:
@@ -437,7 +474,7 @@ class MLGeneration(ASTTemplate):
437
474
  operand_ref = OperandReference(
438
475
  op_node=operand_node,
439
476
  OperandReference=operand_reference,
440
- VariableID=variable_id
477
+ VariableID=variable_id,
441
478
  )
442
479
 
443
480
  self.session.add(operand_ref)
@@ -447,7 +484,9 @@ class MLGeneration(ASTTemplate):
447
484
  setattr(node, "source_reference", "variable")
448
485
  op_node = self.create_operation_node(node, is_leaf=True)
449
486
  node_value = getattr(node, "value", getattr(node, "variable", None))
450
- variable_id = VariableVersion.get_VariableID(self.session, node_value, self.release_id)
487
+ variable_id = VariableVersion.get_VariableID(
488
+ self.session, node_value, self.release_id
489
+ )
451
490
  if variable_id:
452
491
  variable_id = variable_id[0]
453
492
  else:
@@ -455,7 +494,7 @@ class MLGeneration(ASTTemplate):
455
494
  operand_ref = OperandReference(
456
495
  op_node=op_node,
457
496
  OperandReference=getattr(node, "source_reference"),
458
- VariableID=variable_id
497
+ VariableID=variable_id,
459
498
  )
460
499
 
461
500
  self.session.add(operand_ref)
@@ -465,7 +504,9 @@ class MLGeneration(ASTTemplate):
465
504
 
466
505
  op_node = self.create_operation_node(node, is_leaf=True)
467
506
 
468
- data_xyz = self.extract_operand_data(node.table, node.rows, node.cols, node.sheets)
507
+ data_xyz = self.extract_operand_data(
508
+ node.table, node.rows, node.cols, node.sheets
509
+ )
469
510
 
470
511
  # Extracting data
471
512
  significant_rows = node.rows is not None and len(node.rows) >= 1
@@ -475,28 +516,32 @@ class MLGeneration(ASTTemplate):
475
516
  for e in data_xyz:
476
517
  operand_ref = OperandReference(
477
518
  op_node=op_node,
478
- x=e['x'] if significant_rows else None,
479
- y=e['y'] if significant_cols else None,
480
- z=e['z'] if significant_sheets else None,
519
+ x=e["x"] if significant_rows else None,
520
+ y=e["y"] if significant_cols else None,
521
+ z=e["z"] if significant_sheets else None,
481
522
  OperandReference=getattr(node, "source_reference"),
482
- VariableID=e['variable_id']
523
+ VariableID=e["variable_id"],
483
524
  )
484
525
 
485
526
  self.session.add(operand_ref)
486
527
 
487
528
  operand_ref_loc = OperandReferenceLocation(
488
529
  op_reference=operand_ref,
489
- CellID=e['cell_id'],
530
+ CellID=e["cell_id"],
490
531
  Table=node.table,
491
- Row=e['row_code'],
492
- column=e['column_code'],
493
- Sheet=e['sheet_code']
532
+ Row=e["row_code"],
533
+ column=e["column_code"],
534
+ Sheet=e["sheet_code"],
494
535
  )
495
536
 
496
537
  self.session.add(operand_ref_loc)
497
538
 
498
539
  if node.table not in self.table_vid_dict:
499
- table_vid = int(self.data[self.data['table_code'] == node.table]['table_vid'].unique()[0])
540
+ table_vid = int(
541
+ self.data[self.data["table_code"] == node.table][
542
+ "table_vid"
543
+ ].unique()[0]
544
+ )
500
545
  self.table_vid_dict[node.table] = table_vid
501
546
 
502
547
  if self.is_scripting:
@@ -509,11 +554,13 @@ class MLGeneration(ASTTemplate):
509
554
  def visit_Dimension(self, node: Dimension):
510
555
  setattr(node, "source_reference", "property")
511
556
  op_node = self.create_operation_node(node, is_leaf=True)
512
- property = ItemCategory.get_property_from_code(code=node.dimension_code, session=self.session_queries)
557
+ property = ItemCategory.get_property_from_code(
558
+ code=node.dimension_code, session=self.session_queries
559
+ )
513
560
  operand_ref = OperandReference(
514
561
  op_node=op_node,
515
562
  OperandReference=getattr(node, "source_reference"),
516
- PropertyID=property.ItemID
563
+ PropertyID=property.ItemID,
517
564
  )
518
565
  self.session.add(operand_ref)
519
566
 
@@ -529,7 +576,7 @@ class MLGeneration(ASTTemplate):
529
576
  operand_ref = OperandReference(
530
577
  op_node=op_node,
531
578
  OperandReference=getattr(node, "source_reference"),
532
- ItemID=item_id
579
+ ItemID=item_id,
533
580
  )
534
581
  self.session.add(operand_ref)
535
582
 
@@ -542,7 +589,7 @@ class MLGeneration(ASTTemplate):
542
589
  operand_ref = OperandReference(
543
590
  op_node=op_node,
544
591
  OperandReference=getattr(node, "source_reference"),
545
- ItemID=item_id
592
+ ItemID=item_id,
546
593
  )
547
594
  self.session.add(operand_ref)
548
595
 
@@ -552,14 +599,13 @@ class MLGeneration(ASTTemplate):
552
599
 
553
600
  op_version_id = self._get_op_version_id(node.operation_code)
554
601
 
555
- operand_ref = OperandReference(
556
- op_node=op_node,
557
- OperandReference=op_version_id
558
- )
602
+ operand_ref = OperandReference(op_node=op_node, OperandReference=op_version_id)
559
603
  self.session.add(operand_ref)
560
604
 
561
605
  def _get_op_version_id(self, operation_code):
562
- op_version_id = self.operations_data[self.operations_data['Code'] == operation_code]['OperationVID'].values[0]
606
+ op_version_id = self.operations_data[
607
+ self.operations_data["Code"] == operation_code
608
+ ]["OperationVID"].values[0]
563
609
  op_version_id = int(op_version_id)
564
610
  return op_version_id
565
611
 
@@ -572,16 +618,20 @@ class MLGeneration(ASTTemplate):
572
618
  def _add_table_vid_to_operation_tables(self, table_code):
573
619
  if self.op_version_id not in self.operation_tables:
574
620
  self.operation_tables[self.op_version_id] = []
575
- table_vid = int(self.data[self.data['table_code'] == table_code]['table_vid'].unique()[0])
621
+ table_vid = int(
622
+ self.data[self.data["table_code"] == table_code]["table_vid"].unique()[0]
623
+ )
576
624
  if table_vid not in self.operation_tables[self.op_version_id]:
577
625
  self.operation_tables[self.op_version_id].append(table_vid)
578
626
 
579
627
  def store_objects_as_json(self):
580
- operation_nodes = [o for o in self.session.new if isinstance(o, OperationNode) and not o.parent]
581
- self.result['operation_nodes'] = operation_nodes
582
- self.result['operation_scopes'] = {}
583
- self.result['operation_scopes']['new'] = self.new_scopes
584
- self.result['operation_scopes']['existing'] = self.existing_scopes
628
+ operation_nodes = [
629
+ o for o in self.session.new if isinstance(o, OperationNode) and not o.parent
630
+ ]
631
+ self.result["operation_nodes"] = operation_nodes
632
+ self.result["operation_scopes"] = {}
633
+ self.result["operation_scopes"]["new"] = self.new_scopes
634
+ self.result["operation_scopes"]["existing"] = self.existing_scopes
585
635
  self.session.expunge_all()
586
636
 
587
637
  def compare_ast(self, reference: OperationNode):
@@ -589,12 +639,12 @@ class MLGeneration(ASTTemplate):
589
639
  Compares the ML generated by the AST of the expression provided with the ML generated by the AST generated with the ML stored in the db.
590
640
  :return: True if the ASTs are equal, False otherwise.
591
641
  """
592
- op_nodes = self.result['operation_nodes']
642
+ op_nodes = self.result["operation_nodes"]
593
643
 
594
644
  if len(op_nodes) == 0:
595
645
  raise Exception("No AST Generated")
596
646
 
597
647
  if op_nodes[0] != reference:
598
- return False #is_same_ast = False
648
+ return False # is_same_ast = False
599
649
 
600
- return True #is_same_ast = True
650
+ return True # is_same_ast = True
@@ -1,8 +1,8 @@
1
- from py_dpm.AST.ASTObjects import Start, VarID, WithExpression
2
- from py_dpm.AST.ASTTemplate import ASTTemplate
3
- from py_dpm.models import ViewModules
4
- from py_dpm.Utils.operands_mapping import LabelHandler
5
- from py_dpm.Utils.tokens import CROSS_MODULE, INTRA_MODULE, REPEATED_INTRA_MODULE
1
+ from py_dpm.dpm_xl.ast.nodes import Start, VarID, WithExpression
2
+ from py_dpm.dpm_xl.ast.template import ASTTemplate
3
+ from py_dpm.dpm.models import ViewModules
4
+ from py_dpm.dpm_xl.utils.operands_mapping import LabelHandler
5
+ from py_dpm.dpm_xl.utils.tokens import CROSS_MODULE, INTRA_MODULE, REPEATED_INTRA_MODULE
6
6
 
7
7
 
8
8
  class ModuleAnalyzer(ASTTemplate):
@@ -25,7 +25,7 @@ class ModuleAnalyzer(ASTTemplate):
25
25
  unique_modules = []
26
26
 
27
27
  for operand_info in self.module_info.values():
28
- if operand_info == 'Module not found':
28
+ if operand_info == "Module not found":
29
29
  print(f"Module not found: {self.module_info}")
30
30
  return
31
31
  unique_modules += operand_info
@@ -58,7 +58,7 @@ class ModuleAnalyzer(ASTTemplate):
58
58
  if len(modules) > 0:
59
59
  self.module_info[self.new_label()] = modules
60
60
  else:
61
- self.module_info[self.new_label()] = 'Module not found'
61
+ self.module_info[self.new_label()] = "Module not found"
62
62
 
63
63
  def find_common_modules(self, unique_modules):
64
64
  common_modules = []