pyxcp 0.22.10__cp313-cp313-win_amd64.whl → 0.22.11__cp313-cp313-win_amd64.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 pyxcp might be problematic. Click here for more details.

pyxcp/__init__.py CHANGED
@@ -17,4 +17,4 @@ tb_install(show_locals=True, max_frames=3) # Install custom exception handler.
17
17
 
18
18
  # if you update this manually, do not forget to update
19
19
  # .bumpversion.cfg and pyproject.toml.
20
- __version__ = "0.22.10"
20
+ __version__ = "0.22.11"
pyxcp/config/__init__.py CHANGED
@@ -933,7 +933,10 @@ class PyXCP(Application):
933
933
  exit(2)
934
934
  else:
935
935
  self._read_configuration(self.config_file)
936
- self._setup_logger()
936
+ if logging.getLogger().hasHandlers():
937
+ self.log = logging.getLogger()
938
+ else:
939
+ self._setup_logger()
937
940
 
938
941
  def _setup_logger(self):
939
942
  from pyxcp.types import Command
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,85 @@
1
+ import argparse
2
+ import logging
3
+ import os
4
+ import csv
5
+ from array import array
6
+ from dataclasses import dataclass, field
7
+ from mmap import PAGESIZE
8
+ from pathlib import Path
9
+ from typing import Any, List
10
+
11
+ from pyxcp.recorder import XcpLogFileDecoder
12
+ from pyxcp.recorder.converter import MAP_TO_ARRAY
13
+
14
+
15
+ MAP_TO_SQL = {
16
+ "U8": "INTEGER",
17
+ "I8": "INTEGER",
18
+ "U16": "INTEGER",
19
+ "I16": "INTEGER",
20
+ "U32": "INTEGER",
21
+ "I32": "INTEGER",
22
+ "U64": "INTEGER",
23
+ "I64": "INTEGER",
24
+ "F32": "FLOAT",
25
+ "F64": "FLOAT",
26
+ "F16": "FLOAT",
27
+ "BF16": "FLOAT",
28
+ }
29
+
30
+ logger = logging.getLogger("PyXCP")
31
+
32
+ parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
33
+ parser.add_argument("xmraw_file", help=".xmraw file")
34
+ args = parser.parse_args()
35
+
36
+
37
+ @dataclass
38
+ class Storage:
39
+ name: str
40
+ arrow_type: Any
41
+ arr: array
42
+
43
+
44
+ @dataclass
45
+ class StorageContainer:
46
+ name: str
47
+ arr: List[Storage] = field(default_factory=[])
48
+ ts0: List[int] = field(default_factory=lambda: array("Q"))
49
+ ts1: List[int] = field(default_factory=lambda: array("Q"))
50
+
51
+
52
+ class Decoder(XcpLogFileDecoder):
53
+
54
+ def __init__(self, recording_file_name: str):
55
+ super().__init__(recording_file_name)
56
+
57
+ def initialize(self) -> None:
58
+ self.arrow_tables = []
59
+ self.csv_writers = []
60
+ for dl in self.daq_lists:
61
+ result = []
62
+ for name, type_str in dl.headers:
63
+ array_txpe = MAP_TO_ARRAY[type_str]
64
+ sql_type = MAP_TO_SQL[type_str]
65
+ sd = Storage(name, sql_type, array(array_txpe))
66
+ result.append(sd)
67
+ sc = StorageContainer(dl.name, result)
68
+ writer = csv.writer(open(f"{sc.name}.csv", "w", newline=""), dialect="excel")
69
+ headers = ["ts0", "ts1"] + [e.name for e in sc.arr]
70
+ writer.writerow(headers)
71
+ self.csv_writers.append(writer)
72
+ self.arrow_tables.append(sc)
73
+ print("\nInserting data...")
74
+
75
+ def finalize(self) -> None:
76
+ print("Done.")
77
+
78
+ def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
79
+ sc = self.arrow_tables[daq_list_num]
80
+ writer = self.csv_writers[daq_list_num]
81
+ data = [timestamp0, timestamp1, *measurements]
82
+ writer.writerow(data)
83
+
84
+ decoder = Decoder(args.xmraw_file)
85
+ decoder.run()
@@ -0,0 +1,95 @@
1
+ import argparse
2
+ import logging
3
+ import os
4
+ import xlsxwriter
5
+ from array import array
6
+ from dataclasses import dataclass, field
7
+ from mmap import PAGESIZE
8
+ from pathlib import Path
9
+ from typing import Any, List
10
+
11
+ from pyxcp.recorder import XcpLogFileDecoder
12
+ from pyxcp.recorder.converter import MAP_TO_ARRAY
13
+
14
+
15
+ MAP_TO_SQL = {
16
+ "U8": "INTEGER",
17
+ "I8": "INTEGER",
18
+ "U16": "INTEGER",
19
+ "I16": "INTEGER",
20
+ "U32": "INTEGER",
21
+ "I32": "INTEGER",
22
+ "U64": "INTEGER",
23
+ "I64": "INTEGER",
24
+ "F32": "FLOAT",
25
+ "F64": "FLOAT",
26
+ "F16": "FLOAT",
27
+ "BF16": "FLOAT",
28
+ }
29
+
30
+ logger = logging.getLogger("PyXCP")
31
+
32
+ parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
33
+ parser.add_argument("xmraw_file", help=".xmraw file")
34
+ args = parser.parse_args()
35
+
36
+
37
+ @dataclass
38
+ class Storage:
39
+ name: str
40
+ arrow_type: Any
41
+ arr: array
42
+
43
+
44
+ @dataclass
45
+ class StorageContainer:
46
+ name: str
47
+ arr: List[Storage] = field(default_factory=[])
48
+ ts0: List[int] = field(default_factory=lambda: array("Q"))
49
+ ts1: List[int] = field(default_factory=lambda: array("Q"))
50
+
51
+
52
+ class Decoder(XcpLogFileDecoder):
53
+
54
+ def __init__(self, recording_file_name: str):
55
+ super().__init__(recording_file_name)
56
+ self.xls_file_name = Path(recording_file_name).with_suffix(".xlsx")
57
+ try:
58
+ os.unlink(self.xls_file_name)
59
+ except Exception as e:
60
+ print(e)
61
+
62
+ def initialize(self) -> None:
63
+ self.arrow_tables = []
64
+ self.xls_workbook = xlsxwriter.Workbook(self.xls_file_name)
65
+ self.xls_sheets = []
66
+ self.rows = []
67
+ for dl in self.daq_lists:
68
+ result = []
69
+ for name, type_str in dl.headers:
70
+ array_txpe = MAP_TO_ARRAY[type_str]
71
+ sql_type = MAP_TO_SQL[type_str]
72
+ sd = Storage(name, sql_type, array(array_txpe))
73
+ result.append(sd)
74
+ sc = StorageContainer(dl.name, result)
75
+ sheet = self.xls_workbook.add_worksheet(sc.name)
76
+ self.xls_sheets.append(sheet)
77
+ headers = ["ts0", "ts1"] + [e.name for e in sc.arr]
78
+ sheet.write_row(0, 0, headers)
79
+ self.rows.append(1)
80
+ self.arrow_tables.append(sc)
81
+ print("\nInserting data...")
82
+
83
+ def finalize(self) -> None:
84
+ self.xls_workbook.close()
85
+ print("Done.")
86
+
87
+ def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
88
+ sheet = self.xls_sheets[daq_list_num]
89
+ row = self.rows[daq_list_num]
90
+ data = [timestamp0, timestamp1] + measurements
91
+ sheet.write_row(row, 0, data)
92
+ self.rows[daq_list_num] += 1
93
+
94
+ decoder = Decoder(args.xmraw_file)
95
+ decoder.run()
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxcp
3
- Version: 0.22.10
3
+ Version: 0.22.11
4
4
  Summary: Universal Calibration Protocol for Python
