bool-hybrid-array 9.5.0__py3-none-any.whl → 9.10.19__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.
@@ -1,16 +1,47 @@
1
1
  import sys
2
- from types import ModuleType
2
+ from types import ModuleType,FunctionType
3
3
  from . import core
4
- import builtins
5
- __version__ = "9.5.0"
4
+ from .core import __builtins__,builtins
5
+ from . import int_array
6
+ __version__ = "9.10.19"
6
7
  public_objects = []
8
+ def jit_class_methods(cls):
9
+ for attr_name in dir(cls):
10
+ if not attr_name.startswith("_"):
11
+ attr = getattr(cls, attr_name)
12
+ if isinstance(attr, FunctionType):
13
+ try:
14
+ setattr(cls, attr_name, jit(attr))
15
+ except:
16
+ pass
17
+ elif isinstance(attr, classmethod):
18
+ original_func = attr.__func__
19
+ try:
20
+ setattr(cls, attr_name, classmethod(jit(original_func)))
21
+ except:
22
+ pass
23
+ return cls
7
24
  for name in dir(core):
8
25
  if not name.startswith("_"):
9
26
  obj = getattr(core, name)
10
27
  if isinstance(obj, (type, ModuleType)) or callable(obj):
11
28
  public_objects.append(name)
12
- __all__ = public_objects + ["__version__","__builtins__","core"]
29
+ if isinstance(obj,FunctionType):
30
+ try:setattr(core,name,jit(obj))
31
+ except:pass
32
+ elif isinstance(obj,type):
33
+ jit_class_methods(obj)
34
+ __all__ = public_objects + ["__version__","__builtins__","core","builtins","__dict__","int_array"]
13
35
  globals().update({
14
36
  name: getattr(core, name)
15
37
  for name in public_objects
16
38
  })
