bool-hybrid-array 9.13.12__cp315-cp315-win_amd64.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.
Files changed (37) hide show
  1. bool_hybrid_array/__init__.py +142 -0
  2. bool_hybrid_array/__main__.py +535 -0
  3. bool_hybrid_array/_cppiostream.py +871 -0
  4. bool_hybrid_array/cjx.c +39732 -0
  5. bool_hybrid_array/cjx.cp315-win_amd64.pyd +0 -0
  6. bool_hybrid_array/cjx.py +650 -0
  7. bool_hybrid_array/core.c +107035 -0
  8. bool_hybrid_array/core.cp315-win_amd64.pyd +0 -0
  9. bool_hybrid_array/core.py +2693 -0
  10. bool_hybrid_array/core.pyx +2729 -0
  11. bool_hybrid_array/float_array/__init__.py +14 -0
  12. bool_hybrid_array/float_array/core.c +45161 -0
  13. bool_hybrid_array/float_array/core.cp315-win_amd64.pyd +0 -0
  14. bool_hybrid_array/float_array/core.py +962 -0
  15. bool_hybrid_array/forest.c +15079 -0
  16. bool_hybrid_array/forest.cp315-win_amd64.pyd +0 -0
  17. bool_hybrid_array/forest.py +42 -0
  18. bool_hybrid_array/int_array/__init__.py +14 -0
  19. bool_hybrid_array/int_array/core.c +47332 -0
  20. bool_hybrid_array/int_array/core.cp315-win_amd64.pyd +0 -0
  21. bool_hybrid_array/int_array/core.py +1122 -0
  22. bool_hybrid_array/struct_array/__init__.py +14 -0
  23. bool_hybrid_array/struct_array/core.c +144775 -0
  24. bool_hybrid_array/struct_array/core.cp315-win_amd64.pyd +0 -0
  25. bool_hybrid_array/struct_array/core.py +2716 -0
  26. bool_hybrid_array/twg_sort.c +26782 -0
  27. bool_hybrid_array/twg_sort.cp315-win_amd64.pyd +0 -0
  28. bool_hybrid_array/twg_sort.py +515 -0
  29. bool_hybrid_array/twg_sort.pyx +579 -0
  30. bool_hybrid_array//321/207/320/267/320/250/321/205/320/277/320/226.md +2 -0
  31. bool_hybrid_array-9.13.12.dist-info/METADATA +1035 -0
  32. bool_hybrid_array-9.13.12.dist-info/RECORD +37 -0
  33. bool_hybrid_array-9.13.12.dist-info/WHEEL +5 -0
  34. bool_hybrid_array-9.13.12.dist-info/licenses/LICENSE +202 -0
  35. bool_hybrid_array-9.13.12.dist-info/licenses/LICENSE-MulanPSL2 +33 -0
  36. bool_hybrid_array-9.13.12.dist-info/licenses/NOTICE +18 -0
  37. bool_hybrid_array-9.13.12.dist-info/top_level.txt +1 -0
