pydpm_xl 0.1.39rc25__tar.gz → 0.1.39rc26__tar.gz

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 (102) hide show
  1. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/PKG-INFO +1 -1
  2. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/ast_serialization.py +25 -46
  3. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/__init__.py +1 -1
  4. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pydpm_xl.egg-info/PKG-INFO +1 -1
  5. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pyproject.toml +2 -2
  6. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/LICENSE +0 -0
  7. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/README.md +0 -0
  8. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/ASTConstructor.py +0 -0
  9. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/ASTObjects.py +0 -0
  10. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/ASTTemplate.py +0 -0
  11. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/ASTVisitor.py +0 -0
  12. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/MLGeneration.py +0 -0
  13. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/ModuleAnalyzer.py +0 -0
  14. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/ModuleDependencies.py +0 -0
  15. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/WhereClauseChecker.py +0 -0
  16. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/__init__.py +0 -0
  17. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/AST/check_operands.py +0 -0
  18. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/DataTypes/ScalarTypes.py +0 -0
  19. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/DataTypes/TimeClasses.py +0 -0
  20. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/DataTypes/TypePromotion.py +0 -0
  21. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/DataTypes/__init__.py +0 -0
  22. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Exceptions/__init__.py +0 -0
  23. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Exceptions/exceptions.py +0 -0
  24. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Exceptions/messages.py +0 -0
  25. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/OperationScopes/OperationScopeService.py +0 -0
  26. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/OperationScopes/__init__.py +0 -0
  27. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/AggregateOperators.py +0 -0
  28. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/BooleanOperators.py +0 -0
  29. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/ClauseOperators.py +0 -0
  30. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/ComparisonOperators.py +0 -0
  31. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/ConditionalOperators.py +0 -0
  32. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/NumericOperators.py +0 -0
  33. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/Operator.py +0 -0
  34. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/StringOperators.py +0 -0
  35. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/TimeOperators.py +0 -0
  36. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Operators/__init__.py +0 -0
  37. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/ValidationsGenerationUtils.py +0 -0
  38. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/__init__.py +0 -0
  39. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/operands_mapping.py +0 -0
  40. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/operator_mapping.py +0 -0
  41. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/tokens.py +0 -0
  42. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/Utils/utils.py +0 -0
  43. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/ValidationsGeneration/PropertiesConstraintsProcessor.py +0 -0
  44. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/ValidationsGeneration/Utils.py +0 -0
  45. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/ValidationsGeneration/VariantsProcessor.py +0 -0
  46. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/ValidationsGeneration/__init__.py +0 -0
  47. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/ValidationsGeneration/auxiliary_functions.py +0 -0
  48. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/__init__.py +0 -0
  49. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/ast_generator.py +0 -0
  50. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/complete_ast.py +0 -0
  51. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/data_dictionary.py +0 -0
  52. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/data_dictionary_validation.py +0 -0
  53. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/migration.py +0 -0
  54. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/operation_scopes.py +0 -0
  55. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/semantic.py +0 -0
  56. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/api/syntax.py +0 -0
  57. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/client.py +0 -0
  58. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/data_handlers.py +0 -0
  59. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/db_utils.py +0 -0
  60. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/__init__.py +0 -0
  61. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/__init__.py +0 -0
  62. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlLexer.interp +0 -0
  63. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlLexer.py +0 -0
  64. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlLexer.tokens +0 -0
  65. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlParser.interp +0 -0
  66. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlParser.py +0 -0
  67. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlParser.tokens +0 -0
  68. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlParserListener.py +0 -0
  69. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/dpm_xlParserVisitor.py +0 -0
  70. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dist/listeners.py +0 -0
  71. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dpm_xlLexer.g4 +0 -0
  72. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/grammar/dpm_xlParser.g4 +0 -0
  73. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/migration.py +0 -0
  74. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/models.py +0 -0
  75. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/semantics/DAG/DAGAnalyzer.py +0 -0
  76. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/semantics/DAG/__init__.py +0 -0
  77. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/semantics/SemanticAnalyzer.py +0 -0
  78. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/semantics/Symbols.py +0 -0
  79. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/semantics/__init__.py +0 -0
  80. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/data_types.sql +0 -0
  81. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/datapoints.sql +0 -0
  82. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/hierarchy_operand_reference.sql +0 -0
  83. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/hierarchy_preconditions.sql +0 -0
  84. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/hierarchy_variables.sql +0 -0
  85. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/hierarchy_variables_context.sql +0 -0
  86. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/key_components.sql +0 -0
  87. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/module_from_table.sql +0 -0
  88. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/open_keys.sql +0 -0
  89. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/operation_info.sql +0 -0
  90. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/operation_list.sql +0 -0
  91. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/operations_versions_from_module_version.sql +0 -0
  92. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/precondition_info.sql +0 -0
  93. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/report_type_operand_reference_info.sql +0 -0
  94. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/subcategory_info.sql +0 -0
  95. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/py_dpm/views/table_info.sql +0 -0
  96. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pydpm_xl.egg-info/SOURCES.txt +0 -0
  97. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pydpm_xl.egg-info/dependency_links.txt +0 -0
  98. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pydpm_xl.egg-info/entry_points.txt +0 -0
  99. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pydpm_xl.egg-info/requires.txt +0 -0
  100. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/pydpm_xl.egg-info/top_level.txt +0 -0
  101. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/setup.cfg +0 -0
  102. {pydpm_xl-0.1.39rc25 → pydpm_xl-0.1.39rc26}/tests/test_semantic_release.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydpm_xl
