bool-hybrid-array 9.11.8__py3-none-any.whl → 9.11.10__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 +1 -1
- bool_hybrid_array/__main__.py +1 -3
- bool_hybrid_array/_cppiostream.py +216 -0
- bool_hybrid_array/compile_core.pyd +0 -0
- bool_hybrid_array/core.c +1360 -1279
- bool_hybrid_array/core.py +12 -8
- bool_hybrid_array/int_array/__init__.py +2 -153
- bool_hybrid_array/int_array/core.py +154 -0
- {bool_hybrid_array-9.11.8.dist-info → bool_hybrid_array-9.11.10.dist-info}/METADATA +3 -1
- bool_hybrid_array-9.11.10.dist-info/RECORD +14 -0
- {bool_hybrid_array-9.11.8.dist-info → bool_hybrid_array-9.11.10.dist-info}/WHEEL +1 -1
- bool_hybrid_array-9.11.8.dist-info/RECORD +0 -12
- {bool_hybrid_array-9.11.8.dist-info → bool_hybrid_array-9.11.10.dist-info}/licenses/LICENSE +0 -0
- {bool_hybrid_array-9.11.8.dist-info → bool_hybrid_array-9.11.10.dist-info}/top_level.txt +0 -0
bool_hybrid_array/core.py
CHANGED
|
@@ -7,7 +7,7 @@ except:
|
|
|
7
7
|
import builtins
|
|
8
8
|
from types import MappingProxyType
|
|
9
9
|
import array,bisect,numpy as np
|
|
10
|
-
from collections.abc import MutableSequence,Iterable,Generator,Iterator,Sequence
|
|
10
|
+
from collections.abc import MutableSequence,Iterable,Generator,Iterator,Sequence,Collection
|
|
11
11
|
import itertools,copy,sys,math,weakref,random,mmap,os
|
|
12
12
|
from functools import reduce
|
|
13
13
|
import operator,ctypes,gc,abc,types
|
|
@@ -329,7 +329,7 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):# type:
|
|
|
329
329
|
return f"BoolHybridArr([{','.join(map(str,self))}])"
|
|
330
330
|
def __reversed__(self):
|
|
331
331
|
if not self:return BHA_Iterator([])
|
|
332
|
-
return BHA_Iterator(map(self.__getitem__,range(-1,-1,-1)))
|
|
332
|
+
return BHA_Iterator(map(self.__getitem__,range(self.size-1,-1,-1)))
|
|
333
333
|
def insert(self, key: int, value: Any) -> None:
|
|
334
334
|
value = bool(value)
|
|
335
335
|
key = key if key >= 0 else key + self.size
|
|
@@ -766,7 +766,7 @@ class ProtectedBuiltinsDict(dict,metaclass=ResurrectMeta):# type: ignore
|
|
|
766
766
|
"TruesArray", "FalsesArray", "ProtectedBuiltinsDict", "builtins",
|
|
767
767
|
"__builtins__", "__dict__","ResurrectMeta","math",
|
|
768
768
|
"np","protected_names","BHA_Function",
|
|
769
|
-
"__class__","Ask_BHA","Create_BHA","Ask_arr","numba_opt","bool_hybrid_array"),
|
|
769
|
+
"__class__","Ask_BHA","Create_BHA","Ask_arr","numba_opt","bool_hybrid_array","BHA_Queue","cin","cout","endl"),
|
|
770
770
|
name = 'builtins', **kwargs):
|
|
771
771
|
super().__init__(*args, **kwargs)
|
|
772
772
|
if name == 'builtins':
|
|
@@ -867,7 +867,7 @@ def Ask_BHA(path):
|
|
|
867
867
|
if len(temp) == 1:
|
|
868
868
|
return temp[0]
|
|
869
869
|
return temp
|
|
870
|
-
class BHA_Queue:
|
|
870
|
+
class BHA_Queue(Collection,metaclass = ResurrectMeta):
|
|
871
871
|
def __init__(self,data = (),*a,**k):
|
|
872
872
|
self.a = BoolHybridArr(data,*a,**k)
|
|
873
873
|
self.b = BoolHybridArr([],*a,**k)
|
|
@@ -878,12 +878,11 @@ class BHA_Queue:
|
|
|
878
878
|
self.a.push(v)
|
|
879
879
|
def dequeue(self):
|
|
880
880
|
if self.b:
|
|
881
|
-
print("正常执行")
|
|
882
881
|
return self.b.pop()
|
|
883
882
|
elif self.a:
|
|
884
|
-
|
|
885
|
-
self.b
|
|
886
|
-
|
|
883
|
+
Type = self.b.Type
|
|
884
|
+
self.b = BoolHybridArr(reversed(self.a))
|
|
885
|
+
self.b.Type = Type
|
|
887
886
|
self.a.clear()
|
|
888
887
|
return self.dequeue()
|
|
889
888
|
else:
|
|
@@ -935,6 +934,7 @@ def numba_opt():
|
|
|
935
934
|
])
|
|
936
935
|
bisect.bisect_left = numba.njit(sig, cache=True)(bisect.bisect_left)
|
|
937
936
|
bisect.bisect_right = numba.njit(sig, cache=True)(bisect.bisect_right)
|
|
937
|
+
from ._cppiostream import cin,cout,endl
|
|
938
938
|
builtins.np = np
|
|
939
939
|
builtins.T = BHA_bool(1)
|
|
940
940
|
builtins.F = BHA_bool(0)
|
|
@@ -952,6 +952,10 @@ builtins.BHA_Function = BHA_Function
|
|
|
952
952
|
builtins.Ask_BHA = Ask_BHA
|
|
953
953
|
builtins.Create_BHA = Create_BHA
|
|
954
954
|
builtins.numba_opt = numba_opt
|
|
955
|
+
builtins.cin = cin
|
|
956
|
+
builtins.cout = cout
|
|
957
|
+
builtins.endl = endl
|
|
958
|
+
builtins.BHA_Queue = BHA_Queue
|
|
955
959
|
Tid,Fid = id(builtins.T),id(builtins.F)
|
|
956
960
|
original_id = builtins.id
|
|
957
961
|
def fake_id(obj):
|
|
@@ -1,155 +1,4 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
from
|
|
3
|
-
from
|
|
4
|
-
import builtins
|
|
5
|
-
class IntBitTag(BHA_bool, metaclass=ResurrectMeta):
|
|
6
|
-
def __str__(self):
|
|
7
|
-
return "'-1'" if (hasattr(self, 'is_sign_bit') and self.is_sign_bit and self) else "'1'" if self else "'0'"
|
|
8
|
-
__repr__ = __str__
|
|
9
|
-
__del__ = lambda self:self
|
|
10
|
-
class IntHybridArray(BoolHybridArray):
|
|
11
|
-
def __init__(self, int_array: list[int], bit_length: int = 8):
|
|
12
|
-
self.bit_length = bit_length
|
|
13
|
-
bool_data = []
|
|
14
|
-
max_required_bits = 1
|
|
15
|
-
for num in int_array:
|
|
16
|
-
if num == 0:
|
|
17
|
-
required_bits = 1
|
|
18
|
-
else:
|
|
19
|
-
abs_num = abs(num)
|
|
20
|
-
num_bits_needed = abs_num.bit_length()
|
|
21
|
-
required_bits = 1 + num_bits_needed
|
|
22
|
-
if required_bits > max_required_bits:
|
|
23
|
-
max_required_bits = required_bits
|
|
24
|
-
self.bit_length = max_required_bits
|
|
25
|
-
for num in int_array:
|
|
26
|
-
if num >= 0:
|
|
27
|
-
sign_bit = False
|
|
28
|
-
num_bits = [bool((num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
29
|
-
else:
|
|
30
|
-
sign_bit = True
|
|
31
|
-
abs_num = abs(num)
|
|
32
|
-
num_bits = [not bool((abs_num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
33
|
-
carry = 1
|
|
34
|
-
for j in range(len(num_bits)):
|
|
35
|
-
if carry:
|
|
36
|
-
num_bits[j] = not num_bits[j]
|
|
37
|
-
carry = 0 if num_bits[j] else 1
|
|
38
|
-
bool_data.append(sign_bit)
|
|
39
|
-
bool_data.extend(num_bits)
|
|
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):
|
|
48
|
-
if i < self.size:
|
|
49
|
-
bit_tag = super().__getitem__(i)
|
|
50
|
-
bit_tag.is_sign_bit = True
|
|
51
|
-
|
|
52
|
-
def to_int(self, bit_chunk):
|
|
53
|
-
sign_bit = bit_chunk[0].value
|
|
54
|
-
num_bits = [bit.value for bit in bit_chunk[1:]]
|
|
55
|
-
if not sign_bit:
|
|
56
|
-
num = 0
|
|
57
|
-
for j in range(len(num_bits)):
|
|
58
|
-
if num_bits[j]:
|
|
59
|
-
num += (1 << j)
|
|
60
|
-
else:
|
|
61
|
-
num_bits_inv = [not b for b in num_bits]
|
|
62
|
-
carry = 1
|
|
63
|
-
for j in range(len(num_bits_inv)):
|
|
64
|
-
if carry:
|
|
65
|
-
num_bits_inv[j] = not num_bits_inv[j]
|
|
66
|
-
carry = 0 if num_bits_inv[j] else 1
|
|
67
|
-
num = 0
|
|
68
|
-
for j in range(len(num_bits_inv)):
|
|
69
|
-
if num_bits_inv[j]:
|
|
70
|
-
num += (1 << j)
|
|
71
|
-
num = -num
|
|
72
|
-
return num
|
|
73
|
-
|
|
74
|
-
def __getitem__(self, key):
|
|
75
|
-
if isinstance(key, slice):
|
|
76
|
-
start, stop, step = key.indices(len(self))
|
|
77
|
-
result = []
|
|
78
|
-
for i in range(start, stop, step):
|
|
79
|
-
block_start = i * self.bit_length
|
|
80
|
-
block_end = block_start + self.bit_length
|
|
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)]
|
|
84
|
-
num = self.to_int(bit_chunk)
|
|
85
|
-
result.append(num)
|
|
86
|
-
return IntHybridArray(result, self.bit_length)
|
|
87
|
-
key = key if key >= 0 else key + len(self)
|
|
88
|
-
if not (0 <= key < len(self)):
|
|
89
|
-
raise IndexError("索引超出范围")
|
|
90
|
-
block_start = key * self.bit_length
|
|
91
|
-
block_end = block_start + self.bit_length
|
|
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)]
|
|
95
|
-
return self.to_int(bit_chunk)
|
|
96
|
-
|
|
97
|
-
def __setitem__(self, key, value):
|
|
98
|
-
tmp = list(self)
|
|
99
|
-
tmp[key] = value
|
|
100
|
-
self.__init__(tmp)
|
|
101
|
-
def __iter__(self):
|
|
102
|
-
return map(self.__getitem__,range(len(self)))
|
|
103
|
-
|
|
104
|
-
def __str__(self):
|
|
105
|
-
return f"IntHybridArray([{', '.join(map(str, self))}])"
|
|
106
|
-
__repr__ = __str__
|
|
107
|
-
|
|
108
|
-
def __len__(self):
|
|
109
|
-
return self.total_bits // self.bit_length
|
|
110
|
-
def __delitem__(self, index: int = -1):
|
|
111
|
-
index = index if index >= 0 else index + len(self)
|
|
112
|
-
if not (0 <= index < len(self)):
|
|
113
|
-
raise IndexError("删除索引超出范围")
|
|
114
|
-
target_num = self[index]
|
|
115
|
-
pop_bit_start = index * self.bit_length
|
|
116
|
-
pop_bit_end = pop_bit_start + self.bit_length
|
|
117
|
-
for _ in range(self.bit_length):
|
|
118
|
-
super().__delitem__(pop_bit_start)
|
|
119
|
-
self.total_bits -= self.bit_length
|
|
120
|
-
def index(self, value):
|
|
121
|
-
value = int(value)
|
|
122
|
-
x = f"{value} 不在 IntHybridArray 中"
|
|
123
|
-
for idx in range(len(self)+1>>1):
|
|
124
|
-
if self[idx] == value:
|
|
125
|
-
return idx
|
|
126
|
-
elif self[-idx] == value:
|
|
127
|
-
x = len(self)-idx
|
|
128
|
-
if x != f"{value} 不在 IntHybridArray 中":
|
|
129
|
-
return x
|
|
130
|
-
raise ValueError(x)
|
|
131
|
-
def rindex(self, value):
|
|
132
|
-
value = int(value)
|
|
133
|
-
x = f"{value} 不在 IntHybridArray 中"
|
|
134
|
-
for idx in range(len(self)+1>>1):
|
|
135
|
-
if self[-idx] == value:
|
|
136
|
-
return -idx
|
|
137
|
-
elif self[idx] == value:
|
|
138
|
-
x = -(len(self)-idx)
|
|
139
|
-
if x != f"{value} 不在 IntHybridArray 中":
|
|
140
|
-
return x
|
|
141
|
-
raise ValueError(x)
|
|
142
|
-
def extend(self, iterable:Iterable) -> None:
|
|
143
|
-
if isinstance(iterable, (Iterator, Generator, map)):
|
|
144
|
-
iterable,copy = itertools.tee(iterable, 2)
|
|
145
|
-
len_ = sum(1 for _ in copy)
|
|
146
|
-
else:
|
|
147
|
-
len_ = len(iterable)
|
|
148
|
-
self.total_bits += len_*self.bit_length
|
|
149
|
-
for i,j in zip(range(len_),iterable):
|
|
150
|
-
self[-i-1] = j
|
|
151
|
-
def append(self,value):
|
|
152
|
-
self.total_bits += self.bit_length
|
|
153
|
-
self.size = self.total_bits
|
|
154
|
-
self[-1] = value
|
|
2
|
+
try:from .compile_core import *
|
|
3
|
+
except:from .core import *
|
|
155
4
|
__all__ = tuple(globals())
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from collections.abc import Iterable
|
|
3
|
+
from ..core import *
|
|
4
|
+
import builtins
|
|
5
|
+
class IntBitTag(BHA_bool, metaclass=ResurrectMeta):
|
|
6
|
+
def __str__(self):
|
|
7
|
+
return "'-1'" if (hasattr(self, 'is_sign_bit') and self.is_sign_bit and self) else "'1'" if self else "'0'"
|
|
8
|
+
__repr__ = __str__
|
|
9
|
+
__del__ = lambda self:self
|
|
10
|
+
class IntHybridArray(BoolHybridArray,metaclass=ResurrectMeta):
|
|
11
|
+
def __init__(self, int_array: list[int], bit_length: int = 8):
|
|
12
|
+
self.bit_length = bit_length
|
|
13
|
+
bool_data = []
|
|
14
|
+
max_required_bits = 1
|
|
15
|
+
for num in int_array:
|
|
16
|
+
if num == 0:
|
|
17
|
+
required_bits = 1
|
|
18
|
+
else:
|
|
19
|
+
abs_num = abs(num)
|
|
20
|
+
num_bits_needed = abs_num.bit_length()
|
|
21
|
+
required_bits = 1 + num_bits_needed
|
|
22
|
+
if required_bits > max_required_bits:
|
|
23
|
+
max_required_bits = required_bits
|
|
24
|
+
self.bit_length = max_required_bits
|
|
25
|
+
for num in int_array:
|
|
26
|
+
if num >= 0:
|
|
27
|
+
sign_bit = False
|
|
28
|
+
num_bits = [bool((num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
29
|
+
else:
|
|
30
|
+
sign_bit = True
|
|
31
|
+
abs_num = abs(num)
|
|
32
|
+
num_bits = [not bool((abs_num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
33
|
+
carry = 1
|
|
34
|
+
for j in range(len(num_bits)):
|
|
35
|
+
if carry:
|
|
36
|
+
num_bits[j] = not num_bits[j]
|
|
37
|
+
carry = 0 if num_bits[j] else 1
|
|
38
|
+
bool_data.append(sign_bit)
|
|
39
|
+
bool_data.extend(num_bits)
|
|
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):
|
|
48
|
+
if i < self.size:
|
|
49
|
+
bit_tag = super().__getitem__(i)
|
|
50
|
+
bit_tag.is_sign_bit = True
|
|
51
|
+
|
|
52
|
+
def to_int(self, bit_chunk):
|
|
53
|
+
sign_bit = bit_chunk[0].value
|
|
54
|
+
num_bits = [bit.value for bit in bit_chunk[1:]]
|
|
55
|
+
if not sign_bit:
|
|
56
|
+
num = 0
|
|
57
|
+
for j in range(len(num_bits)):
|
|
58
|
+
if num_bits[j]:
|
|
59
|
+
num += (1 << j)
|
|
60
|
+
else:
|
|
61
|
+
num_bits_inv = [not b for b in num_bits]
|
|
62
|
+
carry = 1
|
|
63
|
+
for j in range(len(num_bits_inv)):
|
|
64
|
+
if carry:
|
|
65
|
+
num_bits_inv[j] = not num_bits_inv[j]
|
|
66
|
+
carry = 0 if num_bits_inv[j] else 1
|
|
67
|
+
num = 0
|
|
68
|
+
for j in range(len(num_bits_inv)):
|
|
69
|
+
if num_bits_inv[j]:
|
|
70
|
+
num += (1 << j)
|
|
71
|
+
num = -num
|
|
72
|
+
return num
|
|
73
|
+
|
|
74
|
+
def __getitem__(self, key):
|
|
75
|
+
if isinstance(key, slice):
|
|
76
|
+
start, stop, step = key.indices(len(self))
|
|
77
|
+
result = []
|
|
78
|
+
for i in range(start, stop, step):
|
|
79
|
+
block_start = i * self.bit_length
|
|
80
|
+
block_end = block_start + self.bit_length
|
|
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)]
|
|
84
|
+
num = self.to_int(bit_chunk)
|
|
85
|
+
result.append(num)
|
|
86
|
+
return IntHybridArray(result, self.bit_length)
|
|
87
|
+
key = key if key >= 0 else key + len(self)
|
|
88
|
+
if not (0 <= key < len(self)):
|
|
89
|
+
raise IndexError("索引超出范围")
|
|
90
|
+
block_start = key * self.bit_length
|
|
91
|
+
block_end = block_start + self.bit_length
|
|
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)]
|
|
95
|
+
return self.to_int(bit_chunk)
|
|
96
|
+
|
|
97
|
+
def __setitem__(self, key, value):
|
|
98
|
+
tmp = list(self)
|
|
99
|
+
tmp[key] = value
|
|
100
|
+
self.__init__(tmp)
|
|
101
|
+
def __iter__(self):
|
|
102
|
+
return map(self.__getitem__,range(len(self)))
|
|
103
|
+
|
|
104
|
+
def __str__(self):
|
|
105
|
+
return f"IntHybridArray([{', '.join(map(str, self))}])"
|
|
106
|
+
__repr__ = __str__
|
|
107
|
+
|
|
108
|
+
def __len__(self):
|
|
109
|
+
return self.total_bits // self.bit_length
|
|
110
|
+
def __delitem__(self, index: int = -1):
|
|
111
|
+
index = index if index >= 0 else index + len(self)
|
|
112
|
+
if not (0 <= index < len(self)):
|
|
113
|
+
raise IndexError("删除索引超出范围")
|
|
114
|
+
target_num = self[index]
|
|
115
|
+
pop_bit_start = index * self.bit_length
|
|
116
|
+
pop_bit_end = pop_bit_start + self.bit_length
|
|
117
|
+
for _ in range(self.bit_length):
|
|
118
|
+
super().__delitem__(pop_bit_start)
|
|
119
|
+
self.total_bits -= self.bit_length
|
|
120
|
+
def index(self, value):
|
|
121
|
+
value = int(value)
|
|
122
|
+
x = f"{value} 不在 IntHybridArray 中"
|
|
123
|
+
for idx in range(len(self)+1>>1):
|
|
124
|
+
if self[idx] == value:
|
|
125
|
+
return idx
|
|
126
|
+
elif self[-idx] == value:
|
|
127
|
+
x = len(self)-idx
|
|
128
|
+
if x != f"{value} 不在 IntHybridArray 中":
|
|
129
|
+
return x
|
|
130
|
+
raise ValueError(x)
|
|
131
|
+
def rindex(self, value):
|
|
132
|
+
value = int(value)
|
|
133
|
+
x = f"{value} 不在 IntHybridArray 中"
|
|
134
|
+
for idx in range(len(self)+1>>1):
|
|
135
|
+
if self[-idx] == value:
|
|
136
|
+
return -idx
|
|
137
|
+
elif self[idx] == value:
|
|
138
|
+
x = -(len(self)-idx)
|
|
139
|
+
if x != f"{value} 不在 IntHybridArray 中":
|
|
140
|
+
return x
|
|
141
|
+
raise ValueError(x)
|
|
142
|
+
def extend(self, iterable:Iterable) -> None:
|
|
143
|
+
if isinstance(iterable, (Iterator, Generator, map)):
|
|
144
|
+
iterable,copy = itertools.tee(iterable, 2)
|
|
145
|
+
len_ = sum(1 for _ in copy)
|
|
146
|
+
else:
|
|
147
|
+
len_ = len(iterable)
|
|
148
|
+
self.total_bits += len_*self.bit_length
|
|
149
|
+
for i,j in zip(range(len_),iterable):
|
|
150
|
+
self[-i-1] = j
|
|
151
|
+
def append(self,value):
|
|
152
|
+
self.total_bits += self.bit_length
|
|
153
|
+
self.size = self.total_bits
|
|
154
|
+
self[-1] = value
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bool-hybrid-array
|
|
3
|
-
Version: 9.11.
|
|
3
|
+
Version: 9.11.10
|
|
4
4
|
Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
|
|
5
5
|
Home-page: https://github.com/BKsell/bool-hybrid-array
|
|
6
6
|
Author: 蔡靖杰
|
|
@@ -614,6 +614,8 @@ print(f"出队2个元素后: {q}") # 输出:BHA_Queue([T,T,F,T,F])
|
|
|
614
614
|
* **9.11.6**:修复从9.11.3版本开始cpython用户无法安装bool-hybrid-array包的问题
|
|
615
615
|
* **9.11.7**:修复TypeError: 'map' object is not reversible的错误
|
|
616
616
|
* **9.11.8**:增加了Windows系统Python3.14的C扩展优化
|
|
617
|
+
* **9.11.9**:修复BHA_Queue的bug,新增cin和cout(使用方式:a = ctypes.c_int();cin >> a;cout << a,支持各种ctypes类型、numpy标量)
|
|
618
|
+
* **9.11.10**:修复cin的AttributeError的错误
|
|
617
619
|
|
|
618
620
|
|
|
619
621
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
bool_hybrid_array/__init__.py,sha256=KzXCj4pevLEmZMp789nBkklGWOVGVy7iUohoA3cxhL8,1078
|
|
2
|
+
bool_hybrid_array/__main__.py,sha256=uFyebfsZl1tW54AVcc6IDhk36BglTGb_Vw3Djx8pq00,8987
|
|
3
|
+
bool_hybrid_array/_cppiostream.py,sha256=uisSGktor52VFxhTcMN011RtzuUE8O1Fgz2VltnPi3c,8447
|
|
4
|
+
bool_hybrid_array/compile_core.pyd,sha256=_bSaBSVM8x_fkxdP_-4AiIYWVEkTgV3DWCPXzP-i-00,556544
|
|
5
|
+
bool_hybrid_array/core.c,sha256=6jlDe0FTZweoWtfhabEQMOk7kfwaiPFDoe0yYPCMpS8,3230449
|
|
6
|
+
bool_hybrid_array/core.py,sha256=nv-veRvbioLefXCe66Py1avxb7_8OZbT5CeyQm-ErQE,42031
|
|
7
|
+
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
8
|
+
bool_hybrid_array/int_array/__init__.py,sha256=CCKDUL5GBAXOprc9FhtLNL_rP4IDhvGVWJ-Dporp6YI,112
|
|
9
|
+
bool_hybrid_array/int_array/core.py,sha256=hnXHSLabtbDCnO3JX0M5tsF0BWlQpjWKu7RplMx7i8A,6236
|
|
10
|
+
bool_hybrid_array-9.11.10.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
11
|
+
bool_hybrid_array-9.11.10.dist-info/METADATA,sha256=kmw6K6GnXPoBGWxeNaZ8Rm4HGPdjWwqIsw3WgP2gkM8,26133
|
|
12
|
+
bool_hybrid_array-9.11.10.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
13
|
+
bool_hybrid_array-9.11.10.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
14
|
+
bool_hybrid_array-9.11.10.dist-info/RECORD,,
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
bool_hybrid_array/__init__.py,sha256=VlUqwA0SmYh5vdHKXT-180u9A3t7Le6Fg9ppgMj8ztc,1077
|
|
2
|
-
bool_hybrid_array/__main__.py,sha256=pjoWN4Noa_K44fqQPqp8H-diKSDf0Da8hdWFgvWUigQ,9083
|
|
3
|
-
bool_hybrid_array/compile_core.pyd,sha256=lriymUZtvs_ryeGM_K8gM33iCIfxRH5Zr5GPKhuNCtw,555520
|
|
4
|
-
bool_hybrid_array/core.c,sha256=b5KMuQ6Ma64wUx-oXYqkx_AR9sTcIO0VUZ6qz_2vDM0,3227011
|
|
5
|
-
bool_hybrid_array/core.py,sha256=uJsVr6GDzCMfDLfvO9LiE0MSjmHodu4yOYwouFpxxFQ,41921
|
|
6
|
-
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
7
|
-
bool_hybrid_array/int_array/__init__.py,sha256=HPBdZu5qlXaRI4n_oK6WhnG4ml8H-FP1G44igVxPJIA,6225
|
|
8
|
-
bool_hybrid_array-9.11.8.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
9
|
-
bool_hybrid_array-9.11.8.dist-info/METADATA,sha256=deIVm_eXDmWKFWZp65t3-0UB6PZfzprqDiBUmOaSI3U,25923
|
|
10
|
-
bool_hybrid_array-9.11.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
11
|
-
bool_hybrid_array-9.11.8.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
12
|
-
bool_hybrid_array-9.11.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|