bool-hybrid-array 9.10.10__py3-none-any.whl → 9.10.11__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.
@@ -2,14 +2,15 @@ import sys
2
2
  from types import ModuleType
3
3
  from . import core
4
4
  from .core import __builtins__,builtins
5
- __version__ = "9.10.10"
5
+ from . import int_array
6
+ __version__ = "9.10.11"
6
7
  public_objects = []
7
8
  for name in dir(core):
8
9
  if not name.startswith("_"):
9
10
  obj = getattr(core, name)
10
11
  if isinstance(obj, (type, ModuleType)) or callable(obj):
11
12
  public_objects.append(name)
12
- __all__ = public_objects + ["__version__","__builtins__","core","builtins","__dict__"]
13
+ __all__ = public_objects + ["__version__","__builtins__","core","builtins","__dict__","int_array"]
13
14
  globals().update({
14
15
  name: getattr(core, name)
15
16
  for name in public_objects
@@ -264,4 +264,9 @@ try:numba_opt()
264
264
  except:print("请先安装numba库!!!")
265
265
 
266
266
 
267
+ #int_array模块(9.10.10新增):
268
+
269
+ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
270
+
271
+
267
272
 
@@ -1,7 +1,7 @@
1
- from .bool_hybrid_array import *
1
+ from __future__ import annotations
2
+ from ..core import *
2
3
  import builtins
3
4
 
4
-
5
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'"
@@ -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
- temp_arr = BoolHybridArr(bool_data, Type=IntBitTag)
41
- super().__init__(temp_arr.split_index, temp_arr.size, temp_arr.is_sparse, temp_arr.Type, False)
42
- for idx in range(temp_arr.size):
43
- self[idx] = temp_arr[idx].value
44
- for i in range(0, self.size, self.bit_length):
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
- self[i].is_sign_bit = True
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
- block_idx = i // self.bit_length
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
- bit_chunk = [self[j] for j in range(block_start, block_end)]
81
+ if block_end > self.size:
82
+ raise IndexError("索引超出范围")
83
+ bit_chunk = [super().__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
- block_idx = key // self.bit_length
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
- bit_chunk = [self[j] for j in range(block_start, block_end)]
92
+ if block_end > self.size:
93
+ raise IndexError("索引超出范围")
94
+ bit_chunk = [super().__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 i in range(start, stop, step):
99
- self[i] = values[idx % len(values)]
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
- block_idx = key // self.bit_length
106
- block_start = block_idx * self.bit_length
107
- bool_data = []
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,19 @@ 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.append(sign_bit)
122
- bool_data.extend(num_bits)
123
- for idx in range(self.bit_length):
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().__setitem__(block_start + bit_idx, bool_data[bit_idx])
125
149
 
126
150
  def __iter__(self):
127
- for i in range(0, self.size, self.bit_length):
128
- bit_chunk = [self[j] for j in range(i, i + self.bit_length)]
151
+ for i in range(0, self.total_bits, self.bit_length):
152
+ if i + self.bit_length > self.size:
153
+ break
154
+ bit_chunk = [super().__getitem__(j) for j in range(i, i + self.bit_length)]
129
155
  yield self.to_int(bit_chunk)
130
156
 
131
157
  def __str__(self):
132
158
  return f"IntHybridArray([{', '.join(map(str, self))}])"
133
159
 
134
160
  def __len__(self):
135
- return self.size // self.bit_length
136
- builtins.IntHybridArray = IntHybridArray
137
- if __name__ == "__main__":
138
- test = [0, 10, -5, 31, 32768, -65536]
139
- arr = IntHybridArray(test)
140
- print(arr)
141
- print(arr[2])
142
- arr[3] = -100
143
- print(arr)
144
- print(list(arr))
145
- print(arr[1:4])
161
+ return self.total_bits // self.bit_length
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bool-hybrid-array
3
- Version: 9.10.10
3
+ Version: 9.10.11
4
4
  Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
5
5
  Home-page: https://github.com/BKsell/bool-hybrid-array
6
6
  Author: 蔡靖杰
@@ -541,6 +541,7 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
541
541
  * **9.10.8**:给Create_BHA新增了mmap优化
542
542
  * **9.10.9**:修复9.10.8版本中的NameError错误
543
543
  * **9.10.10**:新增int_array模块
544
+ * **9.10.11**:修复NameError: name 'int_array' is not defined. Did you mean: 'bytearray'?的错误
544
545
 
545
546
 
546
547
 
@@ -0,0 +1,10 @@
1
+ bool_hybrid_array/__init__.py,sha256=IqtYvdH7w00YYmTgbQ9Q2DKMKIQoGM9728UQ0JOSox8,793
2
+ bool_hybrid_array/__main__.py,sha256=xb4p6L-JlVWor0CVVKqjoxKVH3YvA8pfRTBG4AFHqQU,7833
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=1ysgXyfJcmSPK4Fs3Qd7JGlESwXyYn9WsPVaI6LtrxA,6872
6
+ bool_hybrid_array-9.10.11.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
7
+ bool_hybrid_array-9.10.11.dist-info/METADATA,sha256=LY4eVuUqmSFXk_ay6uzbZ0YmKW2SSxaIFMBF13xg4TY,22008
8
+ bool_hybrid_array-9.10.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
9
+ bool_hybrid_array-9.10.11.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
10
+ bool_hybrid_array-9.10.11.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,,