3
- Version: 0.1.39rc25
3
+ Version: 0.1.39rc26
4
4
  Summary: Python library for DPM-XL data processing and analysis
5
5
  Author-email: "MeaningfulData S.L." <info@meaningfuldata.eu>
6
6
  License: GPL-3.0-or-later
@@ -240,48 +240,29 @@ class ASTToJSONVisitor(NodeVisitor):
240
240
  if 'cell_id' in record and record['cell_id'] is not None:
241
241
  transformed_record['operand_reference_id'] = int(record['cell_id'])
242
242
 
243
- # Check if data type is scalar (no x/y/z coordinates)
244
- # Scalar types: b (boolean), s (string), e (enumeration/item)
245
- # Non-scalar types: i, r, m, p (integer, decimal, monetary, percentage)
246
- data_type = record.get('data_type', '')
247
- is_scalar_type = data_type in ['b', 's', 'e']
248
-
249
243
  column_code = record.get('column_code', '')
250
244
  sheet_code = record.get('sheet_code', '')
251
245
 
252
- # Add x/y/z coordinates for non-scalar types only
253
- if not is_scalar_type:
254
- transformed_record['x'] = x_index
255
-
256
- # Find y coordinate based on column position in context
257
- y_index = 1 # default
258
- if context_cols and column_code in context_cols:
259
- y_index = context_cols.index(column_code) + 1
260
- transformed_record['y'] = y_index
261
-
262
- # Add z coordinate if sheet data exists
263
- if sheet_code:
264
- # Find z coordinate based on sheet position in context
265
- z_index = 1 # default
266
- if context_sheets and sheet_code in context_sheets:
267
- z_index = context_sheets.index(sheet_code) + 1
268
- transformed_record['z'] = z_index
269
-
270
- # Note: column and row are at VarID level, not in data entries
271
-
272
- # Add additional fields required by ADAM engine
273
- # CRITICAL: data_type determines how the engine processes values
274
- if 'data_type' in record and record['data_type'] is not None:
275
- transformed_record['data_type'] = record['data_type']
276
-
277
- # Add metadata fields (cell_code, table_code, table_vid)
278
- # NOTE: row, column, sheet are NOT included in data - they're at VarID level
279
- if 'cell_code' in record and record['cell_code'] is not None:
280
- transformed_record['cell_code'] = record['cell_code']
281
- if 'table_code' in record and record['table_code'] is not None:
282
- transformed_record['table_code'] = record['table_code']
283
- if 'table_vid' in record and record['table_vid'] is not None:
284
- transformed_record['table_vid'] = int(record['table_vid'])
246
+ # Add x/y/z coordinates for ALL data types
247
+ # Coordinates are added unconditionally, then common ones are removed later
248
+ transformed_record['x'] = x_index
249
+
250
+ # Find y coordinate based on column position in context
251
+ y_index = 1 # default
252
+ if context_cols and column_code in context_cols:
253
+ y_index = context_cols.index(column_code) + 1
254
+ transformed_record['y'] = y_index
255
+
256
+ # Add z coordinate if sheet data exists
257
+ if sheet_code:
258
+ # Find z coordinate based on sheet position in context
259
+ z_index = 1 # default
260
+ if context_sheets and sheet_code in context_sheets:
261
+ z_index = context_sheets.index(sheet_code) + 1
262
+ transformed_record['z'] = z_index
263
+
264
+ # NOTE: data_type, cell_code, table_code, table_vid are NOT included
265
+ # in data entries - working fixtures don't have these fields
285
266
 
