ztensor 0.1.2__py3-none-musllinux_1_2_armv7l.whl → 0.1.4__py3-none-musllinux_1_2_armv7l.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 ztensor might be problematic. Click here for more details.

ztensor/__init__.py CHANGED
@@ -92,12 +92,23 @@ class TensorMetadata:
92
92
  def __init__(self, meta_ptr):
93
93
  self._ptr = ffi.gc(meta_ptr, lib.ztensor_metadata_free)
94
94
  _check_ptr(self._ptr, "TensorMetadata constructor")
95
+ # Cache for properties to avoid repeated FFI calls
95
96
  self._name = None
96
97
  self._dtype_str = None
97
98
  self._shape = None
99
+ self._offset = None
100
+ self._size = None
101
+ self._layout = None
102
+ self._encoding = None
103
+ self._endianness = "not_checked"
104
+ self._checksum = "not_checked"
105
+
106
+ def __repr__(self):
107
+ return f"<TensorMetadata name='{self.name}' shape={self.shape} dtype='{self.dtype_str}'>"
98
108
 
99
109
  @property
100
110
  def name(self):
111
+ """The name of the tensor."""
101
112
  if self._name is None:
102
113
  name_ptr = lib.ztensor_metadata_get_name(self._ptr)
103
114
  _check_ptr(name_ptr, "get_name")
@@ -107,6 +118,7 @@ class TensorMetadata:
107
118
 
108
119
  @property
109
120
  def dtype_str(self):
121
+ """The zTensor dtype string (e.g., 'float32')."""
110
122
  if self._dtype_str is None:
111
123
  dtype_ptr = lib.ztensor_metadata_get_dtype_str(self._ptr)
112
124
  _check_ptr(dtype_ptr, "get_dtype_str")
@@ -116,7 +128,7 @@ class TensorMetadata:
116
128
 
117
129
  @property
118
130
  def dtype(self):
119
- """Returns the numpy dtype for this tensor."""
131
+ """The numpy dtype for this tensor."""
120
132
  dtype_str = self.dtype_str
121
133
  dt = DTYPE_ZT_TO_NP.get(dtype_str)
122
134
  if dt is None:
@@ -130,6 +142,7 @@ class TensorMetadata:
130
142
 
131
143
  @property
132
144
  def shape(self):
145
+ """The shape of the tensor as a tuple."""
133
146
  if self._shape is None:
134
147
  shape_len = lib.ztensor_metadata_get_shape_len(self._ptr)
135
148
  if shape_len > 0:
@@ -141,6 +154,64 @@ class TensorMetadata:
141
154
  self._shape = tuple()
142
155
  return self._shape
143
156
 
157
+ @property
158
+ def offset(self):
159
+ """The on-disk offset of the tensor data in bytes."""
160
+ if self._offset is None:
161
+ self._offset = lib.ztensor_metadata_get_offset(self._ptr)
162
+ return self._offset
163
+
164
+ @property
165
+ def size(self):
166
+ """The on-disk size of the tensor data in bytes (can be compressed size)."""
167
+ if self._size is None:
168
+ self._size = lib.ztensor_metadata_get_size(self._ptr)
169
+ return self._size
170
+
171
+ @property
172
+ def layout(self):
173
+ """The tensor layout as a string (e.g., 'dense')."""
174
+ if self._layout is None:
175
+ layout_ptr = lib.ztensor_metadata_get_layout_str(self._ptr)
176
+ _check_ptr(layout_ptr, "get_layout_str")
177
+ self._layout = ffi.string(layout_ptr).decode('utf-8')
178
+ lib.ztensor_free_string(layout_ptr)
179
+ return self._layout
180
+
181
+ @property
182
+ def encoding(self):
183
+ """The tensor encoding as a string (e.g., 'raw', 'zstd')."""
184
+ if self._encoding is None:
185
+ encoding_ptr = lib.ztensor_metadata_get_encoding_str(self._ptr)
186
+ _check_ptr(encoding_ptr, "get_encoding_str")
187
+ self._encoding = ffi.string(encoding_ptr).decode('utf-8')
188
+ lib.ztensor_free_string(encoding_ptr)
189
+ return self._encoding
190
+
191
+ @property
192
+ def endianness(self):
193
+ """The data endianness ('little', 'big') if applicable, else None."""
194
+ if self._endianness == "not_checked":
195
+ endian_ptr = lib.ztensor_metadata_get_data_endianness_str(self._ptr)
196
+ if endian_ptr == ffi.NULL:
197
+ self._endianness = None
198
+ else:
199
+ self._endianness = ffi.string(endian_ptr).decode('utf-8')
200
+ lib.ztensor_free_string(endian_ptr)
201
+ return self._endianness
202
+
203
+ @property
204
+ def checksum(self):
205
+ """The checksum string if present, else None."""
206
+ if self._checksum == "not_checked":
207
+ checksum_ptr = lib.ztensor_metadata_get_checksum_str(self._ptr)
208
+ if checksum_ptr == ffi.NULL:
209
+ self._checksum = None
210
+ else:
211
+ self._checksum = ffi.string(checksum_ptr).decode('utf-8')
212
+ lib.ztensor_free_string(checksum_ptr)
213
+ return self._checksum
214
+
144
215
 
