byzh-core 0.0.4.0__py3-none-any.whl → 0.0.5.0__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,3 +1,7 @@
1
1
  from .cmd import b_run_cmd, b_run_python
2
+ from .run_func import b_Wrapper
2
3
 
3
- __all__ = ['b_run_cmd', 'b_run_python']
4
+ __all__ = [
5
+ 'b_run_cmd', 'b_run_python',
6
+ 'b_Wrapper'
7
+ ]
@@ -0,0 +1,61 @@
1
+ from itertools import product
2
+ from typing import Sequence, Callable, Literal
3
+ import warnings
4
+ class b_Wrapper():
5
+ def __init__(
6
+ self,
7
+ mode:Literal["product", "zip"] = "product",
8
+ **kwargs: Sequence
9
+ ):
10
+ self.mode = mode
11
+ self.keys = []
12
+
13
+ for key, value in kwargs.items():
14
+ setattr(self, key+"_list", value)
15
+ self.keys.append(key)
16
+
17
+ self.values_lst = self._get_values_lst()
18
+
19
+ def _get_values_lst(self):
20
+ temp = [getattr(self, key + "_list") for key in self.keys]
21
+ if self.mode == "product":
22
+ return list(product(*temp))
23
+ elif self.mode == "zip":
24
+ # 检查是否个数相同
25
+ if len(set(map(len, temp)))!= 1:
26
+ warnings.warn("zip模式下, 如果各部分的len不一样, 则超出部分不参与遍历")
27
+ return list(zip(*temp))
28
+ else:
29
+ raise ValueError("Invalid mode")
30
+
31
+ def _set_values(self, index):
32
+ for key, value in zip(self.keys, self.values_lst[index]):
33
+ setattr(self, key, value)
34
+
35
+ def run(self, func: Callable, *args, **kwargs):
36
+ for i in range(len(self.values_lst)):
37
+ self._set_values(i)
38
+ func(*args, **kwargs)
39
+
40
+
41
+ if __name__ == '__main__':
42
+ def demo_func():
43
+ print(f"x={wrapper.x}, y={wrapper.y}, x+y={wrapper.x + wrapper.y}")
44
+
45
+ # 示例 1: product 笛卡尔积模式
46
+ print("=== product 模式 ===")
47
+ wrapper = b_Wrapper(
48
+ mode="product",
49
+ x=[1, 2, 3],
50
+ y=[10, 20]
51
+ )
52
+ wrapper.run(demo_func)
53
+
54
+ # 示例 2: zip 模式
55
+ print("\n=== zip 模式 ===")
56
+ wrapper = b_Wrapper(
57
+ mode="zip",
58
+ x=[1, 2, 3],
59
+ y=[10, 20, 30]
60
+ )
61
+ wrapper.run(demo_func)
@@ -1,6 +1,7 @@
1
1
  import sys
2
2
  import time
3
3
  import threading
4
+ from typing import Iterable
4
5
 
5
6
  from ..Butils import B_Color, B_Appearance, B_Background
6
7
 
@@ -8,7 +9,7 @@ from ..Butils import B_Color, B_Appearance, B_Background
8
9
  class B_Tqdm:
9
10
  def __init__(
10
11
  self,
11
- total: int|None = None,
12
+ range: int|Iterable = None,
12
13
  prefix: str = 'Processing',
13
14
  suffix: str = '',
14
15
  length: int = 20,
@@ -23,7 +24,14 @@ class B_Tqdm:
23
24
  :param fill: 填充字符
24
25
  """
25
26
  super().__init__()
26
- self.total = total
27
+ self.range = range
28
+ if isinstance(range, Iterable):
29
+ self.range_len = len(range)
30
+ elif isinstance(range, int):
31
+ self.range_len = range
32
+ else:
33
+ self.range_len = None
34
+
27
35
  self.prefix = prefix
28
36
  self.suffix = suffix
29
37
  self.length = length
@@ -61,19 +69,19 @@ class B_Tqdm:
61
69
  elapsed_time = time.time() - self.start_time
62
70
  elapsed_str = self._format_time(elapsed_time)
63
71
  # 预估剩余时间
64
- if self.total is not None:
65
- estimated_time = elapsed_time / self.current * (self.total - self.current) if self.current > 0 else 0
72
+ if self.range_len is not None:
73
+ estimated_time = elapsed_time / self.current * (self.range_len - self.current) if self.current > 0 else 0
66
74
  estimated_str = self._format_time(estimated_time)
67
75
  # 计算每秒处理的项数
68
76
  speed = self.current / elapsed_time if elapsed_time > 0 else 0
69
77
 
70
78
  # 更新进度条
71
- if self.total is not None:
72
- filled_length = int(self.length * self.current // self.total)
79
+ if self.range_len is not None:
80
+ filled_length = int(self.length * self.current // self.range_len)
73
81
  bar = self.fill * filled_length + '-' * (self.length - filled_length) * len(self.fill)
74
82
 
75
83
  sys.stdout.write(f'\r{pre_show}{self.prefix} |{bar}|'
76
- f' {self.current}/{self.total} -> {elapsed_str}<{estimated_str} | {speed:.1f} it/s |'
84
+ f' {self.current}/{self.range_len} -> {elapsed_str}<{estimated_str} | {speed:.1f} it/s |'
77
85
  f' {self.suffix}{B_Color.RESET.value}')
78
86
  else:
79
87
  sys.stdout.write(f'\r{pre_show}{self.prefix} | {self.current} iters -> {elapsed_str} | {speed:.1f} it/s |'
@@ -81,6 +89,11 @@ class B_Tqdm:
81
89
  sys.stdout.flush()
82
90
 
83
91
  # 补回车
84
- if self.current == self.total:
92
+ if self.current == self.range_len:
85
93
  sys.stdout.write('\n')
86
94
  sys.stdout.flush()
95
+
96
+ def __iter__(self):
97
+ for item in self.range:
98
+ yield item
99
+ self.update()
byzh_core/__init__.py CHANGED
@@ -2,4 +2,4 @@
2
2
  # class 以"B_"开头
3
3
  # function 以"b_"开头
4
4
 
5
- __version__ = '0.0.4.0'
5
+ __version__ = '0.0.5.0' # core的最后一位保持0, 留给其他包
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: byzh_core
3
- Version: 0.0.4.0
3
+ Version: 0.0.5.0
4
4
  Summary: byzh_core是byzh系列的核心库,包含了一些常用的工具函数和类。
5
5
  Author: byzh_rc
6
6
  License: MIT
@@ -1,14 +1,15 @@
1
1
  byzh_core/B_os.py,sha256=f8XuZZOMnP0Fszg6oPLlo9kxX1ytJBK8cEoHqzVkMVA,4313
2
- byzh_core/__init__.py,sha256=plOSKHB2dhS8k4n5w2VPpP2Jsnv0K9KHZe7_q6FukFY,110
2
+ byzh_core/__init__.py,sha256=4hnny5zXICtMdVc-cTnIycfuIAiPGlm0hMLv3vW-IUM,156
3
3
  byzh_core/__main__.py,sha256=o7-Mn6j1g-VGWhE13goDOMmxKSlXvtrkYVkwt4DrCjo,217
4
4
  byzh_core/Barchive/__init__.py,sha256=wUdz646VS0Uhq9lwMkd3YQHCvQhLDqgADoDjFGMqIn0,65
5
5
  byzh_core/Barchive/archive.py,sha256=S1hy3qYFEZr5RRmx_Mnq1s2IMUEw973ny1rKSL7J_a0,6721
6
6
  byzh_core/Btable/__init__.py,sha256=NlQBjp_mvObEUm4y6wXbGipkNM2N3uNIUidaJkTwFsw,62
7
7
  byzh_core/Btable/auto_table.py,sha256=avMeRWydw9L8s3fU0-BSl8a2dCyreIUzW--csm5eR0g,14734
8
- byzh_core/Bterminal/__init__.py,sha256=B6p6mHVhi5LAHKlvqfrv20E6XNqUsfU2xD753V6-Zf4,83
8
+ byzh_core/Bterminal/__init__.py,sha256=azRLD-kY8Tv2c3llHRBrEJIdVgYw6hAoLgzJeA4PvE0,142
9
9
  byzh_core/Bterminal/cmd.py,sha256=0I-d7VPHv9eYJoSrAZOnEK-R-hyjWVY0hRRn3Zoq1fg,3839
10
+ byzh_core/Bterminal/run_func.py,sha256=B2CZSxdSrcBbt7w5_hnOYrUmwrjK5CPqbyyt_YkB_I0,1836
10
11
  byzh_core/Btqdm/__init__.py,sha256=G8pvJYizvdTUI3Xw-yELXY7BbjTghCXJLdqUuDoRNZA,141
11
- byzh_core/Btqdm/my_tqdm.py,sha256=61FeXKrkteKpCvXM5qU2hoMROqFkZW-bs5Rz86KMQSo,3202
12
+ byzh_core/Btqdm/my_tqdm.py,sha256=MMYFwy5dUCzg8fzRWZ7vrpZ-q_DDqoLvywDk8rgSaSM,3578
12
13
  byzh_core/Butils/__init__.py,sha256=_0aAm72oynvpFf-v9EAMSqhWBHbTt4Tn85jtv3Yf0z8,236
13
14
  byzh_core/Butils/decorator.py,sha256=HaB8F80wsqQuS30jlI8C2d3SmEa0mBNfJEr5-pwGZj0,584
14
15
  byzh_core/Butils/text_style.py,sha256=34u2-Rsur63iNQ0m7tHxpFWqnQZWybSxBx7vnhOhqDo,3346
@@ -21,9 +22,9 @@ byzh_core/obsolete/row_table.py,sha256=rIX0-Yvb3RnO0RJBkA4m18gux1zYSnEKTy6uQGcWi
21
22
  byzh_core/obsolete/xy_table.py,sha256=-KHK8EUlkJj3Rh0sp_KHI0QFt29AlMASMmR8q8ykUBM,6784
22
23
  byzh_core/obsolete/Bconfig/__init__.py,sha256=7lAp7wNetW0AyJcike7ekdY_8wrQQtFjBsi6684t_lU,54
23
24
  byzh_core/obsolete/Bconfig/config.py,sha256=_gUNHfW46mTRecYsz_DQn0LENEPifcF3IMHFVE1prgg,10953
24
- byzh_core-0.0.4.0.dist-info/LICENSE,sha256=-nRwf0Xga4AX5bsWBXXflpDpgX_U23X06oAMcdf0dSY,1089
25
- byzh_core-0.0.4.0.dist-info/METADATA,sha256=YJoJmbZb8Rq6WTyxdnx5UN2WyksRyurQCTmJhB27UAU,371
26
- byzh_core-0.0.4.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
27
- byzh_core-0.0.4.0.dist-info/entry_points.txt,sha256=qoN3Uvulj0BcOQVDqsFqP2dBVQzG1QrUtC5wFsghSLo,51
28
- byzh_core-0.0.4.0.dist-info/top_level.txt,sha256=Xv-pzvl6kPdIbi5UehQcUdGhLtb8-4WhS5dRK1LINwM,10
29
- byzh_core-0.0.4.0.dist-info/RECORD,,
25
+ byzh_core-0.0.5.0.dist-info/LICENSE,sha256=-nRwf0Xga4AX5bsWBXXflpDpgX_U23X06oAMcdf0dSY,1089
26
+ byzh_core-0.0.5.0.dist-info/METADATA,sha256=iTLK_RVMJco8zDcZrgaU-CYq8gHURWMIvoHFgK5xDbg,371
27
+ byzh_core-0.0.5.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
28
+ byzh_core-0.0.5.0.dist-info/entry_points.txt,sha256=qoN3Uvulj0BcOQVDqsFqP2dBVQzG1QrUtC5wFsghSLo,51
29
+ byzh_core-0.0.5.0.dist-info/top_level.txt,sha256=Xv-pzvl6kPdIbi5UehQcUdGhLtb8-4WhS5dRK1LINwM,10
30
+ byzh_core-0.0.5.0.dist-info/RECORD,,