5
5
  Home-page: https://github.com/christoph2/pyxcp
6
6
  License: LGPLv3
@@ -1,4 +1,4 @@
1
- pyxcp/__init__.py,sha256=5gNaTsZlwx90n0_iLoI9I5zhLtWz-lprPLROdm7DBZk,548
1
+ pyxcp/__init__.py,sha256=qJTsh51O0ValCtABif9KgajJOlsCAiM3d_LNOJ8tu5w,548
2
2
  pyxcp/aml/EtasCANMonitoring.a2l,sha256=EJYwe3Z3H24vyWAa6lUgcdKnQY8pwFxjyCN6ZU1ST8w,1509
3
3
  pyxcp/aml/EtasCANMonitoring.aml,sha256=xl0DdyeiIaLW0mmmJNAyJS0CQdOLSxt9dxfgrdSlU8Y,2405
4
4
  pyxcp/aml/ifdata_CAN.a2l,sha256=NCUnCUEEgRbZYSLGtUGwL2e7zJ8hrp0SbmLHGv8uY58,612
@@ -18,18 +18,18 @@ pyxcp/asamkeydll.c,sha256=dVEvU0S1kgIo62S0La-T8xHSw668LM_DYc_fiQ0No6g,2952
18
18
  pyxcp/asamkeydll.sh,sha256=DC2NKUMwvi39OQgJ6514Chr4wc1LYbTmQHmMq9jAHHs,59