145
216
  class Reader:
146
217
  """A Pythonic context manager for reading zTensor files."""
@@ -157,6 +228,39 @@ class Reader:
157
228
  def __exit__(self, exc_type, exc_val, exc_tb):
158
229
  self._ptr = None
159
230
 
231
+ def __len__(self):
232
+ """Returns the number of tensors in the file."""
233
+ if self._ptr is None: raise ZTensorError("Reader is closed.")
234
+ return lib.ztensor_reader_get_metadata_count(self._ptr)
235
+
236
+ def __iter__(self):
237
+ """Iterates over the metadata of all tensors in the file."""
238
+ if self._ptr is None: raise ZTensorError("Reader is closed.")
239
+ for i in range(len(self)):
240
+ yield self[i]
241
+
242
+ def __getitem__(self, index: int) -> TensorMetadata:
243
+ """Retrieves metadata for a tensor by its index."""
244
+ if self._ptr is None: raise ZTensorError("Reader is closed.")
245
+ if index >= len(self):
246
+ raise IndexError("Tensor index out of range")
247
+ meta_ptr = lib.ztensor_reader_get_metadata_by_index(self._ptr, index)
248
+ _check_ptr(meta_ptr, f"get_metadata_by_index: {index}")
249
+ return TensorMetadata(meta_ptr)
250
+
251
+ def list_tensors(self) -> list[TensorMetadata]:
252
+ """Returns a list of all TensorMetadata objects in the file."""
253
+ return list(self)
254
+
255
+ def get_tensor_names(self) -> list[str]:
256
+ """Returns a list of all tensor names in the file."""
257
+ if self._ptr is None: raise ZTensorError("Reader is closed.")
258
+ c_array_ptr = lib.ztensor_reader_get_all_tensor_names(self._ptr)
259
+ _check_ptr(c_array_ptr, "get_all_tensor_names")
260
+ c_array_ptr = ffi.gc(c_array_ptr, lib.ztensor_free_string_array)
261
+
262
+ return [ffi.string(c_array_ptr.strings[i]).decode('utf-8') for i in range(c_array_ptr.len)]
263
+
160
264
  def get_metadata(self, name: str) -> TensorMetadata:
161
265
  """Retrieves metadata for a tensor by its name."""
162
266
  if self._ptr is None: raise ZTensorError("Reader is closed.")
@@ -177,6 +281,7 @@ class Reader:
177
281
  Returns:
178
282
  np.ndarray or torch.Tensor: The tensor data.