39
+ try:
40
+ __dict__ = ProtectedBuiltinsDict(globals())
41
+ sys.modules[__name__+'.int_array'] = ProtectedBuiltinsDict(int_array.__dict__)
42
+ sys.modules[__name__] = ProtectedBuiltinsDict(globals().copy())
43
+ sys.modules[__name__].name = 'bool_hybrid_array'
44
+ core.__dict__ = ProtectedBuiltinsDict(core.__dict__)
45
+ except:
46
+ pass
47
+
@@ -0,0 +1,284 @@
1
+ from .__init__ import *
2
+
3
+ # 创建实例
4
+
5
+ arr = BoolHybridArr([True, False, True, False, True])
6
+
7
+ arr2 = TruesArray(3)#7.9.0新增
8
+
9
+ arr3 = FalsesArray(3)#7.9.0新增
10
+
11
+ # 访问元素
12
+ print(arr[0]) # 输出: True;
13
+
14
+ print(arr[1:4]) # 输出:  BoolHybridArr([False, True, False]);
15
+
16
+ print(arr2)# 输出: BoolHybridArr([True, True, True]);
17
+
18
+ print(arr3) # 输出:  BoolHybridArr([False, False, False]);
19
+
20
+ arr[2] = False
21
+
22
+ print(arr) # 输出: BoolHybridArr([True, False, False, False, True])
23
+
24
+ # 创建包含大量布尔值的数组(大部分为False)
25
+
26
+ big_arr = BoolHybridArr([i % 100 == 0 for i in range(10000)])
27
+
28
+ # 查看存储模式(此时应为稀疏模式)
29
+
30
+ print(repr(big_arr)) # 输出: BoolHybridArray(split_index=100,size=10000,is_sparse=True,small_len=100,large_len=)不好意思large_len我不知道
31
+
32
+ # 自动优化存储
33
+
34
+ big_arr.optimize()
35
+
36
+ # 统计True的数量
37
+
38
+ print(arr.count(True)) # 输出: 2
39
+
40
+ # 检查是否至少有一个True
41
+
42
+ print(any(arr)) # 输出: True
43
+
44
+ # 检查是否全为True
45
+
46
+ print(all(arr)) # 输出: False
47
+
48
+ # 复制数组(7.9.1新增)
49
+
50
+ arr_copy = arr.copy()
51
+
52
+ arr_copy[0] = False
53
+
54
+ print(arr[0]) # 输出: True(原数组不变)
55
+
56
+ print(arr_copy[0]) # 输出: False(拷贝数组已修改)
57
+
58
+ #寻找一个元素出现的索引(7.9.2新增)
59
+
60
+ arr_find = BoolHybridArr([i % 2 for i in range(10)])
61
+
62
+ print(arr_find.find(True))#输出:[1,3,5,7,9]
63
+
64
+ print(arr_find.find(False))#输出:[2,4,6,8,10]
65
+
66
+ # 查找第一个/最后一个出现的位置(7.10.3新增)
67
+
68
+ print(arr_find.index(True)) # 输出:1(第一个True的位置)
69
+
70
+ print(arr_find.rindex(True)) # 输出:9(最后一个True的位置)
71
+
72
+ #index/rindex的空数组处理(7.10.4新增)
73
+
74
+ none_arr = BoolHybridArr([])
75
+ try:print(none_arr.index(True))#ValueError:无法在空的 BoolHybridArray 中查找元素
76
+ except ValueError as e:print(e)
77
+
78
+ #查看是否需要优化(7.10.7新增,7.10.20+能用)
79
+
80
+ print(big_arr.memory_usage(detail=True))
81
+ '''样例输出(瞎编,但格式是这样)
82
+ {
83
+ "总占用(字节)": 210,
84
+ "密集区占用": 180,
85
+ "稀疏区占用": 30,
86
+ "对比原生list节省": "99.5%",
87
+ "对比numpy节省": "79.0%",
88
+ "是否需要优化": "是",
89
+ "优化理由/说明": "稀疏区索引密度过高,优化后可转为密集存储提升速度"
90
+ }
91
+ '''
92
+ big_arr.optimize() # 调用优化方法
93
+
94
+ print(big_arr.memory_usage(detail=True)["是否需要优化"])#"否"
95
+
96
+ '''当处理动态变化的布尔数组(如频繁增删元素)时,建议在关键操作后调用memory_usage(detail=True)检查状态,通过optimize()保持最优性能。'''
97
+
98
+ #将数组转为int类型(7.11.0新增):
99
+
100
+ print(int(arr))#输出:17(0b10001)
101
+
102
+ #位运算(7.13.0新增)
103
+
104
+ arr1 = BoolHybridArr([True, False, True, False]) # 0b1010
105
+
106
+ arr2 = BoolHybridArr([True, True, False, False]) # 0b1100
107
+
108
+ print(arr1 & arr2) # 输出:BoolHybridArr([True,False,False,False]) # 0b1000
109
+
110
+ print(arr1 | arr2) # 输出:BoolHybridArr([True,True,True,False]) # 0b1110
111
+
112
+ print([True, False] | arr1[:2]) # 反向运算:[True,False] | [True,False] → [True,False]
113
+
114
+ print(arr1 ^ arr2) # 输出:BoolHybridArr([False,True,True,False]) # 0b0110
115
+
116
+ print(~arr1) # 输出:BoolHybridArr([False,True,False,True]) # 0b0101(对应整数 ~10 = -11 的二进制布尔逻辑)
117
+
118
+ arr = BoolHybridArr([True, False, True]) # 0b101
119
+
120
+ arr <<= 2 # 左移2位:尾部补2个False → [True,False,True,False,False](0b10100)
121
+
122
+ print(arr)
123
+
124
+ arr >>= 3 # 右移3位:尾部删3个元素 → [True,False](0b10)
125
+
126
+ print(arr)
127
+
128
+ print(arr << -1) # 负数左移:等价于右移1位 → [True]
129
+
130
+ #兼容numpy数组(8.0.0版本新增)
131
+
132
+ arr_BoolHybridArray = BoolHybridArr([])
133
+ arr_BoolHybridArray <<= 10
134
+ arr_BoolHybridArray <<= 10000
135
+ array_numpy = np.array([arr_BoolHybridArray,arr_BoolHybridArray],dtype = object)
136
+
137
+ #支持哈希(8.2.0版本新增)
138
+
139
+ set_ = {arr_BoolHybridArray}#不会报错呦
140
+
141
+ _2darr = BHA_List([BoolHybridArr([1,0,0,0,1],Type = BHA_Bool),TruesArray(5,Type = bool),FalsesArray(5,Type = np.bool_)])
142
+
143
+ print(_2darr)
144
+
145
+ '''输出:
146
+
147
+ BHA_List([
148
+ BoolHybridArr([True,False,False,False,True]),
149
+ BoolHybridArr([True,True,True,True,True]),
150
+ BoolHybridArr([False,False,False,False,False]),
151
+ ])
152
+ '''
153
+
154
+ #BoolHybridArray是布尔数组,那是什么布尔数组呢?numpy.bool_?原生bool?其他库的布尔类型?还是本库的BHA_Bool?Type参数,支持指定!
155
+
156
+ #还更新了用BHA_List的排版模拟二维布尔数组!
157
+
158
+ #二维数组的optimize与memory_usage(9.1.0新增):
159
+
160
+ _2darr.optimize()
161
+
162
+ _2darr.memory_usage(detail=T)
163
+
164
+ '''
165
+ 输出格式:
166
+ {
167
+ "占用(字节)": 【占用内存(字节)】,
168
+ "对比原生list节省": 【6位百分比】,
169
+ "对比numpy节省": 【6位百分比】}
170
+ '''
171
+
172
+ #注:BoolHybridArray的memory_usage的百分比也变成了六位小数
173
+
174
+ #关闭哈希复用(9.4.0新增)
175
+
176
+ _2darr2 = BHA_List(BoolHybridArr((i%100 for i in range(1000)),hash_ = F) for i in range(1000))
177
+
178
+ #关闭哈希复用可以增快创建速度
179
+
180
+ #ResurrectMeta元类(9.5.0新增)
181
+
182
+ class MyClass(metaclass=ResurrectMeta):
183
+ pass
184
+
185
+ #用装饰器给实例添加动态方法(9.6.0新增):
186
+
187
+ arr = BoolHybridArr([T,F,T])
188
+
189
+ @arr
190
+ def toggle_range(self, start: int, end: int):
191
+ """翻转从 start 到 end(含)的布尔值"""
192
+ for i in range(start, end + 1):
193
+ self[i] = not self[i] # 通过 self 操作实例的元素
194
+ print(f"翻转 {start}-{end} 后:", self)
195
+
196
+ arr.toggle_range(0,1)
197
+
198
+ print(arr) #输出:翻转 {0}-{1} 后:BoolHybridArr(False,True,True)
199
+
200
+ toggle_range(arr,0,1) #输出:翻转 {0}-{1} 后:BoolHybridArr(True,False,True)
201
+
202
+ #view方法(9.7.0新增):
203
+
204
+ arr2 = arr.view()
205
+
206
+ arr2.extend([F,T])
207
+
208
+ arr2[2] = F
209
+
210
+ print(arr) #输出:BoolHybridArr([True,False,False,False,True])
211
+
212
+ #python 3.9以下的版本泛型、联合类型支持(9.8.0新增)
213
+
214
+ print(BHA_List[BoolHybridArray])#输出:bool_hybrid_array.BHA_List[bool_hybrid_array.BoolHybridArray]
215
+
216
+ print(BHA_List|BoolHybridArray)#输出:typing.Union[bool_hybrid_array.BHA_List, bool_hybrid_array.BoolHybridArray] (python 3.9以下)或 bool_hybrid_array.BHA_List|bool_hybrid_array.BoolHybridArray(python 3.10以上)
217
+
218
+ #BHA_Function动态创建函数(9.9.0新增):
219
+
220
+ toggle_range = BHA_Function.string_define(
221
+ name = 'toggle_range',
222
+ text =
223
+ '''
224
+ for i in range(start, end + 1):
225
+ self[i] = not self[i] # 通过 self 操作实例的元素
226
+ print(f"翻转 {start}-{end} 后:", self)''',
227
+ positional = ('self','start', 'end'),
228
+ default = {})
229
+ toggle_range([0,0,1],0,1)#输出:翻转 0-1 后: [True, True, 1]
230
+
231
+
232
+ #开放ProtectedBuiltinsDict类型(9.9.3+)
233
+
234
+ Dict = ProtectedBuiltinsDict({'1':1,'2':2},protected_names = ['1','3'],name = 'Dict')
235
+
236
+ Dict['2'] = 1
237
+
238
+ print(Dict) #输出:{'1':1,'2':1}
239
+
240
+ try:Dict['1'] = 2
241
+ except Exception as e:print(e) #输出:禁止修改内置常量:__Dict__['1']
242
+
243
+ #Ask_BHA和Create_BHA(9.10.0新增):
244
+
245
+ arr = BoolHybridArr([T,F,F,F,T,T,F,F,F,T])
246
+ arr2 = BoolHybridArr([F,F,F,F,T,T,F,T,T,F])
247
+
248
+ arr3 = BHA_List([arr,arr2])
249
+
250
+ Create_BHA("single_bool_array",arr3)#自动生成single_bool_array.bha文件
251
+
252
+ print(Ask_BHA("single_bool_array"))
253
+
254
+ '''
255
+ 输出:
256
+ BHA_List([
257
+ BoolHybridArr([True,False,False,False,True,True,False,False,False,True]),
258
+ BoolHybridArr([False,False,False,False,True,True,False,True,True,False]),
259
+ ])
260
+ '''
261
+
262
+ #numba_opt函数优化(9.10.4版本新增)
263
+ try:numba_opt()
264
+ except:print("请先安装numba库!!!")
265
+
266
+
267
+ #int_array模块(9.10.10新增):
268
+
269
+ max_num = (1 << 256) - 1
270
+ min_num = -max_num
271
+
272
+ # 1. IntHybridArray:257位完美存储
273
+ arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
274
+ print("✅ IntHybridArray存储结果:")
275
+ print(f"最大值:{arr_hybrid[0]}")
276
+ print(f"最小值:{arr_hybrid[1]}")
277
+
278
+ # 2. NumPy:用最大的int64尝试存储(必然失败)
279
+ try:
280
+ arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
281
+ print("\n❌ NumPy存储结果:", arr_np)
282
+ except OverflowError as e:
283
+ print(f"\n❌ NumPy存储失败:{e}")
284
+