19
19
  pyxcp/checksum.py,sha256=alze1JiZ2JmdRul9QzP_-fuAqJcNyYBbo35zBwEKqHk,11535
20
20
  pyxcp/cmdline.py,sha256=uSbCtKtQT0JQxMhcoUUx_UJ1nMUILMWckEQGe_tNxXk,1496
21
- pyxcp/config/__init__.py,sha256=V66iNkrUVF1iR3X15nl_1a37qRlpEc-xZ5P-UMP0rp4,41832
21
+ pyxcp/config/__init__.py,sha256=BWrmH3kdVk4__z2eU-3EKuYtXB7bxcSq2K1sWUYtQXo,41954
22
22
  pyxcp/config/legacy.py,sha256=4QdDheX8DbBKv5JVT72_C_cjCgKvZmhN3tJ6hsvBEtI,5220
23
23
  pyxcp/constants.py,sha256=9yGfujC0ImTYQWfn41wyw8pluJTSrhMGWIVeIZTgsLg,1160
24
24
  pyxcp/cpp_ext/__init__.py,sha256=iCsEqSZQIsaNSjQkgTp-DKvOCkRtV6QOydnSUDx5jVk,136
25
25
  pyxcp/cpp_ext/bin.hpp,sha256=PwJloZek21la-RBSda2Hc0u_6gID0sfTduPeplaAyR4,2561
26
26
  pyxcp/cpp_ext/blockmem.hpp,sha256=ysaJwmTWGTfE54Outk3gJYOfAVFd_QaonBMtXLcXwCc,1242
27
- pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=s2YX9NSLlGVms5rR2NrsOWOU2zlGcXEu2MXGtA0bw2A,278016
28
- pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=iy06blgvZQDQx6tBa-05_wxUI857WR-sUf0FUjQyfkA,280064
29
- pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd,sha256=l5zRKN3qoNQ-VEXjlhl1L4fXFnC3vJ0LjTJ-Hws-pzg,284160
30
- pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd,sha256=Zmatd1TOdBBayzuTZpj77upD5UDoHmkkNwokg-1MeIg,284160
31
- pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=5VMsACPyJOwOkE_kmiqBBqDeK_Bxom_ytuf6__JOEKw,278016
32
- pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=y9LmrJRmsR62znnQwT7wGGCIClNjAhQtG176iD4Df4o,259584
27
+ pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=sASj5hJAQ1Ydwufb8TaGb5Xbrqrj9kDXqStDe6PNZKY,278016
28
+ pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=Xe26qmkTt8ESHYEzfD4JMhpTWuQHnyHeM2BqTmkceO4,280064
29
+ pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd,sha256=oah4raKt6YK07sKWnIZ-bVa2BDmeSb5ryAy4s4_zDL4,284160
30
+ pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd,sha256=F5JBdhs-j-ko5StK_iepqd90_pLcP754pd9kfkSpGNA,284160
31
+ pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=LTqT6LndI9cL27VjSyDRWaJodSPN9ul798F4diZ-mL8,278016
32
+ pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=MiCjOjgtrrx5phVWpoyPHLqperKQ7whWY4PBfK1-aDw,259584
33
33
  pyxcp/cpp_ext/daqlist.hpp,sha256=sgqodW4vnN82s05mFyXQnpQox4KR3VDhP5FB_VhsmQc,7075
34
34
  pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