286
267
  transformed_data.append(transformed_record)
287
268
 
@@ -319,19 +300,17 @@ class ASTToJSONVisitor(NodeVisitor):
319
300
  'z': 'sheet'
320
301
  }
321
302
 
322
- # Add dimension codes to each data entry
323
- # IMPORTANT: adam-engine requires BOTH row AND column in every data item
324
- # We add all dimension codes (row, column, sheet) when they exist in the original record
325
- # We need to match each transformed record back to its original record
303
+ # Add dimension codes only for VARIABLE coordinates
304
+ # Working fixtures show dimension codes are only included when that dimension varies
305
+ # Example: {c*, s*} with fixed row has y/column, z/sheet but NO x/row
326
306
  record_index = 0
327
307
  for x_index, row_code in enumerate(rows, 1):
328
308
  for original_record in entries_by_row[row_code]:
329
309
  if record_index < len(transformed_data):
330
310
  transformed_record = transformed_data[record_index]
331
311
 
332
- # Add ALL dimension codes (row, column, sheet) to every data item
333
- # This is required by adam-engine even when the coordinate is common
334
- for coord in ['x', 'y', 'z']:
312
+ # Only add dimension codes for VARIABLE coordinates
313
+ for coord in variable_coords:
335
314
  dimension_field = coord_to_dimension[coord]
336
315
  output_field = coord_to_field[coord]
337
316
 
@@ -41,7 +41,7 @@ Available packages:
41
41
  - pydpm.api: Main APIs for migration, syntax, and semantic analysis
42
42
  """
43
43
 
44
- __version__ = "0.1.39rc25"
44
+ __version__ = "0.1.39rc26"
45
45
  __author__ = "MeaningfulData S.L."
46
46
  __email__ = "info@meaningfuldata.eu"
47
47
  __license__ = "GPL-3.0-or-later"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydpm_xl
3
- Version: 0.1.39rc25
3
+ Version: 0.1.39rc26
4
4
  Summary: Python library for DPM-XL data processing and analysis
5
5
  Author-email: "MeaningfulData S.L." <info@meaningfuldata.eu>
6
6
  License: GPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pydpm_xl"
3
- version = "0.1.39rc25"
3
+ version = "0.1.39rc26"
4
4
  description = "Python library for DPM-XL data processing and analysis"
5
5
  authors = [
6
6
  {name = "MeaningfulData S.L.", email = "info@meaningfuldata.eu"}
@@ -52,7 +52,7 @@ exclude = []
52
52
 
53
53
  [tool.poetry]
54
54
  name = "pydpm_xl"
55
- version = "0.1.39rc25"
55
+ version = "0.1.39rc26"
56
56
  description = "Python library for DPM-XL data processing and analysis"
57
57
  authors = ["MeaningfulData S.L. <info@meaningfuldata.eu>"]
58
58
  readme = "README.md"
File without changes
File without changes
File without changes