@@ -0,0 +1,142 @@
1
+ # -*- coding: utf-8 -*-
2
+ import sys
3
+ import traceback
4
+ from types import FunctionType
5
+ from . import core
6
+ import builtins,inspect
7
+ from .core import ProtectedBuiltinsDict
8
+ try:from . import int_array,float_array
9
+ except:traceback.print_exc()
10
+ try:from . import struct_array
11
+ except:traceback.print_exc()
12
+ try:from . import twg_sort
13
+ except:traceback.print_exc()
14
+ try:from . import _cppiostream
15
+ except:traceback.print_exc()
16
+ try:from . import forest
17
+ except:traceback.print_exc()
18
+ __version__ = "9.13.12"
19
+ public_objects = {
20
+ "BHA_lazy_sieve":core.BHA_lazy_sieve,
21
+ "np": core.np,
22
+ "T": core.T,
23
+ "F": core.F,
24
+ "BHA_bool": core.BHA_bool,
25
+ "BHA_Bool": core.BHA_Bool,
26
+ "BHA_List": core.BHA_List,
27
+ "FalsesArray": core.FalsesArray,
28
+ "TruesArray": core.TruesArray,
29
+ "BoolHybridArr": core.BoolHybridArr,
30
+ "BHA_Iterator": core.BHA_Iterator,
31
+ "BoolHybridArray": core.BoolHybridArray,
32
+ "ResurrectMeta": core.ResurrectMeta,
33
+ "namespace": core.namespace,
34
+ "ProtectedBuiltinsDict": core.ProtectedBuiltinsDict,
35
+ "BHA_Function": core.BHA_Function,
36
+ "Ask_BHA": core.Ask_BHA,
37
+ "Create_BHA": core.Create_BHA,
38
+ "BHAX_Descriptor": core.BHAX_Descriptor,
39
+ "numba_opt": core.numba_opt,
40
+ "cin": core.cin,
41
+ "cout": core.cout,
42
+ "endl": core.endl,
43
+ "BHA_Queue": core.BHA_Queue,
44
+ "create_mt_xor25_generator": core.create_mt_xor25_generator,
45
+ "BHA_string": core.BHA_string,
46
+ "mt_xor25": core.mt_xor25,
47
+ "umfs": core.umfs,
48
+ "UltraMersenneFractalSponge": core.UltraMersenneFractalSponge,
49
+ }
50
+ nobuiltins_objects = {
51
+ "istream": core.istream,
52
+ "ostream": core.ostream,
53
+ "filebuf": core.filebuf,
54
+ "ifstream": core.ifstream,
55
+ "ofstream": core.ofstream,
56
+ "fstream": core.fstream,
57
+ "Manipulator": core.Manipulator,
58
+ "setw": core.setw,
59
+ "setprecision": core.setprecision,
60
+ "setfill": core.setfill,
61
+ "ignore": core.ignore,
62
+ "flush": core.flush,
63
+ "boolalpha": core.boolalpha,
64
+ "noboolalpha": core.noboolalpha,
65
+ "showbase": core.showbase,
66
+ "noshowbase": core.noshowbase,
67
+ "showpoint": core.showpoint,
68
+ "noshowpoint": core.noshowpoint,
69
+ "uppercase": core.uppercase,
70
+ "nouppercase": core.nouppercase,
71
+ "showpos": core.showpos,
72
+ "noshowpos": core.noshowpos,
73
+ "fixed": core.fixed,
74
+ "scientific": core.scientific,
75
+ "left": core.left,
76
+ "right": core.right,
77
+ "internal": core.internal,
78
+ "ios_dec": core.ios_dec,
79
+ "ios_oct": core.ios_oct,
80
+ "ios_hex": core.ios_hex,
81
+ "ios_basefield": core.ios_basefield,
82
+ "ios_left": core.ios_left,
83
+ "ios_right": core.ios_right,
84
+ "ios_internal": core.ios_internal,
85
+ "ios_adjustfield": core.ios_adjustfield,
86
+ "ios_scientific": core.ios_scientific,
87
+ "ios_fixed": core.ios_fixed,
88
+ "ios_floatfield": core.ios_floatfield,
89
+ "ios_boolalpha": core.ios_boolalpha,
90
+ "ios_showbase": core.ios_showbase,
91
+ "ios_showpoint": core.ios_showpoint,
92
+ "ios_uppercase": core.ios_uppercase,
93
+ "ios_showpos": core.ios_showpos,
94
+ "ios_in": core.ios_in,
95
+ "ios_out": core.ios_out,
96
+ "ios_ate": core.ios_ate,
97
+ "ios_app": core.ios_app,
98
+ "ios_trunc": core.ios_trunc,
99
+ "ios_binary": core.ios_binary,
100
+ "ios_base_goodbit": core.ios_base_goodbit,
101
+ "ios_base_badbit": core.ios_base_badbit,
102
+ "ios_base_eofbit": core.ios_base_eofbit,
103
+ "ios_base_failbit": core.ios_base_failbit,
104
+ }
105
+ __all__ = tuple(public_objects) + tuple(nobuiltins_objects) + ("__version__","__builtins__","builtins","core","builtins","int_array","float_array","struct_array","twg_sort")
106
+ globals().update(public_objects)
107
+ globals().update(nobuiltins_objects)
108
+ if inspect.ismodule(builtins):
109
+ for name, obj in public_objects.items():
110
+ setattr(builtins, name, obj)
111
+ Tid, Fid = id(builtins.T), id(builtins.F)
112
+ original_builtins_dict = builtins.__dict__.copy()
113
+ __builtins__ = ProtectedBuiltinsDict(original_builtins_dict)
114
+ builtins = __builtins__
115
+ builtins.name = 'builtins'
116
+ attrs = [
117
+ "__name__",
118
+ "__doc__",
119
+ "__spec__",
120
+ "__loader__",
121
+ "__path__",
122
+ "__annotations__",
123
+ ]
124
+ for attr in attrs:
125
+ if attr in original_builtins_dict:
126
+ try:setattr(builtins, attr, original_builtins_dict[attr])
127
+ except:pass
128
+
129
+ try:
130
+ sys.modules[__name__] = ProtectedBuiltinsDict(globals())
131
+ sys.modules[__name__].name = __name__
132
+ sys.modules[__name__].core = ProtectedBuiltinsDict(core.__dict__,name = f'{__name__}.core')
133
+ __dict__ = ProtectedBuiltinsDict(globals())
134
+ sys.modules[__name__].int_array = ProtectedBuiltinsDict(int_array.__dict__,name = __name__+'.int_array')
135
+ sys.modules[__name__].float_array = ProtectedBuiltinsDict(float_array.__dict__,name = __name__+'.float_array')
136
+ try:
137
+ sys.modules[__name__].struct_array = ProtectedBuiltinsDict(struct_array.__dict__,name = __name__+'.struct_array')
138
+ except Exception:
139
+ pass
140
+ core.__dict__ = ProtectedBuiltinsDict(core.__dict__)
141
+ except:
142
+ pass
@@ -0,0 +1,535 @@
1
+ # -*- coding: utf-8 -*-
2
+ from .__init__ import *
3
+
4
+ # 创建实例
5
+
6
+ arr = BoolHybridArr([True, False, True, False, True])
7
+
8
+ arr2 = TruesArray(3)#7.9.0新增
9
+
10
+ arr3 = FalsesArray(3)#7.9.0新增
11
+
12
+ # 访问元素
13
+ print(arr[0]) # 输出: True;
14
+
15
+ print(arr[1:4]) # 输出:  BoolHybridArr([False, True, False]);
16
+
17
+ print(arr2)# 输出: BoolHybridArr([True, True, True]);
18
+
19
+ print(arr3) # 输出:  BoolHybridArr([False, False, False]);
20
+
21
+ arr[2] = False
22
+
23
+ print(arr) # 输出: BoolHybridArr([True, False, False, False, True])
24
+
25
+ # 创建包含大量布尔值的数组(大部分为False)
26
+
27
+ big_arr = BoolHybridArr([i % 100 == 0 for i in range(10000)])
28
+
29
+ # 查看存储模式(此时应为稀疏模式)
30
+
31
+ print(repr(big_arr)) # 输出: BoolHybridArray(split_index=100,size=10000,is_sparse=True,small_len=100,large_len=)不好意思large_len我不知道
32
+
33
+ # 自动优化存储
34
+
35
+ big_arr.optimize()
36
+
37
+ # 统计True的数量
38
+
39
+ print(arr.count(True)) # 输出: 2
40
+
41
+ # 检查是否至少有一个True
42
+
43
+ print(any(arr)) # 输出: True
44
+
45
+ # 检查是否全为True
46
+
47
+ print(all(arr)) # 输出: False
48
+
49
+ # 复制数组(7.9.1新增)
50
+
51
+ arr_copy = arr.copy()
52
+
53
+ arr_copy[0] = False
54
+
55
+ print(arr[0]) # 输出: True(原数组不变)
56
+
57
+ print(arr_copy[0]) # 输出: False(拷贝数组已修改)
58
+
59
+ #寻找一个元素出现的索引(7.9.2新增)
60
+
61
+ arr_find = BoolHybridArr([i % 2 for i in range(10)])
62
+
63
+ print(arr_find.find(True))#输出:[1,3,5,7,9]
64
+
65
+ print(arr_find.find(False))#输出:[2,4,6,8,10]
66
+
67
+ # 查找第一个/最后一个出现的位置(7.10.3新增)
68
+
69
+ print(arr_find.index(True)) # 输出:1(第一个True的位置)
70
+
71
+ print(arr_find.rindex(True)) # 输出:9(最后一个True的位置)
72
+
73
+ #index/rindex的空数组处理(7.10.4新增)
74
+
75
+ none_arr = BoolHybridArr([])
76
+ try:print(none_arr.index(True))#ValueError:无法在空的 BoolHybridArray 中查找元素
77
+ except ValueError as e:print(e)
78
+
79
+ #查看是否需要优化(7.10.7新增,7.10.20+能用)
80
+
81
+ print(big_arr.memory_usage(detail=True))
82
+ '''样例输出(瞎编,但格式是这样)
83
+ {
84
+ "总占用(字节)": 210,
85
+ "密集区占用": 180,
86
+ "稀疏区占用": 30,
87
+ "对比原生list节省": "99.5%",
88
+ "对比numpy节省": "79.0%",
89
+ "是否需要优化": "是",
90
+ "优化理由/说明": "稀疏区索引密度过高,优化后可转为密集存储提升速度"
91
+ }
92
+ '''
93
+ big_arr.optimize() # 调用优化方法
94
+
95
+ print(big_arr.memory_usage(detail=True)["是否需要优化"])#"否"
96
+
97
+ '''当处理动态变化的布尔数组(如频繁增删元素)时,建议在关键操作后调用memory_usage(detail=True)检查状态,通过optimize()保持最优性能。'''
98
+
99
+ #将数组转为int类型(7.11.0新增):
100
+
101
+ print(int(arr))#输出:17(0b10001)
102
+
103
+ #位运算(7.13.0新增)
104
+
105
+ arr1 = BoolHybridArr([True, False, True, False]) # 0b1010
106
+
107
+ arr2 = BoolHybridArr([True, True, False, False]) # 0b1100
108
+
109
+ print(arr1 & arr2) # 输出:BoolHybridArr([True,False,False,False]) # 0b1000
110
+
111
+ print(arr1 | arr2) # 输出:BoolHybridArr([True,True,True,False]) # 0b1110
112
+
113
+ print([True, False] | arr1[:2]) # 反向运算:[True,False] | [True,False] → [True,False]
114
+
115
+ print(arr1 ^ arr2) # 输出:BoolHybridArr([False,True,True,False]) # 0b0110
116
+
117
+ print(~arr1) # 输出:BoolHybridArr([False,True,False,True]) # 0b0101(对应整数 ~10 = -11 的二进制布尔逻辑)
118
+
119
+ arr = BoolHybridArr([True, False, True]) # 0b101
120
+
121
+ arr <<= 2 # 左移2位:尾部补2个False → [True,False,True,False,False](0b10100)
122
+
123
+ print(arr)
124
+
125
+ arr >>= 3 # 右移3位:尾部删3个元素 → [True,False](0b10)
126
+
127
+ print(arr)
128
+
129
+ print(arr << -1) # 负数左移:等价于右移1位 → [True]
130
+
131
+ #兼容numpy数组(8.0.0版本新增)
132
+
133
+ arr_BoolHybridArray = BoolHybridArr([])
134
+ arr_BoolHybridArray <<= 10
135
+ arr_BoolHybridArray <<= 10000
136
+ array_numpy = np.array([arr_BoolHybridArray,arr_BoolHybridArray],dtype = object)
137
+
138
+ #支持哈希(8.2.0版本新增)
139
+
140
+ set_ = {arr_BoolHybridArray}#不会报错呦
141
+
142
+ _2darr = BHA_List([BoolHybridArr([1,0,0,0,1],Type = BHA_Bool),TruesArray(5,Type = bool),FalsesArray(5,Type = np.bool_)])
143
+
144
+ print(_2darr)
145
+
146
+ '''输出:
147
+
148
+ BHA_List([
149
+ BoolHybridArr([True,False,False,False,True]),
150
+ BoolHybridArr([True,True,True,True,True]),
151
+ BoolHybridArr([False,False,False,False,False]),
152
+ ])
153
+ '''
154
+
155
+ #BoolHybridArray是布尔数组,那是什么布尔数组呢?numpy.bool_?原生bool?其他库的布尔类型?还是本库的BHA_Bool?Type参数,支持指定!
156
+
157
+ #还更新了用BHA_List的排版模拟二维布尔数组!
158
+
159
+ #二维数组的optimize与memory_usage(9.1.0新增):
160
+
161
+ _2darr.optimize()
162
+
163
+ _2darr.memory_usage(detail=T)
164
+
165
+ '''
166
+ 输出格式:
167
+ {
168
+ "占用(字节)": 【占用内存(字节)】,
169
+ "对比原生list节省": 【6位百分比】,
170
+ "对比numpy节省": 【6位百分比】}
171
+ '''
172
+
173
+ #注:BoolHybridArray的memory_usage的百分比也变成了六位小数
174
+
175
+ #关闭哈希复用(9.4.0新增)
176
+
177
+ _2darr2 = BHA_List(BoolHybridArr((i%100 for i in range(1000)),hash_ = F) for i in range(1000))
178
+
179
+ #关闭哈希复用可以增快创建速度
180
+
181
+ #ResurrectMeta元类(9.5.0新增)
182
+
183
+ class MyClass(metaclass=ResurrectMeta):
184
+ pass
185
+
186
+ #用装饰器给实例添加动态方法(9.6.0新增):
187
+
188
+ arr = BoolHybridArr([T,F,T])
189
+
190
+ @arr
191
+ def toggle_range(self, start: int, end: int):
192
+ """翻转从 start 到 end(含)的布尔值"""
193
+ for i in range(start, end + 1):
194
+ self[i] = not self[i] # 通过 self 操作实例的元素
195
+ print(f"翻转 {start}-{end} 后:", self)
196
+
197
+ arr.toggle_range(0,1)
198
+
199
+ print(arr) #输出:翻转 {0}-{1} 后:BoolHybridArr(False,True,True)
200
+
201
+ toggle_range(arr,0,1) #输出:翻转 {0}-{1} 后:BoolHybridArr(True,False,True)
202
+
203
+ #view方法(9.7.0新增):
204
+
205
+ arr2 = arr.view()
206
+
207
+ arr2.extend([F,T])
208
+
209
+ arr2[2] = F
210
+
211
+ print(arr) #输出:BoolHybridArr([True,False,False,False,True])
212
+
213
+ #python 3.9以下的版本泛型、联合类型支持(9.8.0新增)
214
+
215
+ print(BHA_List[BoolHybridArray])#输出:bool_hybrid_array.BHA_List[bool_hybrid_array.BoolHybridArray]
216
+
217
+ 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以上)
218
+
219
+ #BHA_Function动态创建函数(9.9.0新增):
220
+
221
+ toggle_range = BHA_Function.string_define(
222
+ name = 'toggle_range',
223
+ text =
224
+ '''
225
+ for i in range(start, end + 1):
226
+ self[i] = not self[i] # 通过 self 操作实例的元素
227
+ print(f"翻转 {start}-{end} 后:", self)''',
228
+ positional = ('self','start', 'end'),
229
+ default = {})
230
+ toggle_range([0,0,1],0,1)#输出:翻转 0-1 后: [True, True, 1]
231
+
232
+
233
+ #开放ProtectedBuiltinsDict类型(9.9.3+)
234
+
235
+ Dict = ProtectedBuiltinsDict({'1':1,'2':2},protected_names = ['1','3'],name = 'Dict')
236
+
237
+ Dict['2'] = 1
238
+
239
+ print(Dict) #输出:{'1':1,'2':1}
240
+
241
+ try:Dict['1'] = 2
242
+ except Exception as e:print(e) #输出:禁止修改内置常量:__Dict__['1']
243
+
244
+ #Ask_BHA和Create_BHA(9.10.0新增):
245
+
246
+ arr = BoolHybridArr([T,F,F,F,T,T,F,F,F,T])
247
+ arr2 = BoolHybridArr([F,F,F,F,T,T,F,T,T,F])
248
+
249
+ arr3 = BHA_List([arr,arr2])
250
+
251
+ Create_BHA("single_bool_array",arr3)#自动生成single_bool_array.bha文件
252
+
253
+ print(Ask_BHA("single_bool_array"))
254
+
255
+ '''
256
+ 输出:
257
+ BHA_List([
258
+ BoolHybridArr([True,False,False,False,True,True,False,False,False,True]),
259
+ BoolHybridArr([False,False,False,False,True,True,False,True,True,False]),
260
+ ])
261
+ '''
262
+
263
+ #numba_opt函数优化(9.10.4版本新增)
264
+ try:numba_opt()
265
+ except:print("请先安装numba库!!!")
266
+
267
+
268
+ #int_array模块(9.10.10新增):
269
+
270
+ max_num = (1 << 256) - 1
271
+ min_num = -max_num
272
+
273
+ # 1. IntHybridArray:257位完美存储
274
+ arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456, 1], bit_length=257)
275
+ print("✅ IntHybridArray存储结果:")
276
+ print(f"最大值:{arr_hybrid[0]}")
277
+ print(f"最小值:{arr_hybrid[1]}")
278
+ print(f"整个数组:{arr_hybrid}")
279
+
280
+
281
+ # 2. NumPy:用最大的int64尝试存储(必然失败)
282
+ try:
283
+ arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
284
+ print("\n❌ NumPy存储结果:", arr_np)
285
+ except OverflowError as e:
286
+ print(f"\n❌ NumPy存储失败:{e}")
287
+
288
+
289
+ #BHA_Queue(9.11.5版本新增)
290
+
291
+ q = BHA_Queue([T, F, T, T, F])
292
+
293
+ print(f"初始化队列: {q}") # 输出:BHA_Queue([T,F,T,T,F])
294
+
295
+ q.enqueue(T)
296
+
297
+ q.enqueue(F)
298
+
299
+ print(f"入队2个元素后: {q}") # 输出:BHA_Queue([T,F,T,T,F,T,F])
300
+
301
+ # 3. 出队(dequeue,均摊O(1),仅首次触发转移)
302
+
303
+ print(f"第一次出队: {q.dequeue()}") # 输出:T(触发 self.a → self.b 转移,仅1次)
304
+
305
+ print(f"第二次出队: {q.dequeue()}") # 输出:F(直接从 self.b 弹出,纯O(1))
306
+
307
+ print(f"出队2个元素后: {q}") # 输出:BHA_Queue([T,T,F,T,F])
308
+
309
+ #float_array子包(9.11.15版本新增)
310
+
311
+ # 1. 初始化数组
312
+ f_arr = float_array.FloatHybridArray([1.1, 2.2, 3.3, 4.4, 5.5])
313
+
314
+ # 2. 获取元素
315
+ first_elem = f_arr[0] # 获取第一个元素:BHA_Float(1.1)
316
+ print(f"第一个元素:{first_elem}")
317
+
318
+ # 3. 修改元素
319
+ f_arr[1] = 9.9 # 修改第二个元素为 9.9
320
+ print(f"修改后第二个元素:{f_arr[1]}")
321
+
322
+ # 4. 添加元素
323
+ f_arr.append(6.6) # 追加元素 6.6
324
+ print(f"数组长度:{len(f_arr)}") # 输出:6
325
+
326
+ # 5. 遍历数组
327
+ for elem in f_arr:
328
+ print(f"数组元素:{elem}")
329
+
330
+ #namespace元类(9.11.15版本新增)
331
+ class BaseMathTools(metaclass = namespace):
332
+ pi = 3.141
333
+ def add(a,b):
334
+ return a+b
335
+ protected_names = ("pi","add")
336
+
337
+ class MathTools(BaseMathTools,metaclass = namespace):
338
+ pi = 3.1415926535897932
339
+ def mul(a,b):
340
+ return a*b
341
+ def sub(a,b):
342
+ return a-b
343
+ e = 2.718281828
344
+ protected_names = (*BaseMathTools.protected_names,"e","sub","mul")
345
+
346
+ print(MathTools.mul(10,23))#输出:230
347
+
348
+ #布尔数组乘法(9.11.20版本新增)
349
+
350
+ # 定义两个超大二进制数(用BoolHybridArray存储)
351
+
352
+ # 二进制 1101(十进制13)
353
+
354
+ arr1 = BoolHybridArr([1,0,1,1])
355
+
356
+ # 二进制 1011(十进制11)
357
+
358
+ arr2 = BoolHybridArr([1,1,0,1])
359
+
360
+ # 直接相乘!
361
+
362
+ result = arr1 * arr2
363
+
364
+ print(result) # 输出:BoolHybridArr([1,1,0,0,0,1,1]) → 二进制1100011 = 十进制143(13×11=143)
365
+
366
+
367
+ #__cin__魔法方法(9.11.21版本新增)
368
+
369
+ import ctypes
370
+
371
+ class Point:
372
+ __slots__ = ("x", "y")
373
+ def __init__(self,x = 0,y = 0):
374
+ self.x,self.y = ctypes.c_int(x),ctypes.c_int(y)
375
+ def __cin__(self,stream = cin):
376
+ stream >> self.x >> self.y
377
+
378
+ point = Point()
379
+
380
+ #cin >> point #输入:20 13
381
+
382
+ #cout << point.x << ' ' << point.y #输出:20 13
383
+
384
+ #BHA_string(9.11.21版本新增)
385
+
386
+ #string = BHA_string('')
387
+
388
+ #cin >> string#输入:bool-hybrid-array is efficient boolean array
389
+
390
+ #cout << string#输出:bool-hybrid-array is efficient boolean array
391
+
392
+ #fstream和操纵符(9.11.34版本新增)
393
+
394
+ with ofstream("test.out") as fout:
395
+
396
+ fout << "test" << endl
397
+
398
+ s = BHA_string()
399
+
400
+ with ifstream("test.out") as fin:
401
+
402
+ fin >> s
403
+
404
+ cout << setfill('f') << setw(10) << s#输出:fffffftest
405
+
406
+ #BHAX_Descriptor(9.12.0版本新增)
407
+
408
+ desc = BHAX_Descriptor("a.bhax")
409
+ desc.write_data(int_array.IntHybridArray([1, 2, 3]))
410
+ print(desc.read_data())
411
+
412
+ # 浮点
413
+ desc = BHAX_Descriptor("b.bhax")
414
+ desc.write_data(float_array.FloatHybridArray([1.1, 2.2]))
415
+ data = desc.read_data()
416
+ print(data[0], data[1])
417
+
418
+ # 多维
419
+ desc = BHAX_Descriptor("c.bhax")
420
+ desc.write_data(BHA_List([
421
+ BHA_List([int_array.IntHybridArray([1, 2]), int_array.IntHybridArray([3, 4])]),
422
+ BHA_List([int_array.IntHybridArray([5, 6]), int_array.IntHybridArray([7, 8])]),
423
+ ]))
424
+ data = desc.read_data()
425
+ print(data[1][0]) # [5, 6]
426
+
427
+ #自创密码学工具链:umfs和mt_xor25
428
+
429
+ h = umfs(b"hello world!").hexdigest(bitn = 4406) #bitn:输出bit数,最大4406,超过会产生前导0
430
+
431
+ print(h) #不同版本可能输出不同
432
+
433
+ #mt_xor25密码学随机数生成器(CSPRNG)
434
+
435
+ rng = mt_xor25()
436
+
437
+ """
438
+ 使用方式:
439
+ rng():随机128位哈希
440
+ next(rng):同rng()
441
+ for v in rng:无限迭代,每次循环v都是全新的随机128位哈希
442
+ rng.randrange()/rng.uniform()/rng.randint()/rng.getrandbits():用法同random库
443
+ """
444
+
445
+ print(umfs(rng().encode()).hexdigest(bitn = 4406)) #比裸调用更安全
446
+
447
+ #struct_array(9.13.0版本新增)
448
+
449
+ from bool_hybrid_array.struct_array import BHA_Struct, BHA_Vec2, BHA_RGBA
450
+
451
+ class Particle(BHA_Struct):
452
+ __BHAStructAttrs__ = {
453
+ "pos": BHA_Vec2, # 嵌套 struct
454
+ "age": int, # IntHybridArray 列
455
+ "mass": float, # FloatHybridArray 列
456
+ "alive": bool, # BoolHybridArr 列
457
+ "color": BHA_RGBA, # 嵌套 struct
458
+ "name": str, # 退化成 list
459
+ }
460
+
461
+ ps = Particle * 100
462
+
463
+ p = ps[0]
464
+ p.pos.x = 1.5
465
+ p.age = 0
466
+ p.mass = 9.8
467
+ p.alive = True
468
+ p.color.r = 255
469
+ p.name = "alpha"
470
+
471
+ ps[0], ps[1] = ps[1], ps[0] # Python 风格交换正确
472
+
473
+ q = Particle(age=1, mass=1.0, name="beta")
474
+ ps.append(q)
475
+ ps.append({"pos": BHA_Vec2(0, 0), "age": 0, "mass": 0.0,
476
+ "alive": False, "color": BHA_RGBA(0, 0, 0, 255), "name": "ghost"})
477
+
478
+ for p in ps:
479
+ p.age += 1
480
+
481
+ #BHA_Dict(9.13.6版本新增)
482
+
483
+ from bool_hybrid_array.struct_array import BHA_Dict
484
+
485
+ d = BHA_Dict(int, str)
486
+
487
+ d[1] = 'alpha'
488
+
489
+ d[2] = 'beta'
490
+
491
+ print(d[1]) # 输出:alpha
492
+
493
+ print(list(d)) # 输出:[1, 2](按键升序)
494
+
495
+ print(len(d)) # 输出:2
496
+
497
+ d[2] = 'beta2' # 更新已有键的值
498
+
499
+ print(d[2]) # 输出:beta2
500
+
501
+ #StructRSBTSet(9.13.6版本新增)
502
+
503
+ from bool_hybrid_array.struct_array import BHA_Point, StructRSBTSet
504
+
505
+ p1 = BHA_Point(x = 1, y = 1)
506
+
507
+ p2 = BHA_Point(x = 2, y = 2)
508
+
509
+ s = StructRSBTSet(BHA_Point, key = lambda p: p.x, items = [p1, p2])
510
+
511
+ print(p1.x in s) # 输出:True
512
+
513
+ s.add(BHA_Point(x = 3, y = 3))
514
+
515
+ s.discard(p1.x)
516
+
517
+ print(len(s)) # 输出:2
518
+
519
+ print([(int(p.x), int(p.y)) for p in s]) # 输出:[(2, 2), (3, 3)](按键升序)
520
+
521
+ #forest(9.13.12版本新增)
522
+
523
+ from bool_hybrid_array.forest import *
524
+
525
+ #以后使用任何库都不需要import了!类似pyforest,但更强大!第三方库也支持!
526
+
527
+ #cjx纯文本压缩算法(9.13.12版本新增)
528
+
529
+ from bool_hybrid_array import cjx
530
+
531
+ x = cjx.encode("Hello CJX!"*100)
532
+
533
+ print(len(x))
534
+
535
+ print(encode(x)[:15])