bool-hybrid-array 9.10.10__py3-none-any.whl → 9.11.1__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.
- bool_hybrid_array/__init__.py +10 -5
- bool_hybrid_array/__main__.py +21 -0
- bool_hybrid_array/core.py +903 -856
- bool_hybrid_array/int_array/__init__.py +90 -41
- {bool_hybrid_array-9.10.10.dist-info → bool_hybrid_array-9.11.1.dist-info}/METADATA +57 -7
- bool_hybrid_array-9.11.1.dist-info/RECORD +10 -0
- bool_hybrid_array-9.10.10.dist-info/RECORD +0 -10
- {bool_hybrid_array-9.10.10.dist-info → bool_hybrid_array-9.11.1.dist-info}/WHEEL +0 -0
- {bool_hybrid_array-9.10.10.dist-info → bool_hybrid_array-9.11.1.dist-info}/licenses/LICENSE +0 -0
- {bool_hybrid_array-9.10.10.dist-info → bool_hybrid_array-9.11.1.dist-info}/top_level.txt +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from ..core import *
|
|
2
4
|
import builtins
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class IntBitTag(BHA_Bool, metaclass=ResurrectMeta):
|
|
5
|
+
class IntBitTag(BHA_bool, metaclass=ResurrectMeta):
|
|
6
6
|
def __str__(self):
|
|
7
7
|
return "'-1'" if (hasattr(self, 'is_sign_bit') and self.is_sign_bit and self) else "'1'" if self else "'0'"
|
|
8
8
|
__repr__ = __str__
|
|
9
|
-
|
|
9
|
+
__del__ = lambda self:self
|
|
10
10
|
class IntHybridArray(BoolHybridArray):
|
|
11
11
|
def __init__(self, int_array: list[int], bit_length: int = 8):
|
|
12
12
|
self.bit_length = bit_length
|
|
@@ -37,13 +37,17 @@ class IntHybridArray(BoolHybridArray):
|
|
|
37
37
|
carry = 0 if num_bits[j] else 1
|
|
38
38
|
bool_data.append(sign_bit)
|
|
39
39
|
bool_data.extend(num_bits)
|
|
40
|
-
|
|
41
|
-
super().__init__(
|
|
42
|
-
for idx in range(
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
self.total_bits = len(bool_data)
|
|
41
|
+
super().__init__(0, self.total_bits, False, IntBitTag, False)
|
|
42
|
+
for idx in range(self.total_bits):
|
|
43
|
+
if idx < self.size:
|
|
44
|
+
super().__setitem__(idx, bool_data[idx])
|
|
45
|
+
else:
|
|
46
|
+
super().append(bool_data[idx])
|
|
47
|
+
for i in range(0, self.total_bits, self.bit_length):
|
|
45
48
|
if i < self.size:
|
|
46
|
-
|
|
49
|
+
bit_tag = super().__getitem__(i)
|
|
50
|
+
bit_tag.is_sign_bit = True
|
|
47
51
|
|
|
48
52
|
def to_int(self, bit_chunk):
|
|
49
53
|
sign_bit = bit_chunk[0].value
|
|
@@ -72,21 +76,22 @@ class IntHybridArray(BoolHybridArray):
|
|
|
72
76
|
start, stop, step = key.indices(len(self))
|
|
73
77
|
result = []
|
|
74
78
|
for i in range(start, stop, step):
|
|
75
|
-
|
|
76
|
-
bit_idx_in_block = i % self.bit_length
|
|
77
|
-
block_start = block_idx * self.bit_length
|
|
79
|
+
block_start = i * self.bit_length
|
|
78
80
|
block_end = block_start + self.bit_length
|
|
79
|
-
|
|
81
|
+
if block_end > self.size:
|
|
82
|
+
raise IndexError("索引超出范围")
|
|
83
|
+
bit_chunk = [super(self.__class__, self).__getitem__(j) for j in range(block_start, block_end)]
|
|
80
84
|
num = self.to_int(bit_chunk)
|
|
81
85
|
result.append(num)
|
|
82
86
|
return IntHybridArray(result, self.bit_length)
|
|
83
87
|
key = key if key >= 0 else key + len(self)
|
|
84
88
|
if not (0 <= key < len(self)):
|
|
85
89
|
raise IndexError("索引超出范围")
|
|
86
|
-
|
|
87
|
-
block_start = block_idx * self.bit_length
|
|
90
|
+
block_start = key * self.bit_length
|
|
88
91
|
block_end = block_start + self.bit_length
|
|
89
|
-
|
|
92
|
+
if block_end > self.size:
|
|
93
|
+
raise IndexError("索引超出范围")
|
|
94
|
+
bit_chunk = [super(self.__class__, self).__getitem__(j) for j in range(block_start, block_end)]
|
|
90
95
|
return self.to_int(bit_chunk)
|
|
91
96
|
|
|
92
97
|
def __setitem__(self, key, value):
|
|
@@ -95,16 +100,36 @@ class IntHybridArray(BoolHybridArray):
|
|
|
95
100
|
start, stop, step = key.indices(len(self))
|
|
96
101
|
values = list(value) if isinstance(value, (list, tuple, IntHybridArray)) else [value] * ((stop - start + step - 1) // step)
|
|
97
102
|
idx = 0
|
|
98
|
-
for
|
|
99
|
-
|
|
103
|
+
for int_idx in range(start, stop, step):
|
|
104
|
+
block_start = int_idx * self.bit_length
|
|
105
|
+
block_end = block_start + self.bit_length
|
|
106
|
+
if block_end > self.size:
|
|
107
|
+
raise IndexError("索引超出范围")
|
|
108
|
+
num = values[idx % len(values)]
|
|
109
|
+
if num >= 0:
|
|
110
|
+
sign_bit = False
|
|
111
|
+
num_bits = [bool((num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
112
|
+
else:
|
|
113
|
+
sign_bit = True
|
|
114
|
+
abs_num = abs(num)
|
|
115
|
+
num_bits = [not bool((abs_num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
116
|
+
carry = 1
|
|
117
|
+
for j in range(len(num_bits)):
|
|
118
|
+
if carry:
|
|
119
|
+
num_bits[j] = not num_bits[j]
|
|
120
|
+
carry = 0 if num_bits[j] else 1
|
|
121
|
+
bool_data = [sign_bit] + num_bits
|
|
122
|
+
for bit_idx in range(self.bit_length):
|
|
123
|
+
super().__setitem__(block_start + bit_idx, bool_data[bit_idx])
|
|
100
124
|
idx += 1
|
|
101
125
|
return
|
|
102
126
|
key = key if key >= 0 else key + len(self)
|
|
103
127
|
if not (0 <= key < len(self)):
|
|
104
128
|
raise IndexError("索引超出范围")
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
129
|
+
block_start = key * self.bit_length
|
|
130
|
+
block_end = block_start + self.bit_length
|
|
131
|
+
if block_end > self.size:
|
|
132
|
+
raise IndexError("索引超出范围")
|
|
108
133
|
num = value
|
|
109
134
|
if num >= 0:
|
|
110
135
|
sign_bit = False
|
|
@@ -118,28 +143,52 @@ class IntHybridArray(BoolHybridArray):
|
|
|
118
143
|
if carry:
|
|
119
144
|
num_bits[j] = not num_bits[j]
|
|
120
145
|
carry = 0 if num_bits[j] else 1
|
|
121
|
-
bool_data
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
self[block_start + idx] = bool_data[idx]
|
|
146
|
+
bool_data = [sign_bit] + num_bits
|
|
147
|
+
for bit_idx in range(self.bit_length):
|
|
148
|
+
super(self.__class__, self).__setitem__(block_start + bit_idx, bool_data[bit_idx])
|
|
125
149
|
|
|
126
150
|
def __iter__(self):
|
|
127
|
-
|
|
128
|
-
bit_chunk = [self[j] for j in range(i, i + self.bit_length)]
|
|
129
|
-
yield self.to_int(bit_chunk)
|
|
151
|
+
return map(self.__getitem__,range(len(self)))
|
|
130
152
|
|
|
131
153
|
def __str__(self):
|
|
132
154
|
return f"IntHybridArray([{', '.join(map(str, self))}])"
|
|
155
|
+
__repr__ = __str__
|
|
133
156
|
|
|
134
157
|
def __len__(self):
|
|
135
|
-
return self.
|
|
136
|
-
|
|
137
|
-
if
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
158
|
+
return self.total_bits // self.bit_length
|
|
159
|
+
def __delitem__(self, index: int = -1):
|
|
160
|
+
index = index if index >= 0 else index + len(self)
|
|
161
|
+
if not (0 <= index < len(self)):
|
|
162
|
+
raise IndexError("删除索引超出范围")
|
|
163
|
+
target_num = self[index]
|
|
164
|
+
pop_bit_start = index * self.bit_length
|
|
165
|
+
pop_bit_end = pop_bit_start + self.bit_length
|
|
166
|
+
for _ in range(self.bit_length):
|
|
167
|
+
super().__delitem__(pop_bit_start)
|
|
168
|
+
self.total_bits -= self.bit_length
|
|
169
|
+
def index(self, value):
|
|
170
|
+
value = int(value)
|
|
171
|
+
x = f"{value} 不在 IntHybridArray 中"
|
|
172
|
+
for idx in range(len(self)+1>>1):
|
|
173
|
+
if self[idx] == value:
|
|
174
|
+
return idx
|
|
175
|
+
elif self[-idx] == value:
|
|
176
|
+
x = len(self)-idx
|
|
177
|
+
if x != f"{value} 不在 IntHybridArray 中":
|
|
178
|
+
return x
|
|
179
|
+
raise ValueError(x)
|
|
180
|
+
def rindex(self, value):
|
|
181
|
+
value = int(value)
|
|
182
|
+
x = f"{value} 不在 IntHybridArray 中"
|
|
183
|
+
for idx in range(len(self)+1>>1):
|
|
184
|
+
if self[-idx] == value:
|
|
185
|
+
return -idx
|
|
186
|
+
elif self[idx] == value:
|
|
187
|
+
x = -(len(self)-idx)
|
|
188
|
+
if x != f"{value} 不在 IntHybridArray 中":
|
|
189
|
+
return x
|
|
190
|
+
raise ValueError(x)
|
|
191
|
+
def append(self,v):
|
|
192
|
+
self.self.total_bits += self.bit_length
|
|
193
|
+
self[-1] = v
|
|
194
|
+
__all__ = list(globals())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bool-hybrid-array
|
|
3
|
-
Version: 9.
|
|
3
|
+
Version: 9.11.1
|
|
4
4
|
Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
|
|
5
5
|
Home-page: https://github.com/BKsell/bool-hybrid-array
|
|
6
6
|
Author: 蔡靖杰
|
|
@@ -16,6 +16,10 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
22
|
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
19
23
|
Classifier: License :: OSI Approved :: MIT License
|
|
20
24
|
Classifier: Operating System :: OS Independent
|
|
21
25
|
Requires-Python: >=3.8
|
|
@@ -23,6 +27,8 @@ Description-Content-Type: text/markdown
|
|
|
23
27
|
License-File: LICENSE
|
|
24
28
|
Requires-Dist: numpy>=1.19.0
|
|
25
29
|
Provides-Extra: int-array
|
|
30
|
+
Provides-Extra: numba-opt
|
|
31
|
+
Requires-Dist: numba>=0.55.0; extra == "numba-opt"
|
|
26
32
|
Dynamic: author
|
|
27
33
|
Dynamic: author-email
|
|
28
34
|
Dynamic: classifier
|
|
@@ -39,10 +45,17 @@ Dynamic: summary
|
|
|
39
45
|
|
|
40
46
|
# BoolHybridArray:高效的布尔混合数组库
|
|
41
47
|
|
|
48
|
+
<!-- 月下载量(核心推荐)+ 周下载量 + 总下载量 -->
|
|
49
|
+
[](https://pepy.tech/project/bool-hybrid-array)
|
|
50
|
+
[](https://pepy.tech/project/bool-hybrid-array)
|
|
51
|
+
[](https://pepy.tech/project/bool-hybrid-array)
|
|
52
|
+
|
|
42
53
|
一个专为布尔值优化的数组类,能够根据数据特征自动在密集存储和稀疏存储模式间切换,兼顾性能和内存效率。
|
|
43
54
|
|
|
44
55
|
## ***注:大版本号更新并非不兼容更新,而是重大更新***
|
|
45
56
|
|
|
57
|
+
注:当API完全稳定时就会发布版本规则较严谨的new-1.0.0版本,预期为10.x版本结束后
|
|
58
|
+
|
|
46
59
|
***注意:目前社区中若存在名称类似(如包含 “bool-hybrid-array”+ 后缀、boolean\_array、validate.io-boolean-array)的库,均与本项目(bool-hybrid-array)无关联,本项目的所有功能设计、代码实现均为独立开发;***
|
|
47
60
|
***其他平台里的类似名库绝不是我的库***
|
|
48
61
|
|
|
@@ -140,7 +153,7 @@ big_arr = BoolHybridArr([i % 100 == 0 for i in range(10000)])
|
|
|
140
153
|
|
|
141
154
|
# 查看存储模式(此时应为稀疏模式)
|
|
142
155
|
|
|
143
|
-
print(repr(big_arr)) # 输出: BoolHybridArray(split_index=100,size=10000,is_sparse=True,small_len=
|
|
156
|
+
print(repr(big_arr)) # 输出: BoolHybridArray(split_index=100, size=10000, is_sparse=True, small_len=101, large_len=98)
|
|
144
157
|
|
|
145
158
|
# 自动优化存储
|
|
146
159
|
|
|
@@ -394,7 +407,21 @@ except:print("请先安装numba库!!!")
|
|
|
394
407
|
|
|
395
408
|
#int_array模块(9.10.10新增):
|
|
396
409
|
|
|
397
|
-
|
|
410
|
+
max_num = (1 << 256) - 1
|
|
411
|
+
min_num = -max_num
|
|
412
|
+
|
|
413
|
+
# 1. IntHybridArray:257位完美存储
|
|
414
|
+
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
|
|
415
|
+
print("✅ IntHybridArray存储结果:")
|
|
416
|
+
print(f"最大值:{arr_hybrid[0]}")
|
|
417
|
+
print(f"最小值:{arr_hybrid[1]}")
|
|
418
|
+
|
|
419
|
+
# 2. NumPy:用最大的int64尝试存储(必然失败)
|
|
420
|
+
try:
|
|
421
|
+
arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
|
|
422
|
+
print("\n❌ NumPy存储结果:", arr_np)
|
|
423
|
+
except OverflowError as e:
|
|
424
|
+
print(f"\n❌ NumPy存储失败:{e}")
|
|
398
425
|
|
|
399
426
|
```
|
|
400
427
|
|
|
@@ -409,7 +436,7 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
409
436
|
|
|
410
437
|
## 版本历史
|
|
411
438
|
|
|
412
|
-
|
|
439
|
+
- **7.8.13**:PyPI上的初始版本,支持基本功能和自动存储优化
|
|
413
440
|
* **7.9.0**:添加TruesArray和FalsesArray
|
|
414
441
|
* **7.9.1**:修复介绍的bug,增加copy功能
|
|
415
442
|
* **7.9.2**:新增find()方法
|
|
@@ -451,7 +478,7 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
451
478
|
* **7.14.4**:修复in的错误×3
|
|
452
479
|
* **7.14.5**:修复in的错误×4
|
|
453
480
|
* **7.14.6**:优化arr.large的类型
|
|
454
|
-
|
|
481
|
+
- **8.0.0**:兼容numpy数组
|
|
455
482
|
* **8.0.1**:修复8.0.0兼容numpy数组时没有形状参数的问题
|
|
456
483
|
* **8.0.2**:移除bool_hybrid_dtype,改用object
|
|
457
484
|
* **8.1.0**:利用ctypes加速密集部分的一些方法
|
|
@@ -463,7 +490,7 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
463
490
|
* **8.2.0**:支持哈希
|
|
464
491
|
* **8.2.1**:修复8.2.0版本中的NameError
|
|
465
492
|
* **8.2.2**:修复8.2.1版本中的IndexError
|
|
466
|
-
|
|
493
|
+
- --9.0.0--:详情见上
|
|
467
494
|
* **9.0.1**:小更新,优化optimize方法
|
|
468
495
|
* **9.1.0**:新增二维数组的optimize与memory\_usage,优化二维数组的位运算,给BHA\_Bool新增__rand__、**ror**、__rxor__等等
|
|
469
496
|
* **9.1.1**:修复9.1.0版本中的TypeError: unsupported operand type(s) for +: 'int' and 'method'错误
|
|
@@ -541,6 +568,25 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
541
568
|
* **9.10.8**:给Create_BHA新增了mmap优化
|
|
542
569
|
* **9.10.9**:修复9.10.8版本中的NameError错误
|
|
543
570
|
* **9.10.10**:新增int_array模块
|
|
571
|
+
* **9.10.11**:修复NameError: name 'int_array' is not defined. Did you mean: 'bytearray'?的错误
|
|
572
|
+
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
573
|
+
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
574
|
+
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
575
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
576
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
577
|
+
* **9.10.17**:给保护字典添加__import__方法,支持from导入
|
|
578
|
+
* **9.10.18**:新增BoolHybridArray的序列化和反序列化支持
|
|
579
|
+
* **9.10.18.post1**:修复TypeError: cannot pickle 'itertools._tee' object错误
|
|
580
|
+
* **9.10.18.post2**:尝试修复“满屏错误”的问题
|
|
581
|
+
* **9.10.18.post3**:尝试修复“满屏错误”的问题×2
|
|
582
|
+
* **9.10.18.post4**:尝试修复“满屏错误”的问题×3
|
|
583
|
+
* **9.10.19**:和9.10.18.post4相同,正式版本发布
|
|
584
|
+
* **9.10.20**:优化性能,增加BHA_jit_log日志
|
|
585
|
+
* **9.10.21**:优化Ask_BHA,移除BHA_jit_log日志
|
|
586
|
+
* **9.10.22**:进一步优化Ask_BHA的性能
|
|
587
|
+
* **9.11.0**:新增对7.3.10以上版本的PyPy解释器的支持
|
|
588
|
+
* **9.11.1**:修复PyPy解释器下的保护机制过度保护bug
|
|
589
|
+
|
|
544
590
|
|
|
545
591
|
|
|
546
592
|
|
|
@@ -558,7 +604,11 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
558
604
|
* A:BoolHybridArray是本库中的**核心类**,所有函数都是围绕他进行的,但需要`split_index`,`size`,`is_sparse`;
|
|
559
605
|
BoolHybridArr是一个**函数**,用于把一个可迭代对象转为`BoolHybridArray`类
|
|
560
606
|
* Q:为什么不建议把太大的本类型数组打印?
|
|
561
|
-
* A
|
|
607
|
+
* A:虽然BoolHybridArray类型数组省内存,但字符串不省内存,一个`True`要4字节,一个`False`要5字节,连逗号都要占1字节(`numpy.ndarray`:我都比字符串省内存)
|
|
608
|
+
- Q:为什么使用在Windows终端使用PyPy时建议先调用`chcp 65001`再启动PyPy?
|
|
609
|
+
* A:因为本库有很多的的中文报错和打印,项目里也可能会有。Windows终端里的PyPy默认是GBK编码,有中文时会乱码。chcp 65001可以切换到UTF-8编码,防止乱码。
|
|
610
|
+
|
|
611
|
+
|
|
562
612
|
|
|
563
613
|
## 源代码和原理
|
|
564
614
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
bool_hybrid_array/__init__.py,sha256=MEv3Ygh5XtBGxhu6oQICjkWyWSFUkU3xIyZSn0RKYDY,1038
|
|
2
|
+
bool_hybrid_array/__main__.py,sha256=3bnJ2IQctrXWQ1WyBQvh1w882_k3b84LGLL8yUNkXws,8447
|
|
3
|
+
bool_hybrid_array/core.py,sha256=nZbzHWLQhQpsQ1YVgqyvcw3znKlEZZA4QrSiSraOJN8,39343
|
|
4
|
+
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
5
|
+
bool_hybrid_array/int_array/__init__.py,sha256=KejzB6xqUjLkoDhihrtyoBXL_Rqom1XBIDtXpQeIQEg,8192
|
|
6
|
+
bool_hybrid_array-9.11.1.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
7
|
+
bool_hybrid_array-9.11.1.dist-info/METADATA,sha256=42nd7b4N11jcmkzdp0Y0o0jx5FMGpkJnJmnbSOiU49Y,24794
|
|
8
|
+
bool_hybrid_array-9.11.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
9
|
+
bool_hybrid_array-9.11.1.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
10
|
+
bool_hybrid_array-9.11.1.dist-info/RECORD,,
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
bool_hybrid_array/__init__.py,sha256=Ge5xU9hWokXo6_tOEychWsFtuCSM2ttCbTXIAVpAsBc,757
|
|
2
|
-
bool_hybrid_array/__main__.py,sha256=pE9jECC2i2_13HJnI3qPav1YaggfUs-gdScabvRpD9I,7728
|
|
3
|
-
bool_hybrid_array/core.py,sha256=zcqPqb6AhUFqzb0PPXQtisXpXc2Zd50Xsh8ooOvpwO0,36526
|
|
4
|
-
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
5
|
-
bool_hybrid_array/int_array/__init__.py,sha256=S1bG3kmeRqNkAbChCudxP_zAWBVbMJwvOKi39kYt-Rw,5766
|
|
6
|
-
bool_hybrid_array-9.10.10.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
7
|
-
bool_hybrid_array-9.10.10.dist-info/METADATA,sha256=5v3IJIUYsCVkXhjgzWDsS_8H4T8XZF9L0c6z96X4Y6M,21905
|
|
8
|
-
bool_hybrid_array-9.10.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
9
|
-
bool_hybrid_array-9.10.10.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
10
|
-
bool_hybrid_array-9.10.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|