35
35
  pyxcp/cpp_ext/extension_wrapper.cpp,sha256=5ZUYLt87SEAZUzuBkBl7N0eXXBOVq_aZvlNdpVgmy4o,4528
@@ -41,12 +41,12 @@ pyxcp/daq_stim/optimize/__init__.py,sha256=E4HzY8P0aeegNgu71hUcbL-yR6Fzg5PGe8PSi
41
41
  pyxcp/daq_stim/optimize/binpacking.py,sha256=zTNjpt91MnGW5ha9Z07hQtuoJ7tspyRwRlLYbE6GMGs,1249
42
42
  pyxcp/daq_stim/scheduler.cpp,sha256=a7VK7kP2Hs8yMlcDAkXwJ0bH88lr_yz156sphcHS7Z4,715
43
43
  pyxcp/daq_stim/scheduler.hpp,sha256=U_6tUbebmzX5vVZS0EFSgTaPsyxMg6yRXHG_aPWA0x4,1884
44
- pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=42gH3xnpqIPnchidEgzmnzOms0OmxMUF1PGiSWNhtxo,186880
45
- pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=-wNSKkdA7UeFftpuIH7YUT96OunqG7wVXPBFswYhc68,189440
46
- pyxcp/daq_stim/stim.cp312-win_amd64.pyd,sha256=Q0H4ALP0zL7GBGFgeVhgHojAGV-wBniWWbIaetleqbI,190976
47
- pyxcp/daq_stim/stim.cp313-win_amd64.pyd,sha256=lqzzn1gIb8lhGP4Z5F4GWacwVUF-CRrJPQVL3cd3kHQ,190976
48
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=1_HMSdbmcX_23ohzEIH2D-MjDNmQ1ZekH76Z94R-72I,186880
49
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=fJqji_m7qYjQO5_gZzAWUtkYN6dORAmqI80yWhK_duY,181248
44
+ pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=cqUPEkQJAXuurqYVvGAELbTwlg89kvyJ0uehVyBfkmI,186880
45
+ pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=Awx7JV7gAjUO-dRA8Xv4JXGVTVK6tFym72Oql0VJ65Y,189440
46
+ pyxcp/daq_stim/stim.cp312-win_amd64.pyd,sha256=L4ztjZ9NfqbRzVSNeRvhVetJ5dPqTLb8pPIrmkdRuJ0,190976
47
+ pyxcp/daq_stim/stim.cp313-win_amd64.pyd,sha256=6NaGNViWuF1eA3IUsI0MIYUPlLxiPP8izf1wF1OV-xE,190976
48
+ pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=QgOvk1Ff411UTO7a0C1hy_Q49ZEtbWAUqkecTp451Qg,186880
49
+ pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=vYkA_iLZ7JVNnjaf2GmeDWIgSMu_JlAUMkoQloR2Axw,181248
50
50
  pyxcp/daq_stim/stim.cpp,sha256=F2OG67W4KKwTTiUCxm-9egIv3TLFdOkRunX6xf7YOtc,177
51
51
  pyxcp/daq_stim/stim.hpp,sha256=U-uInRrA6OCdMl1l1SWbQ_KEPpnNYrWut924IvbW6R0,18508
52
52
  pyxcp/daq_stim/stim_wrapper.cpp,sha256=5LbWkK86h_4mHd83dnwCU7BRvVYit8ijxBMT7pthtOE,1830
@@ -62,6 +62,8 @@ pyxcp/examples/conf_socket_can.toml,sha256=gTacQGm0p6fhPCMWC3ScLq9Xj-xJmNbjNXkjO
62
62
  pyxcp/examples/conf_sxi.json,sha256=cXwNGoOpvqhdjXBQcE8lKgTs50wi9beosWKskZGJ-nI,158
63
63
  pyxcp/examples/conf_sxi.toml,sha256=t-XsgRljcMdj0f3_CGRT60c77LeQPNbjIT17YxDK3Yg,125
64
64
  pyxcp/examples/ex_arrow.py,sha256=HvY5Lc7rL87-FgTTcZSQJLjSiTdfjfjMLu0mMmLpW10,3020
