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.
- bool_hybrid_array/__init__.py +142 -0
- bool_hybrid_array/__main__.py +535 -0
- bool_hybrid_array/_cppiostream.py +871 -0
- bool_hybrid_array/cjx.c +39732 -0
- bool_hybrid_array/cjx.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/cjx.py +650 -0
- bool_hybrid_array/core.c +107035 -0
- bool_hybrid_array/core.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/core.py +2693 -0
- bool_hybrid_array/core.pyx +2729 -0
- bool_hybrid_array/float_array/__init__.py +14 -0
- bool_hybrid_array/float_array/core.c +45161 -0
- bool_hybrid_array/float_array/core.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/float_array/core.py +962 -0
- bool_hybrid_array/forest.c +15079 -0
- bool_hybrid_array/forest.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/forest.py +42 -0
- bool_hybrid_array/int_array/__init__.py +14 -0
- bool_hybrid_array/int_array/core.c +47332 -0
- bool_hybrid_array/int_array/core.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/int_array/core.py +1122 -0
- bool_hybrid_array/struct_array/__init__.py +14 -0
- bool_hybrid_array/struct_array/core.c +144775 -0
- bool_hybrid_array/struct_array/core.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/struct_array/core.py +2716 -0
- bool_hybrid_array/twg_sort.c +26782 -0
- bool_hybrid_array/twg_sort.cp315-win_amd64.pyd +0 -0
- bool_hybrid_array/twg_sort.py +515 -0
- bool_hybrid_array/twg_sort.pyx +579 -0
- bool_hybrid_array//321/207/320/267/320/250/321/205/320/277/320/226.md +2 -0
- bool_hybrid_array-9.13.12.dist-info/METADATA +1035 -0
- bool_hybrid_array-9.13.12.dist-info/RECORD +37 -0
- bool_hybrid_array-9.13.12.dist-info/WHEEL +5 -0
- bool_hybrid_array-9.13.12.dist-info/licenses/LICENSE +202 -0
- bool_hybrid_array-9.13.12.dist-info/licenses/LICENSE-MulanPSL2 +33 -0
- bool_hybrid_array-9.13.12.dist-info/licenses/NOTICE +18 -0
- 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])
|