kevin-toolbox-dev 1.3.5__py3-none-any.whl → 1.3.7__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.
Files changed (45) hide show
  1. kevin_toolbox/__init__.py +2 -2
  2. kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +1 -0
  3. kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +218 -0
  4. kevin_toolbox/computer_science/algorithm/statistician/__init__.py +1 -0
  5. kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +2 -2
  6. kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +69 -0
  7. kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +16 -4
  8. kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +5 -12
  9. kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +3 -0
  10. kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py +27 -0
  11. kevin_toolbox/data_flow/file/kevin_notation/write.py +3 -0
  12. kevin_toolbox/data_flow/file/markdown/__init__.py +3 -0
  13. kevin_toolbox/data_flow/file/markdown/find_tables.py +65 -0
  14. kevin_toolbox/data_flow/file/markdown/generate_table.py +19 -5
  15. kevin_toolbox/data_flow/file/markdown/parse_table.py +135 -0
  16. kevin_toolbox/data_flow/file/markdown/save_images_in_ndl.py +81 -0
  17. kevin_toolbox/data_flow/file/markdown/variable.py +17 -0
  18. kevin_toolbox/nested_dict_list/serializer/read.py +1 -1
  19. kevin_toolbox/nested_dict_list/serializer/write.py +10 -2
  20. kevin_toolbox/patches/for_matplotlib/__init__.py +1 -1
  21. kevin_toolbox/patches/for_matplotlib/clear_border_of_axes.py +34 -0
  22. kevin_toolbox/patches/for_matplotlib/color/__init__.py +4 -0
  23. kevin_toolbox/patches/for_matplotlib/color/color_format.py +7 -0
  24. kevin_toolbox/patches/for_matplotlib/color/convert_format.py +108 -0
  25. kevin_toolbox/patches/for_matplotlib/color/generate_color_list.py +50 -0
  26. kevin_toolbox/patches/for_matplotlib/color/get_format.py +12 -0
  27. kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +6 -0
  28. kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +54 -0
  29. kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +60 -0
  30. kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +65 -0
  31. kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +61 -0
  32. kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +53 -0
  33. kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +54 -0
  34. kevin_toolbox/patches/for_optuna/build_study.py +1 -1
  35. kevin_toolbox/patches/for_os/__init__.py +2 -0
  36. kevin_toolbox/patches/for_os/find_files_in_dir.py +30 -0
  37. kevin_toolbox/patches/for_os/path/__init__.py +2 -0
  38. kevin_toolbox/patches/for_os/path/find_illegal_chars.py +47 -0
  39. kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +49 -0
  40. kevin_toolbox_dev-1.3.7.dist-info/METADATA +103 -0
  41. {kevin_toolbox_dev-1.3.5.dist-info → kevin_toolbox_dev-1.3.7.dist-info}/RECORD +43 -20
  42. kevin_toolbox/patches/for_matplotlib/generate_color_list.py +0 -33
  43. kevin_toolbox_dev-1.3.5.dist-info/METADATA +0 -74
  44. {kevin_toolbox_dev-1.3.5.dist-info → kevin_toolbox_dev-1.3.7.dist-info}/WHEEL +0 -0
  45. {kevin_toolbox_dev-1.3.5.dist-info → kevin_toolbox_dev-1.3.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,65 @@
1
+ import os
2
+ import math
3
+ import matplotlib.pyplot as plt
4
+ import numpy as np
5
+ from kevin_toolbox.patches.for_os.path import replace_illegal_chars
6
+
7
+
8
+ def plot_distribution(data_s, title, x_name=None, x_name_ls=None, type_="hist", output_dir=None, **kwargs):
9
+ paras = {
10
+ "dpi": 200
11
+ }
12
+ paras.update(kwargs)
13
+ if x_name is not None:
14
+ x_name_ls = [x_name, ]
15
+ assert isinstance(x_name_ls, (list, tuple)) and len(x_name_ls) > 0
16
+
17
+ plt.clf()
18
+
19
+ alpha = max(1 / len(x_name_ls), 0.3)
20
+ # 检查数据类型
21
+ if type_ in ["histogram", "hist"]:
22
+ # 数字数据,绘制概率分布图
23
+ for x_name in x_name_ls:
24
+ data = data_s[x_name]
25
+ assert all(isinstance(x, (int, float)) for x in data), \
26
+ f'输入数组中的元素类型不一致'
27
+ if "steps" in paras:
28
+ min_ = math.floor(min(data) / paras["steps"]) * paras["steps"]
29
+ max_ = math.ceil(max(data) / paras["steps"]) * paras["steps"]
30
+ bins = np.arange(min_, max_ + paras["steps"], paras["steps"])
31
+ else:
32
+ bins = np.linspace(paras.get("min", min(data)), paras.get("max", max(data)), paras["bin_nums"] + 1)
33
+ plt.hist(data, density=True, bins=bins, alpha=alpha, label=x_name)
34
+ elif type_ in ["category", "cate"]:
35
+ # 字符串数据,绘制概率直方图
36
+ for x_name in x_name_ls:
37
+ data = data_s[x_name]
38
+ unique_values, counts = np.unique(data, return_counts=True)
39
+ probabilities = counts / len(data)
40
+ plt.bar([f'{i}' for i in unique_values], probabilities, label=x_name, alpha=alpha)
41
+ else:
42
+ raise ValueError(f'unsupported plot type {type_}')
43
+
44
+ plt.xlabel(f'value')
45
+ plt.ylabel('prob')
46
+ plt.title(f'{title}')
47
+ # 显示图例
48
+ plt.legend()
49
+
50
+ if output_dir is None:
51
+ plt.show()
52
+ return None
53
+ else:
54
+ os.makedirs(output_dir, exist_ok=True)
55
+ output_path = os.path.join(output_dir, f'{replace_illegal_chars(title)}.png')
56
+ plt.savefig(output_path, dpi=paras["dpi"])
57
+ return output_path
58
+
59
+
60
+ if __name__ == '__main__':
61
+ plot_distribution(data_s={
62
+ 'a': [1, 2, 3, 4, 5, 3, 2, 1],
63
+ 'c': [1, 2, 3, 4, 5, 0, 0, 0]},
64
+ title='test', x_name_ls=['a', 'c'], type_="category",
65
+ output_dir=os.path.join(os.path.dirname(__file__), "temp"))
@@ -0,0 +1,61 @@
1
+ import os
2
+ import matplotlib.pyplot as plt
3
+ from kevin_toolbox.patches.for_os.path import replace_illegal_chars
4
+ from kevin_toolbox.patches.for_matplotlib.color import generate_color_list
5
+
6
+
7
+ def plot_lines(data_s, title, x_name, output_dir=None, **kwargs):
8
+ line_nums = len(data_s) - 1
9
+ paras = {
10
+ "dpi": 200,
11
+ "color_ls": generate_color_list(nums=line_nums),
12
+ "marker_ls": None,
13
+ "linestyle_ls": '-',
14
+ }
15
+ paras.update(kwargs)
16
+ for k, v in paras.items():
17
+ if k.endswith("_ls") and not isinstance(v, (list, tuple)):
18
+ paras[k] = [v] * line_nums
19
+ assert line_nums == len(paras["color_ls"]) == len(paras["marker_ls"]) == len(paras["linestyle_ls"])
20
+
21
+ plt.clf()
22
+ #
23
+ x_all_ls = data_s.pop(x_name)
24
+ data_s, temp = dict(), data_s
25
+ for k, v_ls in temp.items():
26
+ y_ls, x_ls = [], []
27
+ for x, v in zip(x_all_ls, v_ls):
28
+ if x is None or v is None:
29
+ continue
30
+ x_ls.append(x)
31
+ y_ls.append(v)
32
+ if len(x_ls) == 0:
33
+ continue
34
+ data_s[k] = (x_ls, y_ls)
35
+ #
36
+ for i, (k, (x_ls, y_ls)) in enumerate(data_s.items()):
37
+ plt.plot(x_ls, y_ls, label=f'{k}', color=paras["color_ls"][i], marker=paras["marker_ls"][i],
38
+ linestyle=paras["linestyle_ls"][i])
39
+ plt.xlabel(f'{x_name}')
40
+ plt.ylabel('value')
41
+ plt.title(f'{title}')
42
+ # 显示图例
43
+ plt.legend()
44
+
45
+ if output_dir is None:
46
+ plt.show()
47
+ return None
48
+ else:
49
+ # 对非法字符进行替换
50
+ os.makedirs(output_dir, exist_ok=True)
51
+ output_path = os.path.join(output_dir, f'{replace_illegal_chars(title)}.png')
52
+ plt.savefig(output_path, dpi=paras["dpi"])
53
+ return output_path
54
+
55
+
56
+ if __name__ == '__main__':
57
+ plot_lines(data_s={
58
+ 'a': [1, 2, 3, 4, 5],
59
+ 'b': [5, 4, 3, 2, 1],
60
+ 'c': [1, 2, 3, 4, 5]},
61
+ title='test', x_name='a', output_dir=os.path.join(os.path.dirname(__file__), "temp"))
@@ -0,0 +1,53 @@
1
+ import os
2
+ import matplotlib.pyplot as plt
3
+ from kevin_toolbox.patches.for_matplotlib.color import generate_color_list
4
+ from kevin_toolbox.patches.for_os.path import replace_illegal_chars
5
+
6
+
7
+ def plot_scatters(data_s, title, x_name, y_name, cate_name=None, output_dir=None, **kwargs):
8
+ paras = {
9
+ "dpi": 200,
10
+ "scatter_size": 5
11
+ }
12
+ paras.update(kwargs)
13
+
14
+ plt.clf()
15
+ #
16
+ color_s = None
17
+ if cate_name is not None:
18
+ cates = list(set(data_s[cate_name]))
19
+ color_s = {i: j for i, j in zip(cates, generate_color_list(nums=len(cates)))}
20
+ c = [color_s[i] for i in data_s[cate_name]]
21
+ else:
22
+ c = "blue"
23
+ # 创建散点图
24
+ plt.scatter(data_s[x_name], data_s[y_name], s=paras["scatter_size"], c=c, alpha=0.8)
25
+ #
26
+ plt.xlabel(f'{x_name}')
27
+ plt.ylabel(f'{y_name}')
28
+ plt.title(f'{title}')
29
+ # 添加图例
30
+ if cate_name is not None:
31
+ plt.legend(handles=[
32
+ plt.Line2D([0], [0], marker='o', color='w', label=i, markerfacecolor=j,
33
+ markersize=min(paras["scatter_size"], 5)) for i, j in color_s.items()
34
+ ])
35
+
36
+ if output_dir is None:
37
+ plt.show()
38
+ return None
39
+ else:
40
+ os.makedirs(output_dir, exist_ok=True)
41
+ output_path = os.path.join(output_dir, f'{replace_illegal_chars(title)}.png')
42
+ plt.savefig(output_path, dpi=paras["dpi"])
43
+ return output_path
44
+
45
+
46
+ if __name__ == '__main__':
47
+ data_s_ = dict(
48
+ x=[1, 2, 3, 4, 5],
49
+ y=[2, 4, 6, 8, 10],
50
+ categories=['A', 'B', 'A', 'B', 'A']
51
+ )
52
+
53
+ plot_scatters(data_s=data_s_, title='test', x_name='x', y_name='y', cate_name='categories')
@@ -0,0 +1,54 @@
1
+ import os
2
+ import pandas as pd
3
+ import seaborn as sns
4
+ import matplotlib.pyplot as plt
5
+ from kevin_toolbox.patches.for_matplotlib.color import generate_color_list
6
+ from kevin_toolbox.patches.for_os.path import replace_illegal_chars
7
+
8
+
9
+ def plot_scatters_matrix(data_s, title, x_name_ls, cate_name=None, output_dir=None, cate_color_s=None, **kwargs):
10
+ paras = {
11
+ "dpi": 200,
12
+ "diag_kind": "kde" # 设置对角线图直方图/密度图 {‘hist’, ‘kde’}
13
+ }
14
+ assert cate_name in data_s and len(set(x_name_ls).difference(set(data_s.keys()))) == 0
15
+ if cate_color_s is None:
16
+ temp = set(data_s[cate_name])
17
+ cate_color_s = {k: v for k, v in zip(temp, generate_color_list(len(temp)))}
18
+ assert set(cate_color_s.keys()) == set(data_s[cate_name])
19
+ paras.update(kwargs)
20
+
21
+ plt.clf()
22
+ # 使用seaborn绘制散点图矩阵
23
+ sns.pairplot(
24
+ pd.DataFrame(data_s),
25
+ diag_kind=paras["diag_kind"], # 设置对角线图直方图/密度图 {‘hist’, ‘kde’}
26
+ hue=cate_name, # hue 表示根据该列的值进行分类
27
+ palette=cate_color_s, x_vars=x_name_ls, y_vars=x_name_ls, # x_vars,y_vars 指定子图的排列顺序
28
+ )
29
+ #
30
+ plt.subplots_adjust(top=0.95)
31
+ plt.suptitle(f'{title}', y=0.98, x=0.47)
32
+ # g.fig.suptitle(f'{title}', y=1.05)
33
+
34
+ if output_dir is None:
35
+ plt.show()
36
+ return None
37
+ else:
38
+ os.makedirs(output_dir, exist_ok=True)
39
+ output_path = os.path.join(output_dir, f'{replace_illegal_chars(title)}.png')
40
+ plt.savefig(output_path, dpi=paras["dpi"])
41
+ return output_path
42
+
43
+
44
+ if __name__ == '__main__':
45
+ data_s_ = dict(
46
+ x=[1, 2, 3, 4, 5],
47
+ y=[2, 4, 6, 8, 10],
48
+ z=[2, 4, 6, 8, 10],
49
+ categories=['A', 'B', 'A', 'B', 'A'],
50
+ title='test',
51
+ )
52
+
53
+ plot_scatters_matrix(data_s=data_s_, title='test', x_name_ls=['y', 'x', 'z'], cate_name='categories',
54
+ cate_color_s={'A': 'red', 'B': 'blue'})
@@ -24,7 +24,7 @@ def build_study(output_dir=None, feasible_domain_path=None, **kwargs):
24
24
  if "storage" in kwargs:
25
25
  if isinstance(kwargs["storage"], (str,)) and kwargs["storage"].startswith("mysql:"):
26
26
  temp_ls = list(kwargs["storage"].split(":", 1))
27
- temp[0] = "mysql+pymysql"
27
+ temp_ls[0] = "mysql+pymysql"
28
28
  kwargs["storage"] = ":".join(temp_ls)
29
29
  elif isinstance(kwargs["storage"], (dict,)):
30
30
  kwargs["storage"] = build_storage(output_dir=output_dir, **kwargs["storage"]).url
@@ -3,3 +3,5 @@ from .copy import copy
3
3
  from .pack import pack
4
4
  from .unpack import unpack
5
5
  from .walk import walk, Path_Ignorer, Ignore_Scope
6
+ from .find_files_in_dir import find_files_in_dir
7
+ from . import path
@@ -0,0 +1,30 @@
1
+ import os
2
+ from kevin_toolbox.patches.for_os import walk
3
+
4
+
5
+ def find_files_in_dir(input_dir, suffix_ls, b_relative_path=True, b_ignore_case=True):
6
+ """
7
+ 找出目录下带有给定后缀的所有文件的生成器
8
+ 主要利用了 for_os.walk 中的过滤规则进行实现
9
+
10
+ 参数:
11
+ suffix_ls: <list/tuple of str> 可选的后缀
12
+ b_relative_path: <bool> 是否返回相对路径
13
+ b_ignore_case: <bool> 是否忽略大小写
14
+ """
15
+ suffix_ls = tuple(set(suffix_ls))
16
+ suffix_ls = tuple(map(lambda x: x.lower(), suffix_ls)) if b_ignore_case else suffix_ls
17
+ for root, dirs, files in walk(top=input_dir, topdown=True,
18
+ ignore_s=[{
19
+ "func": lambda _, b_is_symlink, path: b_is_symlink or not (
20
+ path.lower() if b_ignore_case else path).endswith(suffix_ls),
21
+ "scope": ["files", ]
22
+ }]):
23
+ for file in files:
24
+ file_path = os.path.join(root, file)
25
+ if b_relative_path:
26
+ file_path = os.path.relpath(file_path, start=input_dir)
27
+ yield file_path
28
+
29
+
30
+
@@ -0,0 +1,2 @@
1
+ from .find_illegal_chars import find_illegal_chars
2
+ from .replace_illegal_chars import replace_illegal_chars
@@ -0,0 +1,47 @@
1
+ import os
2
+ import re
3
+
4
+ ILLEGAL_CHARS = {
5
+ '<': '<',
6
+ '>': '>',
7
+ ':': ':',
8
+ '"': '"',
9
+ '/': '/',
10
+ '\\': '\',
11
+ '|': '|',
12
+ '?': '?',
13
+ '*': '*'
14
+ }
15
+
16
+ ILLEGAL_CHARS_PATTERN = re.compile(r'[<>:"/\\|?*]')
17
+
18
+
19
+ def find_illegal_chars(file_name, b_is_path=False):
20
+ """
21
+ 找出给定的文件名/路径中出现了哪些非法符号
22
+ 所谓非法符号是指在特定系统(win/mac等)中文件名不允许出现的字符,
23
+ 不建议在任何系统下使用带有这些符号的文件名,即使这些符号在当前系统中是合法的,
24
+ 以免在跨系统时出现兼容性问题
25
+
26
+ 参数:
27
+ file_name: <str>
28
+ b_is_path: <bool> 是否将file_name视为路径
29
+ 默认为 False
30
+ 当设置为 True 时,将会首先将file_name分割,再逐级从目录名中查找
31
+ """
32
+ global ILLEGAL_CHARS_PATTERN
33
+
34
+ if b_is_path:
35
+ temp = [i for i in file_name.split(os.sep, -1) if len(i) > 0]
36
+ else:
37
+ temp = [file_name]
38
+ res = []
39
+ for i in temp:
40
+ res.extend(ILLEGAL_CHARS_PATTERN.findall(i))
41
+ return res
42
+
43
+
44
+ if __name__ == '__main__':
45
+ file_path = '//data0//b/<?>.md'
46
+ print(find_illegal_chars(file_name=file_path, b_is_path=True))
47
+ print(find_illegal_chars(file_name=file_path, b_is_path=False))
@@ -0,0 +1,49 @@
1
+ import os
2
+ import re
3
+
4
+ ILLEGAL_CHARS = {
5
+ '<': '<',
6
+ '>': '>',
7
+ ':': ':',
8
+ '"': '"',
9
+ '/': '/',
10
+ '\\': '\',
11
+ '|': '|',
12
+ '?': '?',
13
+ '*': '*'
14
+ }
15
+ ILLEGAL_CHARS_PATTERN = re.compile('|'.join(re.escape(char) for char in ILLEGAL_CHARS.keys()))
16
+
17
+
18
+ def replace_illegal_chars(file_name, b_is_path=False):
19
+ """
20
+ 将给定的文件名/路径中的非法符号替换为合法形式
21
+ 所谓非法符号是指在特定系统(win/mac等)中文件名不允许出现的字符,
22
+ 不建议在任何系统下使用带有这些符号的文件名,即使这些符号在当前系统中是合法的,
23
+ 以免在跨系统时出现兼容性问题。
24
+
25
+ 参数:
26
+ file_name: <str>
27
+ b_is_path: <bool> 是否将file_name视为路径
28
+ 默认为 False
29
+ 当设置为 True 时,将会首先将file_name分割,再逐级处理目录名,最后合并为路径
30
+ """
31
+ if not b_is_path:
32
+ res = _replace_illegal_chars(var=file_name)
33
+ else:
34
+ temp = file_name.split(os.sep, -1)
35
+ res = os.path.join(*[_replace_illegal_chars(var=i) for i in temp if len(i) > 0])
36
+ if len(temp[0]) == 0:
37
+ res = os.sep + res
38
+ return res
39
+
40
+
41
+ def _replace_illegal_chars(var):
42
+ global ILLEGAL_CHARS_PATTERN
43
+ return ILLEGAL_CHARS_PATTERN.sub(lambda m: ILLEGAL_CHARS[m.group(0)], var)
44
+
45
+
46
+ if __name__ == '__main__':
47
+ file_path = 'data0//b/<?>.md'
48
+ print(replace_illegal_chars(file_name=file_path, b_is_path=True))
49
+ print(replace_illegal_chars(file_name=file_path, b_is_path=False))
@@ -0,0 +1,103 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.3.7
4
+ Summary: 一个常用的工具代码包集合
5
+ Home-page: https://github.com/cantbeblank96/kevin_toolbox
6
+ Download-URL: https://github.com/username/your-package/archive/refs/tags/v1.0.0.tar.gz
7
+ Author: kevin hsu
8
+ Author-email: xukaiming1996@163.com
9
+ License: MIT
10
+ Keywords: mathematics,pytorch,numpy,machine-learning,algorithm
11
+ Platform: UNKNOWN
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.6
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: torch (>=1.2.0)
18
+ Requires-Dist: numpy (>=1.19.0)
19
+ Provides-Extra: plot
20
+ Requires-Dist: matplotlib (>=3.0) ; extra == 'plot'
21
+ Provides-Extra: rest
22
+ Requires-Dist: pytest (>=6.2.5) ; extra == 'rest'
23
+ Requires-Dist: line-profiler (>=3.5) ; extra == 'rest'
24
+
25
+ # kevin_toolbox
26
+
27
+ 一个通用的工具代码包集合
28
+
29
+
30
+
31
+ 环境要求
32
+
33
+ ```shell
34
+ numpy>=1.19
35
+ pytorch>=1.2
36
+ ```
37
+
38
+ 安装方法:
39
+
40
+ ```shell
41
+ pip install kevin-toolbox --no-dependencies
42
+ ```
43
+
44
+
45
+
46
+ [项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
47
+
48
+ [使用指南 User_Guide](./notes/User_Guide.md)
49
+
50
+ [免责声明 Disclaimer](./notes/Disclaimer.md)
51
+
52
+ [版本更新记录](./notes/Release_Record.md):
53
+
54
+ - v 1.3.6 (2024-07-03)【new feature】
55
+ - patches
56
+ - for_os
57
+ - 【new feature】add find_files_in_dir(),找出目录下带有给定后缀的所有文件的生成器。
58
+ - for_os.path
59
+ - 【new feature】add find_illegal_chars(),找出给定的文件名/路径中出现了哪些非法符号。
60
+ - 【new feature】add replace_illegal_chars(),将给定的文件名/路径中的非法符号替换为合法形式。
61
+ - for_matplotlib
62
+ - 【new feature】add module common_charts,新增模块——常用图表,该模块下包含以下函数:
63
+ - plot_bars(),绘制柱状图
64
+ - plot_scatters(),绘制散点图
65
+ - plot_lines(),绘制折线图
66
+ - plot_distribution(),绘制分布图
67
+ - plot_scatters_matrix(),绘制散点图矩阵(常用于多变量关系分析)
68
+ - plot_confusion_matrix(),绘制混淆矩阵(常用于混淆矩阵、相关性矩阵、特征图可视化)
69
+ - 添加了测试用例。
70
+ - data_flow.file
71
+ - markdown
72
+ - 【new feature】add save_images_in_ndl(),将ndl结构叶节点下的图片对象保存到 plot_dir 中,并替换为该图片的markdown链接。
73
+ - 便于对表格中的图片或者列表中的图片进行保存和替换。
74
+ - 【new feature】add find_tables(),用于从文本中找出markdown格式的表格,并以二维数组的列表形式返回。
75
+ - 【new feature】add parse_table(),将二维数组形式的表格(比如find_tables()的返回列表的元素),解析成指定的格式。
76
+ - kevin_notation
77
+ - 【bug fix】fix bug in Kevin_Notation_Writer,增加检验写入的列的元素数量是否一致,不一致时进行报错。
78
+ - 【bug fix】fix bug in write(),避免对输入参数 metadata 中的内容进行意料之外的改动。
79
+ - nested_dict_list
80
+ - add para b_allow_override to serializer.write to allow overwriting,增加参数用于允许强制覆盖已有文件。
81
+ - computer_science.algorithm
82
+ - pareto_front
83
+ - 【new feature】add Optimum_Picker,帕累托最优值选取器。
84
+ - 记录并更新帕累托最优值
85
+ - 同时支持监控以下行为,并触发设定的执行器,详见参数 trigger_for_new 和 trigger_for_out。
86
+ - 新加值是一个新的帕累托最优值
87
+ - 抛弃一个不再是最优的旧的最优值
88
+ - statistician
89
+ - 【new feature】add Accumulator_for_Ndl,适用于 ndl 结构的统计器。
90
+ - 【bug fix】fix bug in Accumulator_Base._init_var()
91
+ - 【new feature】modify Average_Accumulator,在 add() 中新增了 weight 参数用于计算带权重的平均值
92
+ - modify Exponential_Moving_Average,add_sequence() 不再支持 weight_ls 参数,让该接口与其他类更加一致。
93
+ - 添加了测试用例。
94
+ - v 1.3.7 (2024-08-01)【new feature】
95
+ - patches.for_matplotlib
96
+ - 【new feature】add clear_border_of_axes(),用于清除 ax 中的坐标轴和 ticks。
97
+ - 【new feature】add module color,添加用于处理颜色相关的模块,包含以下函数和属性
98
+ - Color_Format 颜色格式,共有 HEX_STR、RGBA_ARRAY、NATURAL_NAME 三种
99
+ - get_format(),推断所属颜色格式
100
+ - convert_format(),在各种颜色格式之间进行转换
101
+ - generate_color_list(),改进自原来的 for_matplotlib.generate_color_list(),新增了output_format参数用于对颜色格式的控制
102
+
103
+
@@ -1,4 +1,4 @@
1
- kevin_toolbox/__init__.py,sha256=JzwJXkcT4vV0qixg5n7pd24pB0WTgH5FVJcfB3f6ZCQ,410
1
+ kevin_toolbox/__init__.py,sha256=2zesFjPoSdPgShu8x4WbQ8lxiXVZy32fZOBZe50HpPo,410
2
2
  kevin_toolbox/computer_science/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  kevin_toolbox/computer_science/algorithm/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
4
4
  kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py,sha256=p2hddkZ1HfYF9-m2Hx-o9IotwQHd4QwDCePy2ADpTDA,41
@@ -38,8 +38,9 @@ kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py,sha256=81cCw3oTXCZx
38
38
  kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py,sha256=EUy1RptOJCLzu6L0ZWGdyto0btI_vEvjEJHvKKBN4pk,55
39
39
  kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py,sha256=yWHpD_1XrC8hG3PWXUZEDj5rnfM0-d-NptRE856tcmY,896
40
40
  kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py,sha256=WSQZ9BE-21oc59leHxd-2IRMMxpmEezX7SX7e1UyV-4,3126
41
- kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py,sha256=R3ztTEfD_i3pHfGrrghUhbFEhVCgU_OKopnTskIianE,68
41
+ kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py,sha256=F1uD0ZT2Ukb708_Eay96SEhaDfCq9YEheJRust33P6w,111
42
42
  kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py,sha256=WR-_9BruqAWH0QECa40b1Iz1_k6uesBrUYrn2s9ALBM,3008
43
+ kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py,sha256=wnYN2s9r2g1z5wF0FvFLawRYITUJbMXbBs4TPsdvhlE,9923
43
44
  kevin_toolbox/computer_science/algorithm/registration/__init__.py,sha256=teEd9HkrB6baLpwNwae5c4wn0QRwV3KtBv-2V9-Z7cc,49
44
45
  kevin_toolbox/computer_science/algorithm/registration/registry.py,sha256=vTply8VnVuI3zaRxCJewKICpVwVcUF_Vl7Yu_LG7O4w,17385
45
46
  kevin_toolbox/computer_science/algorithm/scheduler/__init__.py,sha256=ENzZsNaMu6ISilTxeE3_EP_L0dNi8SI7IYdTdxic2nw,76
@@ -47,10 +48,11 @@ kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py,sha256=yL
47
48
  kevin_toolbox/computer_science/algorithm/scheduler/trigger.py,sha256=YlqTX2TE44BwcQI0jfvcBCJhouhdAYuhwu2QJhuBWP0,4470
48
49
  kevin_toolbox/computer_science/algorithm/search/__init__.py,sha256=zja7FXLTNd2dSVzzGp1TbBp4i3TDY8S9tcJ9pqc684A,41
49
50
  kevin_toolbox/computer_science/algorithm/search/binary_search.py,sha256=FcOdgxfuNews_AhPF_CoQDr2vBPqpUpifF7Fmgml1p4,1013
50
- kevin_toolbox/computer_science/algorithm/statistician/__init__.py,sha256=_ZAqOf9yUcGzn0ByVYhj9xZMdljzQj1mZNXGfHOFb4k,167
51
- kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py,sha256=1JgznVWBLOn4dXkiMJphhyj6HPLFzXIe98jxc_rTzJg,6098
52
- kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py,sha256=dxWg8B3APM7Y9qRtFLP2CNbmPivpSzln-VdSVh0xykA,2570
53
- kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py,sha256=t5MxoCFVRz9qnRncdGQEIDKAKtMTqijv2n6gHaMLeRM,5363
51
+ kevin_toolbox/computer_science/algorithm/statistician/__init__.py,sha256=sYp7CrchsIdv89bBbiFHr3sIj6TGPBTQGHshSSk-9Z8,220
52
+ kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py,sha256=iv-Mdw74u_iRceLX80_CSoEd4N3uAavU54Yw5Gw9t1o,6113
53
+ kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py,sha256=BBPuJHhMI7m6-qP3EDB1Z2dlCg4a_Fev7WQ5zFMPuuE,2275
54
+ kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py,sha256=Dfd6zYALU-plkm8doc3xNyiR4sFqlib86IVH8FI8ciI,2896
55
+ kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py,sha256=fc4l85FH-KbZSIQY15lJ6SDnXiU-F5XjbQimKCnIju8,5076
54
56
  kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py,sha256=LrrLKilP-LqkNeLEqClZN4wMl9TvEaDktgbmw7CN1mY,121
55
57
  kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py,sha256=vCLguGS7het-gwPZ5uR2KDxnHV4gPaNbzJflocLbmLQ,769
56
58
  kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py,sha256=8QfvltiNDqZUYiNW6Ebt0UIuYvyqhSpsCYn99T2q70c,572
@@ -84,19 +86,24 @@ kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py,sha256=3v
84
86
  kevin_toolbox/data_flow/file/kevin_notation/__init__.py,sha256=g9UUF9nJrOMc0ndCwVROQLsux4Or2yVMJMdhK5P9nRc,259
85
87
  kevin_toolbox/data_flow/file/kevin_notation/converter.py,sha256=5k_Yxw-fBKEkxFG0bnl1fRsz06MlUS-4f3gZ--bmDs8,3621
86
88
  kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py,sha256=iN6nV8mMbifTbECNmjc-G2pzpxivhks5kCXGVdvS9fQ,8297
87
- kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py,sha256=Py8kyyi9RgxCSpuGebNkaxc9g4S8TdtiNJNDrJyP2UA,16328
89
+ kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py,sha256=ceZty_XPPEVgagQs1ddx9X23JDja22sr3gl7wrBIHfE,16546
88
90
  kevin_toolbox/data_flow/file/kevin_notation/read.py,sha256=w0RE0WwTmWycEozJVshAiE0gMBxproBRwBEMLS6tB6c,544
89
- kevin_toolbox/data_flow/file/kevin_notation/write.py,sha256=gPabz_h2mtXqCTyBVzip_QSb6L4tsrNSqibFzuqsIv8,556
91
+ kevin_toolbox/data_flow/file/kevin_notation/write.py,sha256=X6k9ccpGEoMr6ccvjUj8zVJ6aPxjvdsY2fZqYu3Etww,657
90
92
  kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
93
  kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py,sha256=ab402r5LGyNz4XW2SnjvicNtQqBAAHZTaGfYMNdMExI,7345
94
+ kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py,sha256=_s9KPa3OjX6hTMq3TNrvtHy2D-Wlp65qgr7LxH-nn8o,999
92
95
  kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
96
  kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py,sha256=CKRb86O3JV9lkGrMtyJzEH041o0xABfT32Zo4GQ5Qis,324
94
97
  kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py,sha256=Xs8oFJqwi0uPOJewulij7DY0iMEp6dWBMiiDIwPlm4s,176
95
98
  kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py,sha256=cvwrNzMVqB2YF1Ya3pw4NSOOzQBcGCFVCB2lN-sKmfw,438
96
- kevin_toolbox/data_flow/file/markdown/__init__.py,sha256=iTZTBvcEUehBdcWxzFQEW4iEcXbAQkdkEmENiGtBjqs,125
99
+ kevin_toolbox/data_flow/file/markdown/__init__.py,sha256=oPUUDFM0i3roBPLJm6jleF_uSq1_2_fD0-zG_7n2lys,250
100
+ kevin_toolbox/data_flow/file/markdown/find_tables.py,sha256=YZrdy0koiG_KMCNeJFtNShzx9f1whg0xnaBhB0F8k4o,1699
97
101
  kevin_toolbox/data_flow/file/markdown/generate_link.py,sha256=9okSyCFIDQW5T35a6-epVyoCkCL1vFH5215P5MRXfYk,304
98
102
  kevin_toolbox/data_flow/file/markdown/generate_list.py,sha256=Gv5BcqWE4M4w8ADN8NX5LyD9DxILXTQtJvcazi_NuyE,1006
99
- kevin_toolbox/data_flow/file/markdown/generate_table.py,sha256=Ct2gfnciBv0GGZHOKlIHyTlE7KqXsL0L5vBRCrQnOpI,7209
103
+ kevin_toolbox/data_flow/file/markdown/generate_table.py,sha256=u-FLyjQi7R7xkKmSZSyXBCWVMuICYfShSgBlz-vptkI,7991
104
+ kevin_toolbox/data_flow/file/markdown/parse_table.py,sha256=aKR8SNpA3Tr24GZQRtr2mx7TQYYKhNLArV9su5H5kWU,5957
105
+ kevin_toolbox/data_flow/file/markdown/save_images_in_ndl.py,sha256=F_c6FP4QgWjlCF_ftSDpa6KoyfUrlE3cH216_w_0q3E,3897
106
+ kevin_toolbox/data_flow/file/markdown/variable.py,sha256=fQp_wxhXJv_HosuaiiEPkDTodT4jzcxN19HXGAzeckc,857
100
107
  kevin_toolbox/developing/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
101
108
  kevin_toolbox/developing/general_matrix_multiplication.py,sha256=Ie9c8mYBYR-Bg7CjU4L1dsOxXsxnx1jz-rA7_ez7vjg,2089
102
109
  kevin_toolbox/developing/test.py,sha256=6Y23SY3FJVrvZmiiXKNPKv84lhVRW-XyjNeecj9lLYA,241
@@ -229,10 +236,10 @@ kevin_toolbox/nested_dict_list/name_handler/escape_node.py,sha256=niT9MxmsyrSZYh
229
236
  kevin_toolbox/nested_dict_list/name_handler/parse_name.py,sha256=vUlAXPocpVSxtb3EnRi7U5K40Tz9plFG-_sbwLfYiy4,2280
230
237
  kevin_toolbox/nested_dict_list/serializer/__init__.py,sha256=79dd9l-mNz0bycFKjNm7YsfWPR-JsVx9NoG_Ofqy-HQ,153
231
238
  kevin_toolbox/nested_dict_list/serializer/enum_variable.py,sha256=RWPydtXI4adOJYGo_k5CWHSL0Odzj_bsahb24p1ranY,847
232
- kevin_toolbox/nested_dict_list/serializer/read.py,sha256=Ms86R8jRvuvbIWiyL8WUYXvU9APRXe72w9q_YcOKUWM,2944
239
+ kevin_toolbox/nested_dict_list/serializer/read.py,sha256=BjsEWYoyvEHgRKKVKw0suf1ukug2tAFLMCAmEnndqgg,2945
233
240
  kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py,sha256=qsD-rmDmVaKZP4owN3Wm3QY2Ksi71XlYETqw4VmIsSU,1011
234
241
  kevin_toolbox/nested_dict_list/serializer/variable.py,sha256=ZywG6obipRBCGY1cY42gdvsuWk8GLZXr6eCYcW7ZJ9c,392
235
- kevin_toolbox/nested_dict_list/serializer/write.py,sha256=VMwD579NBl0QZeHh9P4WuFzA3CdtuRaqLLu5S5NGt5E,21468
242
+ kevin_toolbox/nested_dict_list/serializer/write.py,sha256=HDmwEQHTnhFYITItFxM5Zw7sl7F4a50_MN59mR-pU3g,21898
236
243
  kevin_toolbox/nested_dict_list/serializer/backends/__init__.py,sha256=8g7y-L3cmctxao616dVkGiot00FJzKNmNl_69V2bSmE,39
237
244
  kevin_toolbox/nested_dict_list/serializer/backends/_json_.py,sha256=oJXIc28yjxsD9ZJuw120pVHTVsTzCdaXEhVUSQeydq4,2145
238
245
  kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py,sha256=3YkAq_Bqzehnw0kGxqxwtF6uUz0EV37tLI-1ROHjixY,1794
@@ -253,11 +260,23 @@ kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py,
253
260
  kevin_toolbox/patches/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
261
  kevin_toolbox/patches/for_logging/__init__.py,sha256=xymF6mjwY4Cin7CoEwanFY5ZVk8oY0pDLqjZAGa7_Rg,39
255
262
  kevin_toolbox/patches/for_logging/build_logger.py,sha256=0UoRMKaERd8wlHGTiNR3dbLQRAtXcb0QZuGkX2oFgGo,3071
256
- kevin_toolbox/patches/for_matplotlib/__init__.py,sha256=iFN3eCUhKN_QbnAiYSc7dPNLmjhjo7i9D2OdLprEdOw,180
263
+ kevin_toolbox/patches/for_matplotlib/__init__.py,sha256=Pr9jXGomD3wBvtKE8p9V7rKDY4YBLAP5ayWEuBbDdk4,182
257
264
  kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py,sha256=mKXRUNJiEZBcff3pAkwL_gcKGn55CLRhYCTSd3fj1Go,1837
258
265
  kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py,sha256=VGlZfVY0xhUBOUzWJVPxZZNHHRvWLR0HZzhADA_cbsU,1696
259
266
  kevin_toolbox/patches/for_matplotlib/arrow3d.py,sha256=JSnNMr1hU2N4FUX526I4MDr04mksDgu4VuegYFDxk1Q,1361
260
- kevin_toolbox/patches/for_matplotlib/generate_color_list.py,sha256=byGZiehbPMUz4DnMtAUbjLL6UADahWEA4vBbaneDPH8,984
267
+ kevin_toolbox/patches/for_matplotlib/clear_border_of_axes.py,sha256=aQtzrw4W-DUffvwTqsA9Ez7b_vj-C58ROE_UcCKIawQ,725
268
+ kevin_toolbox/patches/for_matplotlib/color/__init__.py,sha256=5VGALqLCFsGqBWrOnFouVxkpp_DfqMIcKDLzYPdOTy8,170
269
+ kevin_toolbox/patches/for_matplotlib/color/color_format.py,sha256=ADwKfPmryxOuN691ol_2djOIkGQGJcnUAcqE3pbxGJs,205
270
+ kevin_toolbox/patches/for_matplotlib/color/convert_format.py,sha256=fmFwirEqF2OXuH3qiQD_vCTUBqsqDIDR6F62mIX5XmU,4040
271
+ kevin_toolbox/patches/for_matplotlib/color/generate_color_list.py,sha256=TZm-TkOuJbFzJ0_RklliQ9SHjMUhJvjbu7DUJGtgvw0,1993
272
+ kevin_toolbox/patches/for_matplotlib/color/get_format.py,sha256=l_vX8DUsWHNzLwveuF60TLcbQ_P7PvVt1yH_7FjElDs,312
273
+ kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py,sha256=etey2r0LO4PTLnH3VzcRKFe7IHP9I5TMW3DEz3sQx2c,270
274
+ kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py,sha256=crS1h79Dz6gGOnqhjuuN2o5pl8CekhCenx9lRz5KPiI,1887
275
+ kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py,sha256=dxkgiXeoIdtXzcg_HoUnRGqhJk91iNoB5VbLuoG7o_M,2191
276
+ kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py,sha256=stuyaULWM_vVW3r9WrpzGqA8rohQrdNKT3Agsbobqck,2396
277
+ kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py,sha256=rb95pupvaiEiGi3o0CP2v-qcOkl1nYF_kgxCTSLGPjI,1991
278
+ kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py,sha256=whO36bmixjwtsjCS6Ah6zEGJAlJyGcD-wmV3dA6u7mk,1658
279
+ kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py,sha256=bf2EfGlPW9dtDfRse1gk8RVxvC8CJ0NeMdrpSw43wFg,1989
261
280
  kevin_toolbox/patches/for_numpy/__init__.py,sha256=SNjZGxTRBn-uzkyZi6Jcz-9juhhZKT8TI70qH-fhGGc,21
262
281
  kevin_toolbox/patches/for_numpy/linalg/__init__.py,sha256=TH-M0Orrakyf9S9A8FiDf3zLHY24gP2SGGTuNmLhDP4,128
263
282
  kevin_toolbox/patches/for_numpy/linalg/cos_similar.py,sha256=bFkfDwrW3maXq5i9ZABidKfg8ZdEdXfFgNzW_uygrM4,423
@@ -272,7 +291,7 @@ kevin_toolbox/patches/for_numpy/random/variable.py,sha256=Sam-QZgkx9_IvHzZhpUrXl
272
291
  kevin_toolbox/patches/for_optuna/__init__.py,sha256=5ZVEXbL6zp6a0rqH2LPsiErZrgpcILWUEtTyK31gzSY,249
273
292
  kevin_toolbox/patches/for_optuna/build_sampler.py,sha256=0gRv2vPLyr71mlnTi2cJ4_SxO8WAyQOGL8DXiY7o2Es,1705
274
293
  kevin_toolbox/patches/for_optuna/build_storage.py,sha256=kGY7fsWroFJ4TQUGy5j_qG5xDuapdB0H5dy2IKSJoYw,3327
275
- kevin_toolbox/patches/for_optuna/build_study.py,sha256=8N0ERvVJxSMRemTzJCeVA6ngkAkXqw8AIFFcvOo27V8,2253
294
+ kevin_toolbox/patches/for_optuna/build_study.py,sha256=nDyG8ifHVmMVc0KylD1lU-iO_BlJ49UZwIRdWVUGp-s,2256
276
295
  kevin_toolbox/patches/for_optuna/copy_study.py,sha256=neBGpGuNhVQB5R5wtHem48A2hqBYOXFU1LxxQDUQQw0,2743
277
296
  kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py,sha256=-Ckwo2N4vhWr08F7ROLfwLWIx4ERwdwn4Q5Ft2JRm7g,7071
278
297
  kevin_toolbox/patches/for_optuna/serialize/__init__.py,sha256=7WTrwFsW1xnW85zECUQtPTRqVUdPU9V1L8UWrFZyyms,35
@@ -282,12 +301,16 @@ kevin_toolbox/patches/for_optuna/serialize/for_study/load.py,sha256=DwnDheJx5IJp
282
301
  kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py,sha256=YSROCv89O84gzzRP2NfVl0Xhd4_RsdoqU3Nnr-vhWhk,46
283
302
  kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py,sha256=FT-Z1rzCNUYz5St1Yc0bfDWAV10WaV41rlbWIS72Jp0,982
284
303
  kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py,sha256=2fpeeHPKA9bT7CjQ6DVRXOarF6IAA6_f2pXbB1rXcvE,796
285
- kevin_toolbox/patches/for_os/__init__.py,sha256=jx4UCTxEW2QhLfgfPhxcgUrftvs_2420IAQJso82DeQ,151
304
+ kevin_toolbox/patches/for_os/__init__.py,sha256=OhGxHkzI-oBek6M07kkrRgTQfY42l1Y2nOIR95JYD-g,219
286
305
  kevin_toolbox/patches/for_os/copy.py,sha256=PWFLu15DpIA4JZxatvphHANNn2H3nC93qTbLLxDl5NU,1509
306
+ kevin_toolbox/patches/for_os/find_files_in_dir.py,sha256=KtjUJTMTNivAoWXGYgVkuaXukU1ktEAA-u8peusznmU,1266
287
307
  kevin_toolbox/patches/for_os/pack.py,sha256=A6u4g3dfwXPtlU4gBcThNrktz6dO4DVi2wmQXytqfDI,656
288
308
  kevin_toolbox/patches/for_os/remove.py,sha256=PmwqzVJbyfdqwXn_T1F9d4Oar8CwQ2YFaqcZQkfnrnI,750
289
309
  kevin_toolbox/patches/for_os/unpack.py,sha256=d_fO7nPmExy1VIg7ADIMayCzjBBeFxvJLhIsulIRlzI,1047
290
310
  kevin_toolbox/patches/for_os/walk.py,sha256=LrtEeRUDwzZgu_zGZ-kPsFJd4D-8R8ECHW6WNdEsDSw,8376
311
+ kevin_toolbox/patches/for_os/path/__init__.py,sha256=M4XaYawTDj-SjwZ_bWS5D38lqzPujxvAtVEvzRLDhtU,108
312
+ kevin_toolbox/patches/for_os/path/find_illegal_chars.py,sha256=QmqzeaeBY50of28qtvfEmnDW9xeVIfCXi6QVzLzngks,1416
313
+ kevin_toolbox/patches/for_os/path/replace_illegal_chars.py,sha256=OhxndHEJ8xK-ip-sWYQehTNSho8eNFeKj2iwPHR02os,1672
291
314
  kevin_toolbox/patches/for_test/__init__.py,sha256=sFr2VZD1zk8Vtjq2_F8uE4xNovJF6yDY8j1YND5XAw0,49
292
315
  kevin_toolbox/patches/for_test/check_consistency.py,sha256=cerf4NywkvWYMvuJUjimfRRVU7D9vL30jTAX0NxxRoM,9422
293
316
  kevin_toolbox/patches/for_torch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -305,7 +328,7 @@ kevin_toolbox/patches/for_torch/math/get_y_at_x.py,sha256=bfoVcasZ_tMdhR_1Me0Jli
305
328
  kevin_toolbox/patches/for_torch/math/my_around.py,sha256=ptpU3ids50gwf663EpHbw7raj9tNrDGBFZ5t_uMNH14,1378
306
329
  kevin_toolbox/patches/for_torch/nn/__init__.py,sha256=aJs3RMqRzQmd8KKDmQW9FxwCqS5yfPqEdg-m0PwlQro,39
307
330
  kevin_toolbox/patches/for_torch/nn/lambda_layer.py,sha256=KUuLiX_Dr4bvRmpAaCW5QTDWDcnMPRnw0jg4NNXTFhM,223
308
- kevin_toolbox_dev-1.3.5.dist-info/METADATA,sha256=ftmjWCBMUjdd756VCDmVAXgSXT1hIBWpZpvzngyAWCQ,2636
309
- kevin_toolbox_dev-1.3.5.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
310
- kevin_toolbox_dev-1.3.5.dist-info/top_level.txt,sha256=S5TeRGF-PwlhsaUEPTI-f2vWrpLmh3axpyI6v-Fi75o,14
311
- kevin_toolbox_dev-1.3.5.dist-info/RECORD,,
331
+ kevin_toolbox_dev-1.3.7.dist-info/METADATA,sha256=7Mr6vujSwCm_da7yVColjXQt7ou4Z-Xm8rlfamc3AJs,4807
332
+ kevin_toolbox_dev-1.3.7.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
333
+ kevin_toolbox_dev-1.3.7.dist-info/top_level.txt,sha256=S5TeRGF-PwlhsaUEPTI-f2vWrpLmh3axpyI6v-Fi75o,14
334
+ kevin_toolbox_dev-1.3.7.dist-info/RECORD,,