179
283
  """
284
+ if self._ptr is None: raise ZTensorError("Reader is closed.")
180
285
  if to not in ['numpy', 'torch']:
181
286
  raise ValueError(f"Unsupported format: '{to}'. Choose 'numpy' or 'torch'.")
182
287
 
@@ -238,6 +343,7 @@ class Writer:
238
343
  if exc_type is None:
239
344
  self.finalize()
240
345
  else:
346
+ # If an error occurred, just free the handle without finalizing
241
347
  lib.ztensor_writer_free(self._ptr)
242
348
  self._ptr = None
243
349
 
@@ -294,7 +400,7 @@ class Writer:
294
400
  """Finalizes the zTensor file, writing the metadata index."""
295
401
  if not self._ptr: raise ZTensorError("Writer is already closed or finalized.")
296
402
  status = lib.ztensor_writer_finalize(self._ptr)
297
- self._ptr = None
403
+ self._ptr = None # The writer is consumed in Rust
298
404
  self._finalized = True
299
405
  _check_status(status, "finalize")
300
406
 
ztensor/ztensor/ffi.py CHANGED
@@ -3,8 +3,8 @@ import _cffi_backend
3
3
 
4
4
  ffi = _cffi_backend.FFI('ffi',
5
5
  _version = 0x2601,
6
- _types = b'\x00\x00\x29\x0D\x00\x00\x3D\x03\x00\x00\x3C\x03\x00\x00\x00\x0F\x00\x00\x2C\x0D\x00\x00\x3D\x03\x00\x00\x3F\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x06\x11\x00\x00\x00\x0F\x00\x00\x14\x0D\x00\x00\x06\x11\x00\x00\x00\x0F\x00\x00\x35\x0D\x00\x00\x02\x11\x00\x00\x00\x0F\x00\x00\x06\x0D\x00\x00\x00\x0F\x00\x00\x40\x0D\x00\x00\x3E\x03\x00\x00\x00\x0F\x00\x00\x40\x0D\x00\x00\x14\x11\x00\x00\x06\x11\x00\x00\x41\x03\x00\x00\x1C\x01\x00\x00\x06\x11\x00\x00\x42\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x1A\x0D\x00\x00\x02\x11\x00\x00\x00\x0F\x00\x00\x1A\x0D\x00\x00\x05\x11\x00\x00\x00\x0F\x00\x00\x38\x0D\x00\x00\x02\x11\x00\x00\x00\x0F\x00\x00\x44\x0D\x00\x00\x3B\x03\x00\x00\x00\x0F\x00\x00\x44\x0D\x00\x00\x3C\x03\x00\x00\x00\x0F\x00\x00\x44\x0D\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x44\x0D\x00\x00\x14\x11\x00\x00\x00\x0F\x00\x00\x44\x0D\x00\x00\x3F\x03\x00\x00\x00\x0F\x00\x00\x44\x0D\x00\x00\x41\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x02\x01\x00\x00\x07\x01\x00\x00\x18\x01\x00\x00\x04\x01\x00\x00\x44\x03\x00\x00\x00\x01',
7
- _globals = (b'\xFF\xFF\xFF\x1FALIGNMENT',64,b'\x00\x00\x34\x23ztensor_free_string',0,b'\x00\x00\x28\x23ztensor_free_tensor_view',0,b'\x00\x00\x37\x23ztensor_free_u64_array',0,b'\x00\x00\x11\x23ztensor_last_error_message',0,b'\x00\x00\x2B\x23ztensor_metadata_free',0,b'\x00\x00\x0E\x23ztensor_metadata_get_dtype_str',0,b'\x00\x00\x0E\x23ztensor_metadata_get_name',0,b'\x00\x00\x25\x23ztensor_metadata_get_shape_data',0,b'\x00\x00\x1F\x23ztensor_metadata_get_shape_len',0,b'\x00\x00\x2E\x23ztensor_reader_free',0,b'\x00\x00\x04\x23ztensor_reader_get_metadata_by_name',0,b'\x00\x00\x22\x23ztensor_reader_get_metadata_count',0,b'\x00\x00\x08\x23ztensor_reader_open',0,b'\x00\x00\x00\x23ztensor_reader_read_tensor_view',0,b'\x00\x00\x16\x23ztensor_writer_add_tensor',0,b'\x00\x00\x0B\x23ztensor_writer_create',0,b'\x00\x00\x13\x23ztensor_writer_finalize',0,b'\x00\x00\x31\x23ztensor_writer_free',0),
8
- _struct_unions = ((b'\x00\x00\x00\x3B\x00\x00\x00\x02CTensorDataView',b'\x00\x00\x1C\x11data',b'\x00\x00\x1A\x11len',b'\x00\x00\x43\x11_owner'),(b'\x00\x00\x00\x3C\x00\x00\x00\x10TensorMetadata',),(b'\x00\x00\x00\x3D\x00\x00\x00\x10ZTensorReader_BufReader_File',),(b'\x00\x00\x00\x3E\x00\x00\x00\x10ZTensorWriter_BufWriter_File',)),
9
- _typenames = (b'\x00\x00\x00\x3BCTensorDataView',b'\x00\x00\x00\x3CCTensorMetadata',b'\x00\x00\x00\x3DCZTensorReader',b'\x00\x00\x00\x3ECZTensorWriter',b'\x00\x00\x00\x3CTensorMetadata',b'\x00\x00\x00\x3DZTensorReader_BufReader_File',b'\x00\x00\x00\x3EZTensorWriter_BufWriter_File'),
6
+ _types = b'\x00\x00\x33\x0D\x00\x00\x4B\x03\x00\x00\x00\x0F\x00\x00\x36\x0D\x00\x00\x4B\x03\x00\x00\x4A\x03\x00\x00\x00\x0F\x00\x00\x39\x0D\x00\x00\x01\x11\x00\x00\x4E\x03\x00\x00\x00\x0F\x00\x00\x39\x0D\x00\x00\x01\x11\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x1B\x0D\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x42\x0D\x00\x00\x05\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x00\x0F\x00\x00\x4F\x0D\x00\x00\x4C\x03\x00\x00\x00\x0F\x00\x00\x4F\x0D\x00\x00\x1B\x11\x00\x00\x09\x11\x00\x00\x50\x03\x00\x00\x1C\x01\x00\x00\x09\x11\x00\x00\x51\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x0D\x0D\x00\x00\x05\x11\x00\x00\x00\x0F\x00\x00\x0D\x0D\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x45\x0D\x00\x00\x05\x11\x00\x00\x00\x0F\x00\x00\x50\x0D\x00\x00\x05\x11\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x48\x03\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x49\x03\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x4A\x03\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x04\x11\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x1B\x11\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x4E\x03\x00\x00\x00\x0F\x00\x00\x53\x0D\x00\x00\x50\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x04\x09\x00\x00\x42\x03\x00\x00\x02\x01\x00\x00\x07\x01\x00\x00\x18\x01\x00\x00\x04\x01\x00\x00\x53\x03\x00\x00\x00\x01',
7
+ _globals = (b'\xFF\xFF\xFF\x1FALIGNMENT',64,b'\x00\x00\x41\x23ztensor_free_string',0,b'\x00\x00\x32\x23ztensor_free_string_array',0,b'\x00\x00\x35\x23ztensor_free_tensor_view',0,b'\x00\x00\x44\x23ztensor_free_u64_array',0,b'\x00\x00\x18\x23ztensor_last_error_message',0,b'\x00\x00\x38\x23ztensor_metadata_free',0,b'\x00\x00\x15\x23ztensor_metadata_get_checksum_str',0,b'\x00\x00\x15\x23ztensor_metadata_get_data_endianness_str',0,b'\x00\x00\x15\x23ztensor_metadata_get_dtype_str',0,b'\x00\x00\x15\x23ztensor_metadata_get_encoding_str',0,b'\x00\x00\x15\x23ztensor_metadata_get_layout_str',0,b'\x00\x00\x15\x23ztensor_metadata_get_name',0,b'\x00\x00\x2F\x23ztensor_metadata_get_offset',0,b'\x00\x00\x2C\x23ztensor_metadata_get_shape_data',0,b'\x00\x00\x26\x23ztensor_metadata_get_shape_len',0,b'\x00\x00\x2F\x23ztensor_metadata_get_size',0,b'\x00\x00\x3B\x23ztensor_reader_free',0,b'\x00\x00\x00\x23ztensor_reader_get_all_tensor_names',0,b'\x00\x00\x0B\x23ztensor_reader_get_metadata_by_index',0,b'\x00\x00\x07\x23ztensor_reader_get_metadata_by_name',0,b'\x00\x00\x29\x23ztensor_reader_get_metadata_count',0,b'\x00\x00\x0F\x23ztensor_reader_open',0,b'\x00\x00\x03\x23ztensor_reader_read_tensor_view',0,b'\x00\x00\x1D\x23ztensor_writer_add_tensor',0,b'\x00\x00\x12\x23ztensor_writer_create',0,b'\x00\x00\x1A\x23ztensor_writer_finalize',0,b'\x00\x00\x3E\x23ztensor_writer_free',0),
8
+ _struct_unions = ((b'\x00\x00\x00\x48\x00\x00\x00\x02CStringArray',b'\x00\x00\x4D\x11strings',b'\x00\x00\x0D\x11len'),(b'\x00\x00\x00\x49\x00\x00\x00\x02CTensorDataView',b'\x00\x00\x23\x11data',b'\x00\x00\x0D\x11len',b'\x00\x00\x52\x11_owner'),(b'\x00\x00\x00\x4A\x00\x00\x00\x10TensorMetadata',),(b'\x00\x00\x00\x4B\x00\x00\x00\x10ZTensorReader_BufReader_File',),(b'\x00\x00\x00\x4C\x00\x00\x00\x10ZTensorWriter_BufWriter_File',)),
9
+ _typenames = (b'\x00\x00\x00\x48CStringArray',b'\x00\x00\x00\x49CTensorDataView',b'\x00\x00\x00\x4ACTensorMetadata',b'\x00\x00\x00\x4BCZTensorReader',b'\x00\x00\x00\x4CCZTensorWriter',b'\x00\x00\x00\x4ATensorMetadata',b'\x00\x00\x00\x4BZTensorReader_BufReader_File',b'\x00\x00\x00\x4CZTensorWriter_BufWriter_File'),
10
10
  )
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ztensor
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -0,0 +1,9 @@
1
+ ztensor-0.1.4.dist-info/METADATA,sha256=ECD-zbYFWEiDg5HYTbi2hthPYh1xKG9y5tBd2VZPSX8,4446
2
+ ztensor-0.1.4.dist-info/WHEEL,sha256=iTWsRz1hnXDQdoNmAgkYGjvp2bRaBb4-srKwYiDluzw,104
3
+ ztensor-0.1.4.dist-info/licenses/LICENSE,sha256=AoeyV1LzTyOz9sbr6uOzk_P0lW963DvhJHnVNVQlI3Y,1063
4
+ ztensor.libs/libgcc_s-5b5488a6.so.1,sha256=HGKUsVmTeNAxEdSy7Ua5Vh_I9FN3RCbPWzvZ7H_TrwE,2749061
5
+ ztensor/__init__.py,sha256=8n2-jVn_Pi95MmfuZeo5K0FKOQwWQLa1hHXM5kBPs2c,15794
6
+ ztensor/ztensor/__init__.py,sha256=sIpB0pJYFX20TdZapIoPMxqMz37wKJyxCkAlTemWDq4,140
7
+ ztensor/ztensor/ffi.py,sha256=xK_OkOYQEMtfTRag-zlNCSLLj2JHB14qMc1cbtqTOB8,3601
8
+ ztensor/ztensor/libztensor.so,sha256=v03q1TASiuFenBWXRXrTQyhh2-UvTVu6thQwQuSFiKg,1636121
9
+ ztensor-0.1.4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: maturin (1.9.0)
2
+ Generator: maturin (1.9.1)
3
3
  Root-Is-Purelib: false
4
4
  Tag: py3-none-musllinux_1_2_armv7l
@@ -1,9 +0,0 @@
1
- ztensor-0.1.2.dist-info/METADATA,sha256=zJKbwLwUsstAXn5NM2OxH7i4r1En_3gQyNjkSC69lK8,4446
2
- ztensor-0.1.2.dist-info/WHEEL,sha256=uk6lXffjnM20NjdJS1j5pULyv9smQtZKAlwiwmTYIRE,104
3
- ztensor-0.1.2.dist-info/licenses/LICENSE,sha256=AoeyV1LzTyOz9sbr6uOzk_P0lW963DvhJHnVNVQlI3Y,1063
4
- ztensor.libs/libgcc_s-5b5488a6.so.1,sha256=HGKUsVmTeNAxEdSy7Ua5Vh_I9FN3RCbPWzvZ7H_TrwE,2749061
5
- ztensor/__init__.py,sha256=60wRwWWC_urfj2baZVHy_rGoYEFTPwW3pcSPmrvgJKs,11298
6
- ztensor/ztensor/__init__.py,sha256=sIpB0pJYFX20TdZapIoPMxqMz37wKJyxCkAlTemWDq4,140
7
- ztensor/ztensor/ffi.py,sha256=J7CG26lx0Xu0IjYR7GWev-BDgGQXseKA4cjkh0IhnLE,2746
8
- ztensor/ztensor/libztensor.so,sha256=9bgmcP7Tj8o3loKKYgTfK6kzL1wcgxoKCTykU6CSvEI,1611249
9
- ztensor-0.1.2.dist-info/RECORD,,