pysdmx 1.10.1__py3-none-any.whl → 1.11.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 (35) hide show
  1. pysdmx/__init__.py +1 -1
  2. pysdmx/api/fmr/maintenance.py +10 -5
  3. pysdmx/io/input_processor.py +4 -0
  4. pysdmx/io/json/fusion/messages/dsd.py +19 -14
  5. pysdmx/io/json/fusion/messages/msd.py +6 -9
  6. pysdmx/io/json/sdmxjson2/messages/core.py +12 -5
  7. pysdmx/io/json/sdmxjson2/messages/dsd.py +11 -17
  8. pysdmx/io/json/sdmxjson2/messages/msd.py +2 -5
  9. pysdmx/io/json/sdmxjson2/messages/report.py +7 -3
  10. pysdmx/io/json/sdmxjson2/messages/structure.py +7 -3
  11. pysdmx/io/json/sdmxjson2/reader/metadata.py +3 -3
  12. pysdmx/io/json/sdmxjson2/reader/structure.py +3 -3
  13. pysdmx/io/json/sdmxjson2/writer/_helper.py +118 -0
  14. pysdmx/io/json/sdmxjson2/writer/v2_0/__init__.py +1 -0
  15. pysdmx/io/json/sdmxjson2/writer/v2_0/metadata.py +33 -0
  16. pysdmx/io/json/sdmxjson2/writer/v2_0/structure.py +33 -0
  17. pysdmx/io/json/sdmxjson2/writer/v2_1/__init__.py +1 -0
  18. pysdmx/io/json/sdmxjson2/writer/v2_1/metadata.py +31 -0
  19. pysdmx/io/json/sdmxjson2/writer/v2_1/structure.py +33 -0
  20. pysdmx/io/reader.py +12 -3
  21. pysdmx/io/writer.py +13 -3
  22. pysdmx/io/xml/__ss_aux_reader.py +39 -17
  23. pysdmx/io/xml/__structure_aux_reader.py +221 -33
  24. pysdmx/io/xml/__structure_aux_writer.py +304 -5
  25. pysdmx/io/xml/__tokens.py +12 -0
  26. pysdmx/io/xml/__write_aux.py +9 -0
  27. pysdmx/io/xml/sdmx21/writer/generic.py +2 -2
  28. pysdmx/model/dataflow.py +2 -2
  29. pysdmx/toolkit/pd/_data_utils.py +1 -1
  30. {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/METADATA +7 -1
  31. {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/RECORD +33 -28
  32. {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/WHEEL +1 -1
  33. pysdmx/io/json/sdmxjson2/writer/metadata.py +0 -60
  34. pysdmx/io/json/sdmxjson2/writer/structure.py +0 -61
  35. {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -14,6 +14,7 @@ from pysdmx.io.xml.__tokens import (
14
14
  CL,
15
15
  CL_LOW,
16
16
  CLASS,
17
+ COMPONENT_MAP,
17
18
  CON,
18
19
  CON_ID,
19
20
  CONDITIONAL,
@@ -52,10 +53,12 @@ from pysdmx.io.xml.__tokens import (
52
53
  POSITION,
53
54
  PROV_AGREEMENT,
54
55
  REF,
56
+ REPRESENTATION_MAP,
55
57
  ROLE,
56
58
  RULE,
57
59
  RULE_SCHEME,
58
60
  STR_USAGE,
61
+ STRUCTURE_MAP,
59
62
  TELEPHONE,
60
63
  TEXT_FORMAT,
61
64
  TEXT_TYPE,
@@ -89,21 +92,30 @@ from pysdmx.io.xml.__write_aux import (
89
92
  from pysdmx.model import (
90
93
  AgencyScheme,
91
94
  Codelist,
95
+ ComponentMap,
92
96
  Concept,
93
97
  ConceptScheme,
94
98
  CustomType,
95
99
  CustomTypeScheme,
96
100
  DataType,
101
+ DatePatternMap,
97
102
  Facets,
103
+ FixedValueMap,
98
104
  Hierarchy,
105
+ ImplicitComponentMap,
106
+ MultiComponentMap,
107
+ MultiValueMap,
99
108
  NamePersonalisation,
100
109
  NamePersonalisationScheme,
110
+ RepresentationMap,
101
111
  Ruleset,
102
112
  RulesetScheme,
113
+ StructureMap,
103
114
  Transformation,
104
115
  TransformationScheme,
105
116
  UserDefinedOperator,
106
117
  UserDefinedOperatorScheme,
118
+ ValueMap,
107
119
  VtlCodelistMapping,
108
120
  VtlConceptMapping,
109
121
  VtlDataflowMapping,
@@ -173,6 +185,9 @@ STR_DICT_TYPE_LIST_21 = {
173
185
  ConceptScheme: "Concepts",
174
186
  DataStructureDefinition: "DataStructures",
175
187
  Dataflow: "Dataflows",
188
+ RepresentationMap: "RepresentationMaps",
189
+ StructureMap: "StructureMaps",
190
+ DatePatternMap: "DatePatternMaps",
176
191
  CustomTypeScheme: "CustomTypes",
177
192
  VtlMappingScheme: "VtlMappings",
178
193
  NamePersonalisationScheme: "NamePersonalisations",
@@ -189,6 +204,9 @@ STR_DICT_TYPE_LIST_30 = {
189
204
  ConceptScheme: "ConceptSchemes",
190
205
  DataStructureDefinition: "DataStructures",
191
206
  Dataflow: "Dataflows",
207
+ RepresentationMap: "RepresentationMaps",
208
+ StructureMap: "StructureMaps",
209
+ DatePatternMap: "DatePatternMaps",
192
210
  CustomTypeScheme: "CustomTypeSchemes",
193
211
  VtlMappingScheme: "VtlMappingSchemes",
194
212
  NamePersonalisationScheme: "NamePersonalisationSchemes",
@@ -564,10 +582,25 @@ def __write_attribute_relation( # noqa: C901
564
582
  f"{group_id}</{ABBR_STR}:{GROUP}>"
565
583
  )
566
584
  else:
567
- for comp_name in comps_to_relate:
568
- outfile += (
569
- f"{add_indent(indent)}<{ABBR_STR}:{DIM}>"
570
- f"{comp_name}</{ABBR_STR}:{DIM}>"
585
+ is_dimension = comps_to_relate[0] in dim_names
586
+ if is_dimension:
587
+ for comp_name in comps_to_relate:
588
+ outfile += (
589
+ f"{add_indent(indent)}<{ABBR_STR}:{DIM}>"
590
+ f"{comp_name}</{ABBR_STR}:{DIM}>"
591
+ )
592
+ else:
593
+ outfile += f"{add_indent(indent)}<{ABBR_STR}:Observation/>"
594
+ measure_relationship += (
595
+ f"{indent}<{ABBR_STR}:{MEASURE_RELATIONSHIP}>"
596
+ )
597
+ for comp_name in comps_to_relate:
598
+ measure_relationship += (
599
+ f"{add_indent(indent)}<{ABBR_STR}:{MSR}>"
600
+ f"{comp_name}</{ABBR_STR}:{MSR}>"
601
+ )
602
+ measure_relationship += (
603
+ f"{indent}</{ABBR_STR}:{MEASURE_RELATIONSHIP}>"
571
604
  )
572
605
 
573
606
  else:
@@ -675,8 +708,13 @@ def __write_concept_identity(
675
708
  ) -> str:
676
709
  if isinstance(identity, ItemReference):
677
710
  ref = identity
711
+ elif identity.urn is not None:
712
+ ref = parse_item_urn(identity.urn)
678
713
  else:
679
- ref = parse_item_urn(identity.urn) # type: ignore[arg-type]
714
+ raise Invalid(
715
+ f"Cannot select concept identity without URN. "
716
+ f"Concept id={identity.id!r}"
717
+ )
680
718
 
681
719
  outfile = f"{indent}<{ABBR_STR}:{CON_ID}>"
682
720
  if references_30:
@@ -841,12 +879,273 @@ def __write_prov_agreement(
841
879
  return outfile
842
880
 
843
881
 
882
+ def __write_value_map(
883
+ value_map: Union[ValueMap, MultiValueMap], indent: str
884
+ ) -> str:
885
+ """Writes a ValueMap or MultiValueMap (RepresentationMapping)."""
886
+ outfile = f"{indent}<{ABBR_STR}:RepresentationMapping>"
887
+
888
+ # MultiValueMap
889
+ if isinstance(value_map, MultiValueMap):
890
+ for s in value_map.source:
891
+ outfile += (
892
+ f"{add_indent(indent)}<{ABBR_STR}:SourceValue>"
893
+ f"{__escape_xml(str(s))}"
894
+ f"</{ABBR_STR}:SourceValue>"
895
+ )
896
+ for t in value_map.target:
897
+ outfile += (
898
+ f"{add_indent(indent)}<{ABBR_STR}:TargetValue>"
899
+ f"{__escape_xml(str(t))}"
900
+ f"</{ABBR_STR}:TargetValue>"
901
+ )
902
+ outfile += f"{indent}</{ABBR_STR}:RepresentationMapping>"
903
+ return outfile
904
+
905
+ # ValueMap
906
+ outfile += (
907
+ f"{add_indent(indent)}<{ABBR_STR}:SourceValue>"
908
+ f"{__escape_xml(str(value_map.source))}"
909
+ f"</{ABBR_STR}:SourceValue>"
910
+ )
911
+ outfile += (
912
+ f"{add_indent(indent)}<{ABBR_STR}:TargetValue>"
913
+ f"{__escape_xml(str(value_map.target))}"
914
+ f"</{ABBR_STR}:TargetValue>"
915
+ )
916
+ outfile += f"{indent}</{ABBR_STR}:RepresentationMapping>"
917
+ return outfile
918
+
919
+
920
+ def __write_multi_component_map(
921
+ comp_map: MultiComponentMap, indent: str
922
+ ) -> str:
923
+ """Writes a MultiComponentMap (1-n, n-1, n-n) to the XML file."""
924
+ outfile = f"{indent}<{ABBR_STR}:{COMPONENT_MAP}>"
925
+
926
+ for s in comp_map.source:
927
+ outfile += (
928
+ f"{add_indent(indent)}<{ABBR_STR}:Source>"
929
+ f"{__escape_xml(str(s))}"
930
+ f"</{ABBR_STR}:Source>"
931
+ )
932
+
933
+ for t in comp_map.target:
934
+ outfile += (
935
+ f"{add_indent(indent)}<{ABBR_STR}:Target>"
936
+ f"{__escape_xml(str(t))}"
937
+ f"</{ABBR_STR}:Target>"
938
+ )
939
+
940
+ outfile += (
941
+ f"{add_indent(indent)}<{ABBR_STR}:RepresentationMap>"
942
+ f"{__escape_xml(str(comp_map.values))}"
943
+ f"</{ABBR_STR}:RepresentationMap>"
944
+ )
945
+
946
+ outfile += f"{indent}</{ABBR_STR}:{COMPONENT_MAP}>"
947
+ return outfile
948
+
949
+
950
+ def __write_representation_map(
951
+ rep_map: RepresentationMap, indent: str, references_30: bool = False
952
+ ) -> str:
953
+ """Writes a RepresentationMap to the XML file."""
954
+ data = __write_maintainable(rep_map, indent, references_30)
955
+
956
+ label = f"{ABBR_STR}:{REPRESENTATION_MAP}"
957
+ attributes = data.get("Attributes") or ""
958
+ attributes = attributes.replace("'", '"')
959
+
960
+ outfile = f"{indent}<{label}{attributes}>"
961
+ outfile += __export_intern_data(data)
962
+
963
+ # Write Source and Target references
964
+ outfile += (
965
+ f"{add_indent(indent)}<{ABBR_STR}:SourceCodelist>"
966
+ f"{rep_map.source}"
967
+ f"</{ABBR_STR}:SourceCodelist>"
968
+ )
969
+ outfile += (
970
+ f"{add_indent(indent)}<{ABBR_STR}:TargetCodelist>"
971
+ f"{rep_map.target}"
972
+ f"</{ABBR_STR}:TargetCodelist>"
973
+ )
974
+
975
+ # Write ValueMaps
976
+ for value_map in rep_map.maps:
977
+ outfile += __write_value_map(value_map, add_indent(indent))
978
+
979
+ outfile += f"{indent}</{label}>"
980
+
981
+ return outfile
982
+
983
+
984
+ def __write_component_map(
985
+ comp_map: ComponentMap, indent: str, references_30: bool = False
986
+ ) -> str:
987
+ """Writes a ComponentMap to the XML file."""
988
+ outfile = f"{indent}<{ABBR_STR}:{COMPONENT_MAP}>"
989
+ outfile += (
990
+ f"{add_indent(indent)}<{ABBR_STR}:Source>"
991
+ f"{comp_map.source}"
992
+ f"</{ABBR_STR}:Source>"
993
+ )
994
+ outfile += (
995
+ f"{add_indent(indent)}<{ABBR_STR}:Target>"
996
+ f"{comp_map.target}"
997
+ f"</{ABBR_STR}:Target>"
998
+ )
999
+
1000
+ # Write the RepresentationMap reference
1001
+ outfile += (
1002
+ f"{add_indent(indent)}<{ABBR_STR}:RepresentationMap>"
1003
+ f"{comp_map.values}"
1004
+ f"</{ABBR_STR}:RepresentationMap>"
1005
+ )
1006
+
1007
+ outfile += f"{indent}</{ABBR_STR}:{COMPONENT_MAP}>"
1008
+ return outfile
1009
+
1010
+
1011
+ def __write_implicit_component_map(
1012
+ imp_comp_map: ImplicitComponentMap, indent: str
1013
+ ) -> str:
1014
+ """Writes an ImplicitComponentMap (no RepresentationMap)."""
1015
+ outfile = f"{indent}<{ABBR_STR}:ComponentMap>"
1016
+ outfile += (
1017
+ f"{add_indent(indent)}<{ABBR_STR}:Source>"
1018
+ f"{imp_comp_map.source}"
1019
+ f"</{ABBR_STR}:Source>"
1020
+ )
1021
+ outfile += (
1022
+ f"{add_indent(indent)}<{ABBR_STR}:Target>"
1023
+ f"{imp_comp_map.target}"
1024
+ f"</{ABBR_STR}:Target>"
1025
+ )
1026
+ outfile += f"{indent}</{ABBR_STR}:ComponentMap>"
1027
+ return outfile
1028
+
1029
+
1030
+ def __write_fixed_value_map(fixed_map: FixedValueMap, indent: str) -> str:
1031
+ """Writes a FixedValueMap to the XML file."""
1032
+ outfile = f"{indent}<{ABBR_STR}:FixedValueMap>"
1033
+ outfile += (
1034
+ f"{add_indent(indent)}<{ABBR_STR}:Target>"
1035
+ f"{fixed_map.target}"
1036
+ f"</{ABBR_STR}:Target>"
1037
+ )
1038
+ outfile += (
1039
+ f"{add_indent(indent)}<{ABBR_STR}:Value>"
1040
+ f"{__escape_xml(str(fixed_map.value))}"
1041
+ f"</{ABBR_STR}:Value>"
1042
+ )
1043
+ outfile += f"{indent}</{ABBR_STR}:FixedValueMap>"
1044
+ return outfile
1045
+
1046
+
1047
+ def __write_date_pattern_map(date_map: DatePatternMap, indent: str) -> str:
1048
+ """Writes a DatePatternMap to the XML file."""
1049
+ attrs = ""
1050
+ if date_map.id is not None:
1051
+ attrs += f' id="{__escape_xml(date_map.id)}"'
1052
+ if date_map.resolve_period is not None:
1053
+ attrs += f' resolvePeriod="{__escape_xml(date_map.resolve_period)}"'
1054
+
1055
+ attrs += f' sourcePattern="{__escape_xml(date_map.pattern)}"'
1056
+ attrs += f' locale="{__escape_xml(date_map.locale)}"'
1057
+
1058
+ outfile = f"{indent}<{ABBR_STR}:DatePatternMap{attrs}>"
1059
+ outfile += (
1060
+ f"{add_indent(indent)}<{ABBR_STR}:Source>"
1061
+ f"{__escape_xml(date_map.source)}"
1062
+ f"</{ABBR_STR}:Source>"
1063
+ )
1064
+ outfile += (
1065
+ f"{add_indent(indent)}<{ABBR_STR}:Target>"
1066
+ f"{__escape_xml(date_map.target)}"
1067
+ f"</{ABBR_STR}:Target>"
1068
+ )
1069
+
1070
+ if date_map.pattern_type == "variable":
1071
+ outfile += (
1072
+ f"{add_indent(indent)}<{ABBR_STR}:FrequencyDimension>"
1073
+ f"{__escape_xml(date_map.frequency)}"
1074
+ f"</{ABBR_STR}:FrequencyDimension>"
1075
+ )
1076
+ else:
1077
+ outfile += (
1078
+ f"{add_indent(indent)}<{ABBR_STR}:TargetFrequencyID>"
1079
+ f"{__escape_xml(date_map.frequency)}"
1080
+ f"</{ABBR_STR}:TargetFrequencyID>"
1081
+ )
1082
+
1083
+ outfile += f"{indent}</{ABBR_STR}:DatePatternMap>"
1084
+ return outfile
1085
+
1086
+
1087
+ def __write_structure_map(
1088
+ struct_map: StructureMap, indent: str, references_30: bool = False
1089
+ ) -> str:
1090
+ """Writes a StructureMap to the XML file."""
1091
+ data = __write_maintainable(struct_map, indent, references_30)
1092
+
1093
+ label = f"{ABBR_STR}:{STRUCTURE_MAP}"
1094
+ attributes = data.get("Attributes") or ""
1095
+ attributes = attributes.replace("'", '"')
1096
+
1097
+ outfile = f"{indent}<{label}{attributes}>"
1098
+ outfile += __export_intern_data(data)
1099
+
1100
+ # Write Source and Target references
1101
+ outfile += (
1102
+ f"{add_indent(indent)}<{ABBR_STR}:Source>"
1103
+ f"{struct_map.source}"
1104
+ f"</{ABBR_STR}:Source>"
1105
+ )
1106
+ outfile += (
1107
+ f"{add_indent(indent)}<{ABBR_STR}:Target>"
1108
+ f"{struct_map.target}"
1109
+ f"</{ABBR_STR}:Target>"
1110
+ )
1111
+
1112
+ # Write component maps and fixed value maps
1113
+ for map_item in struct_map.maps:
1114
+ if isinstance(map_item, DatePatternMap):
1115
+ outfile += __write_date_pattern_map(map_item, add_indent(indent))
1116
+ for map_item in struct_map.maps:
1117
+ if isinstance(map_item, MultiComponentMap):
1118
+ outfile += __write_multi_component_map(
1119
+ map_item, add_indent(indent)
1120
+ )
1121
+ elif isinstance(map_item, ComponentMap):
1122
+ outfile += __write_component_map(
1123
+ map_item, add_indent(indent), references_30
1124
+ )
1125
+ elif isinstance(map_item, ImplicitComponentMap):
1126
+ outfile += __write_implicit_component_map(
1127
+ map_item, add_indent(indent)
1128
+ )
1129
+ if isinstance(map_item, FixedValueMap):
1130
+ outfile += __write_fixed_value_map(map_item, add_indent(indent))
1131
+
1132
+ outfile += f"{indent}</{label}>"
1133
+
1134
+ return outfile
1135
+
1136
+
844
1137
  def __write_scheme( # noqa: C901
845
1138
  item_scheme: Any, indent: str, scheme: str, references_30: bool = False
846
1139
  ) -> str:
847
1140
  """Writes the scheme to the XML file."""
848
1141
  if getattr(item_scheme, "sdmx_type", None) == "valuelist":
849
1142
  scheme = VALUE_LIST
1143
+
1144
+ if scheme == REPRESENTATION_MAP:
1145
+ return __write_representation_map(item_scheme, indent, references_30)
1146
+ if scheme == STRUCTURE_MAP:
1147
+ return __write_structure_map(item_scheme, indent, references_30)
1148
+
850
1149
  label = f"{ABBR_STR}:{scheme}"
851
1150
  components = ""
852
1151
  data = __write_maintainable(item_scheme, indent, references_30)
pysdmx/io/xml/__tokens.py CHANGED
@@ -297,3 +297,15 @@ VALUE_LISTS = "ValueLists"
297
297
  VALUE_LIST = "ValueList"
298
298
  VALUE_LIST_LOW = "valuelist"
299
299
  VALUE_ITEM = "ValueItem"
300
+
301
+ # Mapping
302
+ STRUCTURE_MAPS = "StructureMaps"
303
+ STRUCTURE_MAP = "StructureMap"
304
+ REPRESENTATION_MAPS = "RepresentationMaps"
305
+ REPRESENTATION_MAP = "RepresentationMap"
306
+ COMPONENT_MAPS = "ComponentMaps"
307
+ COMPONENT_MAP = "ComponentMap"
308
+ FIXED_VALUE_MAPS = "FixedValueMaps"
309
+ FIXED_VALUE_MAP = "FixedValueMap"
310
+ DATE_PATTERN_MAP = "DatePatternMap"
311
+ DATE_PATTERN_MAPS = "DatePatternMaps"
@@ -22,10 +22,12 @@ from pysdmx.io.xml.__tokens import (
22
22
  NAME_PERS,
23
23
  PROV_AGREEMENT,
24
24
  PROV_AGREMENT,
25
+ REPRESENTATION_MAPS,
25
26
  RULE_SCHEMES,
26
27
  RULESETS,
27
28
  STR_USAGE,
28
29
  STRUCTURE,
30
+ STRUCTURE_MAPS,
29
31
  TRANS_SCHEMES,
30
32
  TRANSFORMATIONS,
31
33
  UDO_SCHEMES,
@@ -70,6 +72,9 @@ DSDS = "DataStructures"
70
72
  DATAFLOWS = "Dataflows"
71
73
  CONSTRAINTS = "Constraints"
72
74
  PROV_AGREEMENTS = "ProvisionAgreements"
75
+ REPRESENTATION_MAPS_KEY = "RepresentationMaps"
76
+ STRUCTURE_MAPS_KEY = "StructureMaps"
77
+ DATE_PATTERN_MAP_KEY = "DatePatternMaps"
73
78
  ALL_DIM = "AllDimensions"
74
79
 
75
80
  BASE_URL_21 = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1"
@@ -205,6 +210,8 @@ MSG_CONTENT_PKG_21 = OrderedDict(
205
210
  (CONCEPTS, "Concepts"),
206
211
  (DSDS, "DataStructures"),
207
212
  (CONSTRAINTS, "ContentConstraints"),
213
+ (REPRESENTATION_MAPS, "RepresentationMaps"),
214
+ (STRUCTURE_MAPS, "StructureMaps"),
208
215
  (CUSTOM_TYPES, "CustomTypes"),
209
216
  (VTLMAPPINGS, "VtlMappings"),
210
217
  (NAME_PERS, "NamePersonalisations"),
@@ -224,6 +231,8 @@ MSG_CONTENT_PKG_30 = OrderedDict(
224
231
  (CONCEPTS_SCHEMES, "ConceptSchemes"),
225
232
  (DSDS, "DataStructures"),
226
233
  (CONSTRAINTS, "ContentConstraints"),
234
+ (REPRESENTATION_MAPS, "RepresentationMaps"),
235
+ (STRUCTURE_MAPS, "StructureMaps"),
227
236
  (CUSTOM_TYPE_SCHEMES, "CustomTypeSchemes"),
228
237
  (VTLMAPPING_SCHEMES, "VtlMappingSchemes"),
229
238
  (NAME_PER_SCHEMES, "NamePersonalisationSchemes"),
@@ -379,9 +379,9 @@ def __series_processing(
379
379
  del data_dict["Series"][0]
380
380
 
381
381
  # Getting each datapoint from data and creating dict
382
- data = data.sort_values(series_codes, axis=0)
382
+ data = data.sort_values(series_codes + series_att_codes, axis=0)
383
383
  data_dict = {
384
- "Series": data[series_codes]
384
+ "Series": data[series_codes + series_att_codes]
385
385
  .drop_duplicates()
386
386
  .reset_index(drop=True)
387
387
  .to_dict(orient="records")
pysdmx/model/dataflow.py CHANGED
@@ -107,8 +107,8 @@ class Component(
107
107
  statistical domain, i.e. a component attached to a series in a particular
108
108
  domain may be attached to, say, the dataset in another domain.
109
109
 
110
- The *codes* field indicates the expected (i.e. allowed) set of values a
111
- component can take within a particular domain. In addition to
110
+ The *enumeration* field indicates the expected (i.e. allowed) set of
111
+ codes a component can take within a particular domain. In addition to
112
112
  (or instead of) a set of codes, additional details about the expected
113
113
  format may be found in the *facets* and *dtype* fields.
114
114
 
@@ -25,7 +25,7 @@ def format_labels( # noqa: C901
25
25
  for k in df.columns:
26
26
  for component in components:
27
27
  if component.id == k:
28
- df.rename(
28
+ df.rename( # type: ignore[call-overload, unused-ignore]
29
29
  columns={k: component.concept.name}, # type: ignore[union-attr]
30
30
  inplace=True,
31
31
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysdmx
3
- Version: 1.10.1
3
+ Version: 1.11.0
4
4
  Summary: Your opinionated Python SDMX library
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -24,6 +24,12 @@ Requires-Dist: jsonschema (>=4.10) ; extra == "json"
24
24
  Requires-Dist: lxml (>=5.2) ; extra == "all"
25
25
  Requires-Dist: lxml (>=5.2) ; extra == "xml"
26
26
  Requires-Dist: msgspec (>=0)
27
+ Requires-Dist: numpy (>=2.0.2,<2.1) ; (python_version < "3.13") and (extra == "all")
28
+ Requires-Dist: numpy (>=2.0.2,<2.1) ; (python_version < "3.13") and (extra == "data")
29
+ Requires-Dist: numpy (>=2.0.2,<2.1) ; (python_version < "3.13") and (extra == "vtl")
30
+ Requires-Dist: numpy (>=2.1.0,<2.3) ; (python_version >= "3.13") and (extra == "all")
31
+ Requires-Dist: numpy (>=2.1.0,<2.3) ; (python_version >= "3.13") and (extra == "data")
32
+ Requires-Dist: numpy (>=2.1.0,<2.3) ; (python_version >= "3.13") and (extra == "vtl")
27
33
  Requires-Dist: pandas (>=2.1.4) ; extra == "all"
28
34
  Requires-Dist: pandas (>=2.1.4) ; extra == "data"
29
35
  Requires-Dist: parsy (>=2.1)
@@ -1,5 +1,5 @@
1
1
  pysdmx/__extras_check.py,sha256=Tmluui2OuJVyJB6a1Jl0PlrRjpsswhtCjAqtRLOSero,2059
2
- pysdmx/__init__.py,sha256=76qTEXwql_RGDSAgomUh23-P8FW79kx6Pcvc8iKZR8s,68
2
+ pysdmx/__init__.py,sha256=8EDbBiciJ8gxk5fE9tPCuRnhh-xaYrjzgW5j86WRuwk,68
3
3
  pysdmx/api/__init__.py,sha256=8lRaF6kEO51ehl0fmW_pHLvkN_34TtEhqhr3oKo6E6g,26
4
4
  pysdmx/api/dc/__init__.py,sha256=oPU32X8CRZy4T1to9mO5KMqMwxQsVI424dPqai-I8zI,121
5
5
  pysdmx/api/dc/_api.py,sha256=poy1FYFXnF6maBGy5lpOodf32-7QQjH8PCBNDkuOXxQ,7747
@@ -11,7 +11,7 @@ pysdmx/api/dc/query/_py_parser.py,sha256=_kVUk6Xu5jZdclng1F6eDSZS2-ok_yncI1y1q5l
11
11
  pysdmx/api/dc/query/_sql_parser.py,sha256=vQjhSyt6qA4jAHchkq4XXVhNPtKjKSVLzhoPkUyhJKk,1561
12
12
  pysdmx/api/dc/query/util.py,sha256=9HALmvlgVCckaMTVG7sEFbAw_mBwfbL4K-Pac2KPSYw,915
13
13
  pysdmx/api/fmr/__init__.py,sha256=uXD2dOY2lJSY6CoracIh8c1_7wWiJcsQ5ebIEIbHumk,50532
14
- pysdmx/api/fmr/maintenance.py,sha256=AnR1beyL6nsoDM5LmDLXnRMW5JvhGHXTADf_INSNgUg,5920
14
+ pysdmx/api/fmr/maintenance.py,sha256=_bdPSlSY3AvABxndlwwCKTk6uiFQfUSYhN9EjBuFRUw,6170
15
15
  pysdmx/api/gds/__init__.py,sha256=BBl75wEdcz9zPMfk6kAGHitRW39S774VL9xifMZ_uHs,11560
16
16
  pysdmx/api/qb/__init__.py,sha256=vxdMJFFg4J_KWADrnzj_8KcU0UlwpJPdx0yiW3QJo9Y,1498
17
17
  pysdmx/api/qb/availability.py,sha256=2yPHnTXu_jACNKNhhtXMkxVkfLK1Ewa5ucGAbRxvC5o,10181
@@ -38,7 +38,7 @@ pysdmx/io/csv/sdmx21/__init__.py,sha256=I3_dwi4A4if62_mwEjqbOa-F7mhoIMf0D6szpDf3
38
38
  pysdmx/io/csv/sdmx21/reader/__init__.py,sha256=J1cCkZh3klgZZWjdQ_U1zkfzT_DVzQmdreGZhN33SLs,2866
39
39
  pysdmx/io/csv/sdmx21/writer/__init__.py,sha256=CH8Nm7hqvXyN6XM_D2nJRmbKj6CJV-X1QzSF0WJrs0E,2484
40
40
  pysdmx/io/format.py,sha256=EO-PyYpiU0WswvEGA5UHokladxPezcwBUo1AJTqxp1Q,5250
41
- pysdmx/io/input_processor.py,sha256=P1_jKegrOyV7EaZLjLrq8fX2u1EI7gPBJoKvlBCNkP0,6967
41
+ pysdmx/io/input_processor.py,sha256=OPpnhXy8R2H0EKHvC92J3eWojk4I8dlp4jXA03FvvuA,7212
42
42
  pysdmx/io/json/fusion/messages/__init__.py,sha256=ac2jWfjGGBcfoSutiKy68LzqwNp_clt2RzmJOaYCxL0,2142
43
43
  pysdmx/io/json/fusion/messages/category.py,sha256=2NnYTptQ6nAdeYBIkAysyriTFF6dW8fjb9AvRWtTOao,5606
44
44
  pysdmx/io/json/fusion/messages/code.py,sha256=YayxSKiHa124WTr_lK8HTfXHomh_e0oDZvuydd29XKg,8300
@@ -46,11 +46,11 @@ pysdmx/io/json/fusion/messages/concept.py,sha256=m4lTyncSIriFXWWupE-zLxUVPx3Xrg5
46
46
  pysdmx/io/json/fusion/messages/constraint.py,sha256=dPkzhCWN49Y9ReSZPRFTdM6GWc0rU2BZTyFfWsqlX34,615
47
47
  pysdmx/io/json/fusion/messages/core.py,sha256=GdzF3TNUGrB0gxuaaSpk9LaYqcdy_M6L2azExZQfM0Q,4843
48
48
  pysdmx/io/json/fusion/messages/dataflow.py,sha256=lsaMPjmA-KiM51I78wrONfNHyvfBSeAll5Sp0jmTezc,2972
49
- pysdmx/io/json/fusion/messages/dsd.py,sha256=hnVOY0GZSuYQFCZd-hcjGd_YEacUue_9S4YjpSJJigM,10341
49
+ pysdmx/io/json/fusion/messages/dsd.py,sha256=0YA87KkDAoFlOCi4MboU4MhHEqc_5Wqx2A90pZG5q6o,10668
50
50
  pysdmx/io/json/fusion/messages/map.py,sha256=TPsCFuUfk5Jhhe7CNvEoHuFNZFpHhvNiYFWeIEUx-sc,7695
51
51
  pysdmx/io/json/fusion/messages/metadataflow.py,sha256=Js4j8lUF9ZwqL7lJUrfrjk9tmBmRQPt8qxdrfnZ6R5E,1374
52
52
  pysdmx/io/json/fusion/messages/mpa.py,sha256=WvcHn7Pa_UBHxkZbfSzIxc8qeeMfTWThxgCRHuioXFY,1494
53
- pysdmx/io/json/fusion/messages/msd.py,sha256=S7PR8DbY1Vob5UUCTHbSmfpz5kMMyGJvtE0zcF1RqbE,3781
53
+ pysdmx/io/json/fusion/messages/msd.py,sha256=XzQ5JiX0rAswj71a3mCYulhGLtu7GDp_RzL8-kd3t1U,3867
54
54
  pysdmx/io/json/fusion/messages/org.py,sha256=gWIvmvVrj5wXCrwbsJL0B13YM3WjlfIQxrRUc_WAoYs,9538
55
55
  pysdmx/io/json/fusion/messages/pa.py,sha256=6zN8Qxj5bdf5zo2N9TwYlSLyGxokvsELtk1--1cMbxw,1393
56
56
  pysdmx/io/json/fusion/messages/report.py,sha256=ZE62ZmHlCXk3TxRTRWCDCKVMhnN0J5UjMEzrsnD5I3E,1551
@@ -70,39 +70,44 @@ pysdmx/io/json/sdmxjson2/messages/category.py,sha256=L51-XTUxzELNCfdhLPKaOPoGss2
70
70
  pysdmx/io/json/sdmxjson2/messages/code.py,sha256=gEdBPOmlO_7_-lHfE7k8RVY95ee7cwJH7eY8ibh5JyA,18205
71
71
  pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=x7BoG6AaziZGNjxeypwy_lsFTmdHs-0MPUpqPsTBQIA,5496
72
72
  pysdmx/io/json/sdmxjson2/messages/constraint.py,sha256=TCg-Z6ZkZSzlhjvaZebKk1wL_CPhmJzyKjEkE4FPkAc,9055
73
- pysdmx/io/json/sdmxjson2/messages/core.py,sha256=qF0fscWY1yRxmN-4s2UweEWqbDMSioaUPaxlYEo8ouY,10137
73
+ pysdmx/io/json/sdmxjson2/messages/core.py,sha256=dOVa5ibFuhNqmw7e2yVeYMMC8DEjk6jK5T40ev9S-0I,10394
74
74
  pysdmx/io/json/sdmxjson2/messages/dataflow.py,sha256=wjeq9yexTa012AtGdZsZflp3WQ6fP-3kas-gxADTFeQ,6256
75
- pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=ZLFISJYtpP4cPQwcIjMkEGVPBE4Yy6cCKvwGw0xjFh4,20431
75
+ pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=_dqP-ZwKNM85xb77OMLY_wiGZxMwHvl4d-c1QECCP9Y,20415
76
76
  pysdmx/io/json/sdmxjson2/messages/map.py,sha256=ZB7XPX6nUcu2MMHAsgwAR0nxlbEQF7YasplhlS5K9EI,16774
77
77
  pysdmx/io/json/sdmxjson2/messages/metadataflow.py,sha256=1hKCyzTEAvB_MOgmtjBObC9RVNSge7Sick6nQMwl17o,2994
78
78
  pysdmx/io/json/sdmxjson2/messages/mpa.py,sha256=ryoQCvOvd2j6gPdGOEML4bc-NXUSetuKNOfmd9Ogn2s,3050
79
- pysdmx/io/json/sdmxjson2/messages/msd.py,sha256=GtJbAgGFgsNvi0P4zdslh_EOdLv-UjFBM9H9TLpwIlw,8484
79
+ pysdmx/io/json/sdmxjson2/messages/msd.py,sha256=cYQqWOex5LVYE-8ASsyIwI_Y0jCuT9IPG_evG3CMnHs,8465
80
80
  pysdmx/io/json/sdmxjson2/messages/pa.py,sha256=VoaPBgcWGwWU7h5IaVa5wNWncOoktWihSXjcP4vEb00,2780
81
81
  pysdmx/io/json/sdmxjson2/messages/provider.py,sha256=htAwdDzVR3qeyExhmjpvg8W0X4lWqRh2Bvd5H8wsOTY,8197
82
- pysdmx/io/json/sdmxjson2/messages/report.py,sha256=thcZZUuoiJ6OJ9P33EOTN3PIHFKxdQUMapI7HmSoB4A,6571
82
+ pysdmx/io/json/sdmxjson2/messages/report.py,sha256=jr4HZunfnQicG2AFi15AGX_v031jNb3d6PiQgc8TPgY,6672
83
83
  pysdmx/io/json/sdmxjson2/messages/schema.py,sha256=JwFYjgvhK_1NN5KQIUYNb0ul4ywQhDQ28ZQBGnsX5X4,2862
84
- pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=c0dyTJK49UpGvL1iLFaFLYFkT89kzvXwk65qd_j-Y1U,12738
84
+ pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=GCpQboHEpDyfCmXVJGbCyKpIaLCbOXYDxj6WXnvv9pw,12851
85
85
  pysdmx/io/json/sdmxjson2/messages/vtl.py,sha256=C-JQY1_W8SrJd2lLdUGCmQO9Br1pdqdT8WmB1K4e_yY,35284
86
86
  pysdmx/io/json/sdmxjson2/reader/__init__.py,sha256=RbNnZSrGQa4OE0HBWJau9tPFSQbDklcKZaBWOzxEw4I,1629
87
87
  pysdmx/io/json/sdmxjson2/reader/doc_validation.py,sha256=Li0N5UmTKJy_FWT5vfwt7DEtp8xiYaXccDRBna_Q0Jw,3822
88
- pysdmx/io/json/sdmxjson2/reader/metadata.py,sha256=FT9CEWjrVfUK4vTEqs-f2ZO6jWeRRkEHCjsHMNgKQp0,1230
89
- pysdmx/io/json/sdmxjson2/reader/structure.py,sha256=PKHvH_lY2XJtKkg5rGbGSHyYu_raGLrBuaEy8BKr6U0,1209
88
+ pysdmx/io/json/sdmxjson2/reader/metadata.py,sha256=sktlmqyXnGhoDTypSDeJU97Evfb9HB0II4-LPnvfMrk,1248
89
+ pysdmx/io/json/sdmxjson2/reader/structure.py,sha256=6WtSmwx9KRSLX9Ovb1rFoIpghhy72o-1uZ9qN1Fo0zw,1236
90
90
  pysdmx/io/json/sdmxjson2/writer/__init__.py,sha256=DZGkas1ghei4p6SZsIQI1LPToS-d8F1Nx75MC8reT7g,270
91
- pysdmx/io/json/sdmxjson2/writer/metadata.py,sha256=qse5foElBdTWbxIc9rIH1B4DfOBMeLy7qocp3Y4cV7g,2043
92
- pysdmx/io/json/sdmxjson2/writer/structure.py,sha256=kqINWWSFjowIKIwsD0Kvb29KYdW5VDT9fg9d1ccjQBY,2102
91
+ pysdmx/io/json/sdmxjson2/writer/_helper.py,sha256=sXZw2exVyHBUpdVf4NjieTrexXfA27NcxUo594h6ArE,4214
92
+ pysdmx/io/json/sdmxjson2/writer/v2_0/__init__.py,sha256=7PBjEmFonZtbhURmon4UQufFoR_dpZqLILXnq6oPIoo,58
93
+ pysdmx/io/json/sdmxjson2/writer/v2_0/metadata.py,sha256=AU-VstrSHpTrIQSx3e2JmeIRuC-CQn79OQODllz6BB8,1212
94
+ pysdmx/io/json/sdmxjson2/writer/v2_0/structure.py,sha256=jiJ9ww7zTZRaGzZTZVY2-0Tzj9JdSeXkI2fggqfqKRc,1245
95
+ pysdmx/io/json/sdmxjson2/writer/v2_1/__init__.py,sha256=-CwxbfR9kgwXYU_SMrmkkf0jgFPhcHTdG5dwjFhwjfk,58
96
+ pysdmx/io/json/sdmxjson2/writer/v2_1/metadata.py,sha256=9PE3yPpyD1pfF_8-A5VmakzC00XRC-BNEyZpZUIIJI8,1196
97
+ pysdmx/io/json/sdmxjson2/writer/v2_1/structure.py,sha256=s0SULtWmNUckly6cKPI0wGzElmVvgAEK6b32Es2Q0Rw,1243
93
98
  pysdmx/io/pd.py,sha256=1C5UnAT25EADOpNsRBooEdWNaJEGdmcwh6_R9O5MOrc,464
94
- pysdmx/io/reader.py,sha256=VmqpmQAvDhTHKjFcUBC_fpmnY8VgC9ffS8JLq-c3D5o,11230
99
+ pysdmx/io/reader.py,sha256=sceCnfJKdUiwNXnIkCKydj5Fcmc1DDnkzUlaz2DNOrU,11403
95
100
  pysdmx/io/serde.py,sha256=xTd22JEaefhCpVcUqVthf4gtDQT1KeiDZ-9w52o2zQk,1594
96
- pysdmx/io/writer.py,sha256=1UVJvZm3eD2wQxZ-PruQdhQMu3l2egju-cxOvZBrH-o,5833
101
+ pysdmx/io/writer.py,sha256=UEwRe8xVCKV_y9nu7amSVQzQss5x55EBJsH2LI-dsAI,6128
97
102
  pysdmx/io/xml/__allowed_lxml_errors.py,sha256=PdIK2i6JwwGRh1Ogc5JA0hRySO7QXJKN-DI8EYtdjA0,225
98
103
  pysdmx/io/xml/__data_aux.py,sha256=oLTfk49FuoF0LjMrV5o55PN_5wWPHZTv49aDBdbflYc,4331
99
104
  pysdmx/io/xml/__init__.py,sha256=tcUsSEiM3nBA7lDbZPwGZ7Vu_K9gQd8oliASUMTGjFE,105
100
105
  pysdmx/io/xml/__parse_xml.py,sha256=4zZKGlvrNAccILH-mlQzZFV2HF15wIUGDXttVG3SvNM,2975
101
- pysdmx/io/xml/__ss_aux_reader.py,sha256=6mumQYcDdF_vrX65vSodE4I1b7upKbP6yNNSM2N6pUs,2853
102
- pysdmx/io/xml/__structure_aux_reader.py,sha256=50UPOCk2XnCU4J1hQNAXiGL2n8QPXdf4zPtPB0DKWPQ,42782
103
- pysdmx/io/xml/__structure_aux_writer.py,sha256=0i08hvFw2TfRElaGAeTwfsOaOpw8XWBlZ_zWdxmLPkM,45612
104
- pysdmx/io/xml/__tokens.py,sha256=M0x-tgoh6_pzL_BP-MArCu3w0NO-AUS6bR-W6BIEJG8,6891
105
- pysdmx/io/xml/__write_aux.py,sha256=c3HgDMey8nBXyeT_yU8PWdk25bgYyX49R21fLv8CgZc,15534
106
+ pysdmx/io/xml/__ss_aux_reader.py,sha256=_aJO-uWh60SNaOxB8mE8SBWy0c5_GPBNtr9lro_YlEA,3702
107
+ pysdmx/io/xml/__structure_aux_reader.py,sha256=IppBAE7oWeO0FbqdwAb2t6xXmVbZj7PaC2vHIcdWFNE,49122
108
+ pysdmx/io/xml/__structure_aux_writer.py,sha256=smDO5X5PwTXD48pgFBA_rYGvE-yMZb1YVR1WNyXE-EM,55176
109
+ pysdmx/io/xml/__tokens.py,sha256=mTunFE49N4TigxjPiDoyYdbN4Yk_HONZYFz-fRzDknk,7258
110
+ pysdmx/io/xml/__write_aux.py,sha256=Qi_f5K8a0mX4F4IMx3ZQ8J18NPj_2VhdiccjOAtvhQo,15896
106
111
  pysdmx/io/xml/__write_data_aux.py,sha256=mnJpooA4koqGbKhF-6eonT3drQ-qCuwwP-lfZLHKqVQ,3403
107
112
  pysdmx/io/xml/__write_structure_specific_aux.py,sha256=reRDVw4Xwag0ODyMzm9uOk9WJ_e1ELxAPYHSMUUDJBQ,8919
108
113
  pysdmx/io/xml/config.py,sha256=R24cczVkzkhjVLXpv-qfEm88W3_QTqVt2Qofi8IvJ5Y,93
@@ -117,7 +122,7 @@ pysdmx/io/xml/sdmx21/reader/structure_specific.py,sha256=S3-gLmaBFjBRIr25qQtlrao
117
122
  pysdmx/io/xml/sdmx21/reader/submission.py,sha256=8daiBW-sIVGaB6lYwHqJNkLI7IixMSydCK-0ZO8ri4I,1711
118
123
  pysdmx/io/xml/sdmx21/writer/__init__.py,sha256=QQGFAss26njCC4eKYxhBcI9LYm5NHuJaAJGKCrIrL80,31
119
124
  pysdmx/io/xml/sdmx21/writer/error.py,sha256=0wkX7K_n2oZNkOKg_zpl9Id82qP72Lqof-T-ZLGoZ1M,353
120
- pysdmx/io/xml/sdmx21/writer/generic.py,sha256=8_kUMMUiIFVdKMyhpR2LKDyfiinBohO_aL_6GZpOInY,15786
125
+ pysdmx/io/xml/sdmx21/writer/generic.py,sha256=kiTQ3HuO51xxQGrQ6PxpKAYGfoYu_r_oxfOPQHPX2vU,15824
121
126
  pysdmx/io/xml/sdmx21/writer/structure.py,sha256=S3qoNgXxrakn2V4NLdL5U5mAA16XisI0PpJDuxqalFE,2084
122
127
  pysdmx/io/xml/sdmx21/writer/structure_specific.py,sha256=iXc1J-RzoKyRznvgGgdTSeUfyqZLouI8CtSq2YhGBWI,2877
123
128
  pysdmx/io/xml/sdmx30/__init__.py,sha256=8BScJFEgLy8DoUreu2RBUtxjGjKyClkKBI_Qtarbk-Y,38
@@ -141,7 +146,7 @@ pysdmx/model/category.py,sha256=ksYIOGPHgZI619RhmRXZUXHP_juY9im40tWzR2yuMEc,6796
141
146
  pysdmx/model/code.py,sha256=Wu6rEXeZf_XA0aBrDXgN-3yvySAHH7SAjrWliFlmC24,12799
142
147
  pysdmx/model/concept.py,sha256=mQfqJdtWc10WdTKX_Mw7Znw65cN3QO-kCar9MWYeWO4,9645
143
148
  pysdmx/model/constraint.py,sha256=MwI_GLKzwkuo0BzAsgcnDeB-b7bq8qqwHNte5JjCEFA,1960
144
- pysdmx/model/dataflow.py,sha256=IyVBWIKSkl6Qm5R2a6n_uPveUPsIpaYUMc_4hcwJ4Uw,24196
149
+ pysdmx/model/dataflow.py,sha256=hNeQjNXebjaDbakx05bfzcQ9DoplZMQi1BUW4NH6lnI,24201
145
150
  pysdmx/model/dataset.py,sha256=Lbr7tYonGHD3NZUD-M9hK2puaEAluOVPG2DbkOohzMM,4861
146
151
  pysdmx/model/gds.py,sha256=QrnmI8Hn--C95gGXCeUeWwhn-Ur7DuT08Cg7oPJIEVI,4976
147
152
  pysdmx/model/map.py,sha256=9a3hl6efq_5kAYuJWkepoQOkao8Eqk17N69JGyRfxsk,17506
@@ -153,7 +158,7 @@ pysdmx/model/vtl.py,sha256=k7WIb89876xKlf7k0R9sgZ1VVlRrIkbV7FzvMFZn8e0,6985
153
158
  pysdmx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
159
  pysdmx/toolkit/__init__.py,sha256=yBRw4FXQH_RUJgF6vwZscNwCVBt-FMwslJEfDKa7eXo,26
155
160
  pysdmx/toolkit/pd/__init__.py,sha256=3JoCZHamJR4mZfLt9GmaznLlG_YilmY0hAhuW5COQC8,3138
156
- pysdmx/toolkit/pd/_data_utils.py,sha256=fzXl_a1M8NI7HHI23tRmLlS4PBZ9N4Tgtqh-zxg19qk,3265
161
+ pysdmx/toolkit/pd/_data_utils.py,sha256=S-u17kdYoWlZRLHFvCBKIO489cGBWcFcdCVjEhqJWuA,3311
157
162
  pysdmx/toolkit/vtl/__init__.py,sha256=jYWScnAomHlkvTtl07ur82UEqALCveiAEmMbqdWhT1A,388
158
163
  pysdmx/toolkit/vtl/_validations.py,sha256=k0le8fDUOGNl97P-QbNglrNyr5fCh5dLPMiTk1yu1jw,5590
159
164
  pysdmx/toolkit/vtl/convert.py,sha256=FNToVTG4Zu9n7h_Fre-LEGihx8RMGSJb7G6-FFyPg8Y,11355
@@ -163,7 +168,7 @@ pysdmx/util/__init__.py,sha256=m_XWRAmVJ7F6ai4Ckrj_YuPbhg3cJZAXeZrEThrL88k,3997
163
168
  pysdmx/util/_date_pattern_map.py,sha256=IS1qONwVHbTBNIFCT0Rqbijj2a9mYvs7onXSK6GeQAQ,1620
164
169
  pysdmx/util/_model_utils.py,sha256=nQ1yWBt-tZYDios9xvRvJ7tHq6A8_RoGdY1wi7WGz2w,3793
165
170
  pysdmx/util/_net_utils.py,sha256=nOTz_x3FgFrwKh42_J70IqYXz9duQkMFJWtejZXcLHs,1326
166
- pysdmx-1.10.1.dist-info/METADATA,sha256=tXCxkMOnWoEJWTBRH4ZvzO1k20lm9cxDIneSSfQ8pzE,4849
167
- pysdmx-1.10.1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
168
- pysdmx-1.10.1.dist-info/licenses/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
169
- pysdmx-1.10.1.dist-info/RECORD,,
171
+ pysdmx-1.11.0.dist-info/METADATA,sha256=eO9SWX3mB1x9glSSm9wEJxu7JQoiHz9Rj9Ac1oPnQZI,5364
172
+ pysdmx-1.11.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
173
+ pysdmx-1.11.0.dist-info/licenses/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
174
+ pysdmx-1.11.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.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any