65
+ pyxcp/examples/ex_csv.py,sha256=GNWQ3IatXj3Kg5MUX6p8tzJRUppGreON9dkrNiqdTtk,2461
66
+ pyxcp/examples/ex_excel.py,sha256=VpoqRTv-rHz-MnaFKt5f7MqDrK9OLYyRJvVWzCFsayc,2828
65
67
  pyxcp/examples/ex_mdf.py,sha256=zfivlNkbbsfvwqsISttaoQk1R888r7UUtwSqocE60sU,3759
66
68
  pyxcp/examples/ex_sqlite.py,sha256=ludD0EIziBhBNnC3MOrQTGs06cl7iNyL2yefwe53zNc,4268
67
69
  pyxcp/examples/run_daq.py,sha256=l8PYfRZRKNuDrTwmOC_rc2aSPDJrxcLQ4RWmfPRUjRI,4947
@@ -91,12 +93,12 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
91
93
  pyxcp/recorder/reader.hpp,sha256=qbz-LFg87h4yLaGiv_8zP-95UebbwICei0tvgHu6uII,5190
92
94
  pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
93
95
  pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=OlljGRPIPcSw8V0boPfZGdDXLhAXtFn-stusAeiYGno,378368
95
- pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=Kib-Z6wAxfpifsehS92zh9CIa5DmTZkosggAVFATCsU,380416
96
- pyxcp/recorder/rekorder.cp312-win_amd64.pyd,sha256=s-qSEgM0f72PhogiDxZY5zGXMbYnV5WiPf0o_aB8pjg,382976
97
- pyxcp/recorder/rekorder.cp313-win_amd64.pyd,sha256=Nszvc-XWYCM533bYmpDG7uMrEzFbZEsYLRU6CoCz7Tg,382976
98
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=pt4_SKKfYQNvyrgxFjUovW5VMXOZvJB4FMtLiFPCG8g,377856
99
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=2PNaXEC1VOLo9ZHuYHuHgj7X_P9NcZFkluYQPj7K8lk,364032
96
+ pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=NchL2HipGRFb2Ai-raUb7rgjzFXd6eZCDqVPXd23Mwk,378368
97
+ pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=2AwvKo8dsDjgTralpqQcFzPa52UIjjDiyJK6ZZXwJ1I,380416
98
+ pyxcp/recorder/rekorder.cp312-win_amd64.pyd,sha256=S_2PIRY6kC2eTYljIfKgb2bcPFX6Td2N3bYOKRC3w_o,382976
99
+ pyxcp/recorder/rekorder.cp313-win_amd64.pyd,sha256=yo4mLAKrwYF73OoIRkaAq9y0r6lpHYlHuwMUYXtO4ZU,382976
100
+ pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=_1VnBqbPMV2pnCdJAFJbvwQvcMOWeGZCzLypwsN-haI,377856
101
+ pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=4N4CqJdSlzQBLusSwg_n566FRo6M7JIUrYZwY8j3t44,364032
100
102
  pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
101
103
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
102
104
  pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
@@ -134,8 +136,8 @@ pyxcp/types.py,sha256=hY4Bb3qT3ZoabGnSKLY6S84MvVyuOCxwVONfs2skx2Y,26043
134
136
  pyxcp/utils.py,sha256=tujhw__jUSVIljHfHekN-nzERXC_1orVRBGKNyGqBuo,2961
135
137
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
138
  pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
137
- pyxcp-0.22.10.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
138
- pyxcp-0.22.10.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
139
- pyxcp-0.22.10.dist-info/METADATA,sha256=fOE_8OKC9r7-G424mSYcUxSqkgIrkRBT30Q2cMkj9zw,4076
140
- pyxcp-0.22.10.dist-info/WHEEL,sha256=RBxSuTKD__NDRUBZC1I4b5R6FamU3rQfymmsTgmeb3A,98
141
- pyxcp-0.22.10.dist-info/RECORD,,
139
+ pyxcp-0.22.11.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
140
+ pyxcp-0.22.11.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
141
+ pyxcp-0.22.11.dist-info/METADATA,sha256=0DJ5GVLdiuKA9LDdmtpy58xSLiImjhkHgqgmEisr6T8,4076
142
+ pyxcp-0.22.11.dist-info/WHEEL,sha256=RBxSuTKD__NDRUBZC1I4b5R6FamU3rQfymmsTgmeb3A,98
143
+ pyxcp-0.22.11.dist-info/RECORD,,