kevin-toolbox-dev 1.2.5__tar.gz → 1.3.6__tar.gz

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 (350) hide show
  1. kevin-toolbox-dev-1.3.6/PKG-INFO +90 -0
  2. kevin-toolbox-dev-1.3.6/README.md +69 -0
  3. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/__init__.py +2 -2
  4. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +1 -0
  5. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +2 -0
  6. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/cache/cache_base.py +89 -0
  7. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/cache/memo_cache.py +36 -0
  8. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +218 -0
  9. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +5 -0
  10. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/fifo_strategy.py +21 -0
  11. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lfu_strategy.py +80 -0
  12. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lru_strategy.py +43 -0
  13. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lst_strategy.py +26 -0
  14. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/strategy_base.py +45 -0
  15. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_builder.py +37 -0
  16. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_manager.py +197 -0
  17. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_strategy.py +129 -0
  18. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +28 -0
  19. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +34 -0
  20. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +2 -0
  21. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +15 -4
  22. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +218 -0
  23. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/registration/registry.py +69 -23
  24. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +2 -0
  25. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +146 -0
  26. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +69 -0
  27. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +21 -36
  28. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +15 -30
  29. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +2 -0
  30. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +24 -0
  31. kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +20 -0
  32. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/cache/__init__.py +1 -1
  33. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +229 -0
  34. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/core/cache/test/test_cache_manager_for_iterator.py +34 -0
  35. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +44 -9
  36. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/unified_reader.py +2 -2
  37. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +4 -5
  38. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +2 -2
  39. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/json_/converter/escape_tuple_and_set.py +23 -0
  40. kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple.py → kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py +7 -5
  41. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/read_json.py +14 -8
  42. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/write_json.py +3 -3
  43. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +9 -7
  44. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +5 -2
  45. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/read.py +4 -2
  46. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +3 -0
  47. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +8 -1
  48. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +15 -3
  49. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py +27 -0
  50. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/write.py +3 -0
  51. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/__init__.py +3 -0
  52. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/find_tables.py +65 -0
  53. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/generate_table.py +144 -0
  54. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/parse_table.py +135 -0
  55. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/save_images_in_ndl.py +81 -0
  56. kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/variable.py +17 -0
  57. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/__init__.py +1 -1
  58. kevin-toolbox-dev-1.2.5/kevin_toolbox/math/utils/spilt_integer_most_evenly.py → kevin-toolbox-dev-1.3.6/kevin_toolbox/math/utils/split_integer_most_evenly.py +2 -2
  59. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/__init__.py +3 -0
  60. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/copy_.py +157 -0
  61. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/get_nodes.py +9 -4
  62. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +1 -1
  63. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +1 -1
  64. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/serializer/__init__.py +4 -0
  65. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +4 -1
  66. kevin-toolbox-dev-1.2.5/kevin_toolbox/nested_dict_list/serializer/variable.py → kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -8
  67. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/read.py +31 -19
  68. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py +31 -0
  69. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/serializer/variable.py +8 -0
  70. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/write.py +76 -34
  71. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/set_default.py +56 -0
  72. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/set_value.py +20 -8
  73. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +2 -0
  74. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +40 -0
  75. kevin-toolbox-dev-1.3.6/kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py +127 -0
  76. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_logging/__init__.py +1 -0
  77. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_logging/build_logger.py +62 -0
  78. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/__init__.py +1 -0
  79. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +6 -0
  80. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +54 -0
  81. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +60 -0
  82. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +65 -0
  83. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +61 -0
  84. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +53 -0
  85. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +54 -0
  86. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/generate_color_list.py +33 -0
  87. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/__init__.py +1 -0
  88. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +1 -0
  89. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/linalg/entropy.py +26 -0
  90. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/linalg/softmax.py +48 -0
  91. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/random/__init__.py +3 -0
  92. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/random/get_rng.py +64 -0
  93. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +129 -0
  94. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +89 -0
  95. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_numpy/random/variable.py +10 -0
  96. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/__init__.py +7 -0
  97. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/build_sampler.py +37 -0
  98. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/build_storage.py +77 -0
  99. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/build_study.py +46 -0
  100. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/copy_study.py +59 -0
  101. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +122 -0
  102. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/__init__.py +1 -0
  103. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +2 -0
  104. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +50 -0
  105. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +52 -0
  106. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +2 -0
  107. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +28 -0
  108. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +27 -0
  109. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/__init__.py +7 -0
  110. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/copy.py +33 -0
  111. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/find_files_in_dir.py +30 -0
  112. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/path/__init__.py +2 -0
  113. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/path/find_illegal_chars.py +47 -0
  114. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +49 -0
  115. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/remove.py +4 -2
  116. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/walk.py +167 -0
  117. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_test/check_consistency.py +174 -0
  118. kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_torch/__init__.py +0 -0
  119. kevin-toolbox-dev-1.3.6/kevin_toolbox_dev.egg-info/PKG-INFO +90 -0
  120. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/SOURCES.txt +72 -4
  121. kevin-toolbox-dev-1.2.5/PKG-INFO +0 -57
  122. kevin-toolbox-dev-1.2.5/README.md +0 -39
  123. kevin-toolbox-dev-1.2.5/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -1
  124. kevin-toolbox-dev-1.2.5/kevin_toolbox/computer_science/algorithm/statistician/_init_var.py +0 -27
  125. kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -361
  126. kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/file/json_/converter/escape_tuple.py +0 -20
  127. kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/file/markdown/generate_table.py +0 -26
  128. kevin-toolbox-dev-1.2.5/kevin_toolbox/nested_dict_list/copy_.py +0 -25
  129. kevin-toolbox-dev-1.2.5/kevin_toolbox/nested_dict_list/serializer/__init__.py +0 -2
  130. kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -11
  131. kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_optuna/__init__.py +0 -1
  132. kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -78
  133. kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_os/__init__.py +0 -3
  134. kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_test/check_consistency.py +0 -103
  135. kevin-toolbox-dev-1.2.5/kevin_toolbox_dev.egg-info/PKG-INFO +0 -57
  136. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/__init__.py +0 -0
  137. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
  138. {kevin-toolbox-dev-1.2.5/kevin_toolbox/computer_science/algorithm/combinatorial_optimization → kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/cache_manager}/test/__init__.py +0 -0
  139. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
  140. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
  141. {kevin-toolbox-dev-1.2.5/kevin_toolbox/computer_science/algorithm/execution_graph → kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test}/__init__.py +0 -0
  142. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
  143. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
  144. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
  145. {kevin-toolbox-dev-1.2.5/kevin_toolbox/computer_science/algorithm/utils → kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/execution_graph}/__init__.py +0 -0
  146. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
  147. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
  148. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
  149. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
  150. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
  151. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
  152. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
  153. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
  154. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
  155. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
  156. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
  157. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
  158. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -0
  159. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
  160. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
  161. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
  162. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
  163. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
  164. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
  165. {kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow → kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/utils}/__init__.py +0 -0
  166. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
  167. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
  168. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/dangerous/__init__.py +0 -0
  169. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
  170. {kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/core → kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow}/__init__.py +0 -0
  171. {kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/file/kevin_notation/test → kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/core}/__init__.py +0 -0
  172. {kevin-toolbox-dev-1.2.5/kevin_toolbox/data_flow/file/kevin_notation/test/test_data → kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/core/cache/test}/__init__.py +0 -0
  173. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
  174. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/__init__.py +0 -0
  175. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
  176. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
  177. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
  178. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
  179. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
  180. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
  181. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
  182. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
  183. {kevin-toolbox-dev-1.2.5/kevin_toolbox/developing/numerical_characteristics → kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/kevin_notation/test}/__init__.py +0 -0
  184. {kevin-toolbox-dev-1.2.5/kevin_toolbox/env_info/test → kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/kevin_notation/test/test_data}/__init__.py +0 -0
  185. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
  186. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/generate_link.py +0 -0
  187. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
  188. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/__init__.py +0 -0
  189. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/decorator/__init__.py +0 -0
  190. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
  191. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
  192. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
  193. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
  194. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
  195. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
  196. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
  197. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
  198. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
  199. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
  200. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
  201. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
  202. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
  203. {kevin-toolbox-dev-1.2.5/kevin_toolbox/geometry → kevin-toolbox-dev-1.3.6/kevin_toolbox/developing/numerical_characteristics}/__init__.py +0 -0
  204. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
  205. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/__init__.py +0 -0
  206. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
  207. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
  208. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
  209. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
  210. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/test.py +0 -0
  211. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/__init__.py +0 -0
  212. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
  213. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
  214. {kevin-toolbox-dev-1.2.5/kevin_toolbox/geometry/for_boxes/__old_version → kevin-toolbox-dev-1.3.6/kevin_toolbox/env_info/test}/__init__.py +0 -0
  215. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/test/test_version.py +0 -0
  216. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/__init__.py +0 -0
  217. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/compare_version.py +0 -0
  218. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/parse_version.py +0 -0
  219. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
  220. {kevin-toolbox-dev-1.2.5/kevin_toolbox/machine_learning → kevin-toolbox-dev-1.3.6/kevin_toolbox/geometry}/__init__.py +0 -0
  221. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
  222. {kevin-toolbox-dev-1.2.5/kevin_toolbox/machine_learning/dataset/face → kevin-toolbox-dev-1.3.6/kevin_toolbox/geometry/for_boxes/__old_version}/__init__.py +0 -0
  223. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
  224. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
  225. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
  226. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
  227. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
  228. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
  229. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
  230. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
  231. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
  232. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
  233. {kevin-toolbox-dev-1.2.5/kevin_toolbox/machine_learning/statistician → kevin-toolbox-dev-1.3.6/kevin_toolbox/machine_learning}/__init__.py +0 -0
  234. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
  235. {kevin-toolbox-dev-1.2.5/kevin_toolbox/math → kevin-toolbox-dev-1.3.6/kevin_toolbox/machine_learning/dataset/face}/__init__.py +0 -0
  236. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
  237. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
  238. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
  239. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
  240. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
  241. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
  242. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
  243. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
  244. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
  245. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
  246. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
  247. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
  248. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
  249. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
  250. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
  251. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
  252. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
  253. {kevin-toolbox-dev-1.2.5/kevin_toolbox/math/dimension → kevin-toolbox-dev-1.3.6/kevin_toolbox/machine_learning/statistician}/__init__.py +0 -0
  254. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
  255. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
  256. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
  257. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
  258. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
  259. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
  260. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
  261. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
  262. {kevin-toolbox-dev-1.2.5/kevin_toolbox/math/number_theory/test → kevin-toolbox-dev-1.3.6/kevin_toolbox/math}/__init__.py +0 -0
  263. {kevin-toolbox-dev-1.2.5/kevin_toolbox/math/transform → kevin-toolbox-dev-1.3.6/kevin_toolbox/math/dimension}/__init__.py +0 -0
  264. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
  265. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
  266. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
  267. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
  268. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
  269. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
  270. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
  271. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
  272. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
  273. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
  274. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
  275. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
  276. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
  277. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
  278. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
  279. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
  280. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
  281. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
  282. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
  283. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
  284. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/__init__.py +0 -0
  285. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/cache.py +0 -0
  286. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
  287. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
  288. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
  289. {kevin-toolbox-dev-1.2.5/kevin_toolbox/patches → kevin-toolbox-dev-1.3.6/kevin_toolbox/math/number_theory/test}/__init__.py +0 -0
  290. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
  291. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
  292. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
  293. {kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_numpy → kevin-toolbox-dev-1.3.6/kevin_toolbox/math/transform}/__init__.py +0 -0
  294. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
  295. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
  296. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
  297. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
  298. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
  299. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
  300. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
  301. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
  302. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
  303. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
  304. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
  305. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
  306. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
  307. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
  308. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
  309. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
  310. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
  311. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
  312. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
  313. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
  314. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
  315. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
  316. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
  317. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
  318. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
  319. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
  320. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
  321. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
  322. {kevin-toolbox-dev-1.2.5/kevin_toolbox/patches/for_torch → kevin-toolbox-dev-1.3.6/kevin_toolbox/patches}/__init__.py +0 -0
  323. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
  324. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
  325. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
  326. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
  327. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
  328. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/pack.py +0 -0
  329. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/unpack.py +0 -0
  330. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_test/__init__.py +0 -0
  331. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
  332. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
  333. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
  334. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
  335. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
  336. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
  337. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
  338. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
  339. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
  340. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
  341. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
  342. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
  343. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
  344. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
  345. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
  346. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
  347. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
  348. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/pyproject.toml +0 -0
  349. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/setup.cfg +0 -0
  350. {kevin-toolbox-dev-1.2.5 → kevin-toolbox-dev-1.3.6}/setup.py +0 -0
@@ -0,0 +1,90 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.3.6
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
+ Provides-Extra: plot
18
+ Provides-Extra: rest
19
+
20
+ # kevin_toolbox
21
+
22
+ 一个通用的工具代码包集合
23
+
24
+
25
+
26
+ 环境要求
27
+
28
+ ```shell
29
+ numpy>=1.19
30
+ pytorch>=1.2
31
+ ```
32
+
33
+ 安装方法:
34
+
35
+ ```shell
36
+ pip install kevin-toolbox --no-dependencies
37
+ ```
38
+
39
+
40
+
41
+ [项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
42
+
43
+ [使用指南 User_Guide](./notes/User_Guide.md)
44
+
45
+ [免责声明 Disclaimer](./notes/Disclaimer.md)
46
+
47
+ [版本更新记录](./notes/Release_Record.md):
48
+
49
+ - v 1.3.6 (2024-07-03)【new feature】
50
+ - patches
51
+ - for_os
52
+ - 【new feature】add find_files_in_dir(),找出目录下带有给定后缀的所有文件的生成器。
53
+ - for_os.path
54
+ - 【new feature】add find_illegal_chars(),找出给定的文件名/路径中出现了哪些非法符号。
55
+ - 【new feature】add replace_illegal_chars(),将给定的文件名/路径中的非法符号替换为合法形式。
56
+ - for_matplotlib
57
+ - 【new feature】add module common_charts,新增模块——常用图表,该模块下包含以下函数:
58
+ - plot_bars(),绘制柱状图
59
+ - plot_scatters(),绘制散点图
60
+ - plot_lines(),绘制折线图
61
+ - plot_distribution(),绘制分布图
62
+ - plot_scatters_matrix(),绘制散点图矩阵(常用于多变量关系分析)
63
+ - plot_confusion_matrix(),绘制混淆矩阵(常用于混淆矩阵、相关性矩阵、特征图可视化)
64
+ - 添加了测试用例。
65
+ - data_flow.file
66
+ - markdown
67
+ - 【new feature】add save_images_in_ndl(),将ndl结构叶节点下的图片对象保存到 plot_dir 中,并替换为该图片的markdown链接。
68
+ - 便于对表格中的图片或者列表中的图片进行保存和替换。
69
+ - 【new feature】add find_tables(),用于从文本中找出markdown格式的表格,并以二维数组的列表形式返回。
70
+ - 【new feature】add parse_table(),将二维数组形式的表格(比如find_tables()的返回列表的元素),解析成指定的格式。
71
+ - kevin_notation
72
+ - 【bug fix】fix bug in Kevin_Notation_Writer,增加检验写入的列的元素数量是否一致,不一致时进行报错。
73
+ - 【bug fix】fix bug in write(),避免对输入参数 metadata 中的内容进行意料之外的改动。
74
+ - nested_dict_list
75
+ - add para b_allow_override to serializer.write to allow overwriting,增加参数用于允许强制覆盖已有文件。
76
+ - computer_science.algorithm
77
+ - pareto_front
78
+ - 【new feature】add Optimum_Picker,帕累托最优值选取器。
79
+ - 记录并更新帕累托最优值
80
+ - 同时支持监控以下行为,并触发设定的执行器,详见参数 trigger_for_new 和 trigger_for_out。
81
+ - 新加值是一个新的帕累托最优值
82
+ - 抛弃一个不再是最优的旧的最优值
83
+ - statistician
84
+ - 【new feature】add Accumulator_for_Ndl,适用于 ndl 结构的统计器。
85
+ - 【bug fix】fix bug in Accumulator_Base._init_var()
86
+ - 【new feature】modify Average_Accumulator,在 add() 中新增了 weight 参数用于计算带权重的平均值
87
+ - modify Exponential_Moving_Average,add_sequence() 不再支持 weight_ls 参数,让该接口与其他类更加一致。
88
+ - 添加了测试用例。
89
+
90
+
@@ -0,0 +1,69 @@
1
+ # kevin_toolbox
2
+
3
+ 一个通用的工具代码包集合
4
+
5
+
6
+
7
+ 环境要求
8
+
9
+ ```shell
10
+ numpy>=1.19
11
+ pytorch>=1.2
12
+ ```
13
+
14
+ 安装方法:
15
+
16
+ ```shell
17
+ pip install kevin-toolbox --no-dependencies
18
+ ```
19
+
20
+
21
+
22
+ [项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
23
+
24
+ [使用指南 User_Guide](./notes/User_Guide.md)
25
+
26
+ [免责声明 Disclaimer](./notes/Disclaimer.md)
27
+
28
+ [版本更新记录](./notes/Release_Record.md):
29
+
30
+ - v 1.3.6 (2024-07-03)【new feature】
31
+ - patches
32
+ - for_os
33
+ - 【new feature】add find_files_in_dir(),找出目录下带有给定后缀的所有文件的生成器。
34
+ - for_os.path
35
+ - 【new feature】add find_illegal_chars(),找出给定的文件名/路径中出现了哪些非法符号。
36
+ - 【new feature】add replace_illegal_chars(),将给定的文件名/路径中的非法符号替换为合法形式。
37
+ - for_matplotlib
38
+ - 【new feature】add module common_charts,新增模块——常用图表,该模块下包含以下函数:
39
+ - plot_bars(),绘制柱状图
40
+ - plot_scatters(),绘制散点图
41
+ - plot_lines(),绘制折线图
42
+ - plot_distribution(),绘制分布图
43
+ - plot_scatters_matrix(),绘制散点图矩阵(常用于多变量关系分析)
44
+ - plot_confusion_matrix(),绘制混淆矩阵(常用于混淆矩阵、相关性矩阵、特征图可视化)
45
+ - 添加了测试用例。
46
+ - data_flow.file
47
+ - markdown
48
+ - 【new feature】add save_images_in_ndl(),将ndl结构叶节点下的图片对象保存到 plot_dir 中,并替换为该图片的markdown链接。
49
+ - 便于对表格中的图片或者列表中的图片进行保存和替换。
50
+ - 【new feature】add find_tables(),用于从文本中找出markdown格式的表格,并以二维数组的列表形式返回。
51
+ - 【new feature】add parse_table(),将二维数组形式的表格(比如find_tables()的返回列表的元素),解析成指定的格式。
52
+ - kevin_notation
53
+ - 【bug fix】fix bug in Kevin_Notation_Writer,增加检验写入的列的元素数量是否一致,不一致时进行报错。
54
+ - 【bug fix】fix bug in write(),避免对输入参数 metadata 中的内容进行意料之外的改动。
55
+ - nested_dict_list
56
+ - add para b_allow_override to serializer.write to allow overwriting,增加参数用于允许强制覆盖已有文件。
57
+ - computer_science.algorithm
58
+ - pareto_front
59
+ - 【new feature】add Optimum_Picker,帕累托最优值选取器。
60
+ - 记录并更新帕累托最优值
61
+ - 同时支持监控以下行为,并触发设定的执行器,详见参数 trigger_for_new 和 trigger_for_out。
62
+ - 新加值是一个新的帕累托最优值
63
+ - 抛弃一个不再是最优的旧的最优值
64
+ - statistician
65
+ - 【new feature】add Accumulator_for_Ndl,适用于 ndl 结构的统计器。
66
+ - 【bug fix】fix bug in Accumulator_Base._init_var()
67
+ - 【new feature】modify Average_Accumulator,在 add() 中新增了 weight 参数用于计算带权重的平均值
68
+ - modify Exponential_Moving_Average,add_sequence() 不再支持 weight_ls 参数,让该接口与其他类更加一致。
69
+ - 添加了测试用例。
@@ -1,4 +1,4 @@
1
- __version__ = "1.2.5"
1
+ __version__ = "1.3.6"
2
2
 
3
3
 
4
4
  import os
@@ -12,5 +12,5 @@ os.system(
12
12
  os.system(
13
13
  f'python {os.path.split(__file__)[0]}/env_info/check_validity_and_uninstall.py '
14
14
  f'--package_name kevin-toolbox-dev '
15
- f'--expiration_timestamp 1707660798 --verbose 0'
15
+ f'--expiration_timestamp 1735563213 --verbose 0'
16
16
  )
@@ -0,0 +1 @@
1
+ from .cache_manager import Cache_Manager
@@ -0,0 +1,2 @@
1
+ from .cache_base import Cache_Base
2
+ from .memo_cache import Memo_Cache
@@ -0,0 +1,89 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class Cache_Base(ABC):
5
+ """
6
+ 缓存结构的基类
7
+
8
+ 要求实现:
9
+ - 读取 _read_freely()
10
+ - 写入 _write_freely()
11
+ - 清除单个条目 _remove_freely()
12
+ - 判断是否命中 has()
13
+ - 获取缓存已占空间 len()
14
+ - 清空所有内容 clear()
15
+ 等方法。
16
+
17
+ 对外提供:
18
+ - 只读取已有条目 read()
19
+ - 只写入不存在条目 write()
20
+ - 只清除已存在的单个条目 remove()
21
+ - 判断是否命中 has()
22
+ - 获取缓存已占空间 len()
23
+ - 清空所有内容 clear()
24
+ 等接口。
25
+ """
26
+
27
+ def read(self, key):
28
+ """只允许读取已存在的条目"""
29
+ if self.has(key=key):
30
+ return self._read_freely(key=key)
31
+ else:
32
+ raise KeyError(f"key {key} not found")
33
+
34
+ def write(self, key, value):
35
+ """只允许写入不已存在的条目"""
36
+ if not self.has(key=key):
37
+ self._write_freely(key=key, value=value)
38
+ else:
39
+ raise KeyError(f"key {key} already exists")
40
+
41
+ def remove(self, key):
42
+ """只允许删除已存在的条目"""
43
+ if self.has(key=key):
44
+ self._remove_freely(key=key)
45
+ else:
46
+ raise KeyError(f"key {key} not found")
47
+
48
+ @abstractmethod
49
+ def _read_freely(self, key):
50
+ return self.read(key=key)
51
+
52
+ @abstractmethod
53
+ def _write_freely(self, key, value):
54
+ pass
55
+
56
+ @abstractmethod
57
+ def _remove_freely(self, key):
58
+ pass
59
+
60
+ @abstractmethod
61
+ def has(self, key) -> bool:
62
+ pass
63
+
64
+ @abstractmethod
65
+ def len(self) -> int:
66
+ pass
67
+
68
+ @abstractmethod
69
+ def clear(self):
70
+ pass
71
+
72
+ def __getitem__(self, key):
73
+ # self[key]
74
+ return self.read(key=key)
75
+
76
+ def __setitem__(self, key, value):
77
+ # self[key] = value
78
+ self.write(key=key, value=value)
79
+
80
+ def __contains__(self, key):
81
+ # if key in self:
82
+ # return True
83
+ # else:
84
+ # return False
85
+ return self.has(key=key)
86
+
87
+ def __len__(self):
88
+ # len(self)
89
+ return self.len()
@@ -0,0 +1,36 @@
1
+ from kevin_toolbox.computer_science.algorithm.cache_manager.cache import Cache_Base
2
+ from kevin_toolbox.computer_science.algorithm.cache_manager.variable import CACHE_BUILDER_REGISTRY
3
+
4
+
5
+ @CACHE_BUILDER_REGISTRY.register()
6
+ class Memo_Cache(Cache_Base):
7
+ """
8
+ 基于内存的缓存结构
9
+ """
10
+ name = ":in_memory:Memo_Cache"
11
+
12
+ def __init__(self, **kwargs):
13
+ self.cache_s = dict()
14
+
15
+ def _read_freely(self, key):
16
+ return self.cache_s[key]
17
+
18
+ def _write_freely(self, key, value):
19
+ self.cache_s[key] = value
20
+
21
+ def _remove_freely(self, key):
22
+ self.cache_s.pop(key)
23
+
24
+ def has(self, key):
25
+ return key in self.cache_s
26
+
27
+ def len(self):
28
+ return len(self.cache_s)
29
+
30
+ def clear(self):
31
+ self.cache_s.clear()
32
+
33
+
34
+ # 添加其他别名
35
+ for name in [":in_memory:Memo", ":in_memory:MC", ":in_memory:memory"]:
36
+ CACHE_BUILDER_REGISTRY.add(obj=Memo_Cache, name=name, b_force=False, b_execute_now=False)
@@ -0,0 +1,218 @@
1
+ import time
2
+ from .strategy import Strategy_Base
3
+ from .cache import Cache_Base
4
+ from .variable import CACHE_STRATEGY_REGISTRY, CACHE_BUILDER_REGISTRY
5
+
6
+
7
+ class Cache_Manager:
8
+ """
9
+ 缓存管理器
10
+
11
+ 提供以下接口:
12
+ - 添加条目 add(key, value, b_allow_overwrite)
13
+ - 获取条目 get(key, b_add_if_not_found, default_factory, default)
14
+ - 删除并返回条目 pop(key)
15
+ - 判断是否有该条目 has()
16
+ - 清空所有内容 clear()
17
+
18
+ 并支持以下用法:
19
+ 通过 len(.) 获取缓存大小,通过 in 操作符判断是否有某个条目
20
+
21
+
22
+ 相关变量:
23
+ self.cache: 缓存
24
+ self.metadata_s:缓存的属性数据
25
+ 包含以下字段,各字段将自动更新
26
+ 例如:{
27
+ <key>: {
28
+ "last_time": xxx, # 最近读取时间
29
+ "initial_time": xxx, # 最初读取时间
30
+ "survival_time": xxx, # survival_time:=last_time-initial_time
31
+ "counts": xxx, # 读取次数
32
+ },
33
+ ...
34
+ }
35
+ self.strategy: 缓存更新策略
36
+ """
37
+
38
+ def __init__(self, **kwargs):
39
+ """
40
+ 参数:
41
+ upper_bound: <int> 当缓存容量超过该值时,触发重整(抛弃部分条目以将容量降低到 refactor_size 指定的大小)
42
+ refactor_size: <int/float> 内存重整后的容量大小
43
+ 当设置为 int 时,表示具体容量的大小;
44
+ 当设置为 float 时表示占 upper_bound 的比例
45
+ 默认为 0.5
46
+ strategy: <str/dict/Strategy_Base> 管理策略
47
+ cache: <str/dict/Cache_Base> 缓存种类
48
+ """
49
+ # 默认参数
50
+ paras = {
51
+ "upper_bound": None,
52
+ "refactor_size": 0.5,
53
+ "strategy": ":by_last_time:LRU",
54
+ "cache": ":in_memory:Memo",
55
+ }
56
+
57
+ # 获取参数
58
+ paras.update(kwargs)
59
+
60
+ # 校验参数
61
+ assert isinstance(paras["upper_bound"], int) and paras["upper_bound"] > 0, \
62
+ "upper_bound must be a positive integer"
63
+ if isinstance(paras["refactor_size"], float):
64
+ paras["refactor_size"] = int(paras["refactor_size"] * paras["upper_bound"])
65
+ assert 0 <= paras["refactor_size"] <= paras["upper_bound"], \
66
+ "refactor_size must be less than upper_bound and bigger than zero"
67
+ # strategy
68
+ assert isinstance(paras["strategy"], (str, dict, Strategy_Base)), \
69
+ "strategy must be a string, dict of paras or a Strategy_Base object"
70
+ if isinstance(paras["strategy"], str):
71
+ strategy = CACHE_STRATEGY_REGISTRY.get(name=paras["strategy"])()
72
+ elif isinstance(paras["strategy"], dict):
73
+ strategy = CACHE_STRATEGY_REGISTRY.get(name=paras["strategy"]["name"])(
74
+ **paras["strategy"].get("paras", dict()))
75
+ else:
76
+ strategy = paras["strategy"]
77
+ # cache
78
+ assert isinstance(paras["cache"], (str, dict, Cache_Base)), \
79
+ "cache must be a string, dict of paras or a Cache_Base object"
80
+ if isinstance(paras["cache"], str):
81
+ cache = CACHE_BUILDER_REGISTRY.get(name=paras["cache"])()
82
+ elif isinstance(paras["cache"], dict):
83
+ cache = CACHE_BUILDER_REGISTRY.get(name=paras["cache"]["name"])(**paras["cache"].get("paras", dict()))
84
+ else:
85
+ cache = paras["cache"]
86
+
87
+ self.paras = paras
88
+ self.strategy = strategy # type:Strategy_Base
89
+ self.cache = cache # type:Cache_Base
90
+ self.metadata_s = dict() # 保存条目的相关信息
91
+
92
+ def add(self, key, value, b_allow_overwrite=True):
93
+ """
94
+ 以 key 为查询键,将 value 添加到缓存中
95
+
96
+ 参数:
97
+ key:
98
+ value:
99
+ b_allow_overwrite: <boolean> 是否允许覆写缓存中已有的条目
100
+ 默认为 True
101
+ """
102
+ # 判断是否需要进行覆写
103
+ if self.cache.has(key=key):
104
+ if id(value) != id(self.cache.read(key=key)):
105
+ if b_allow_overwrite:
106
+ self.__remove_of_cache(key=key)
107
+ else:
108
+ raise KeyError(f'key: {key} already exists, modification of existing entries is prohibited')
109
+ else:
110
+ return
111
+ # 记录到缓存
112
+ self.__write_of_cache(key=key, value=value)
113
+
114
+ def __write_of_cache(self, key, value):
115
+ """
116
+ 向缓存中新增不存在的条目
117
+ """
118
+ temp = time.time()
119
+ metadata = {
120
+ "initial_time": temp, # 最初读取时间(加入缓存的时间)
121
+ "last_time": temp, # 最近读取时间
122
+ "survival_time": 0.0, # 最后一次读取与加入缓存时间之差,last_time - initial_time
123
+ "counts": 0, # 读取次数
124
+ }
125
+ #
126
+ self.cache.write(key=key, value=value)
127
+ self.metadata_s[key] = metadata
128
+ # 通知策略管理器
129
+ self.strategy.notified_by_write_of_cache(key=key, value=value, metadata=metadata)
130
+
131
+ # 判断是否重构
132
+ if len(self.cache) <= self.paras["upper_bound"]:
133
+ return
134
+ # 从策略管理器获取建议
135
+ # 根据建议删除条目
136
+ suggest_keys = self.strategy.suggest(refactor_size=self.paras["refactor_size"])
137
+ assert len(suggest_keys) == len(self.cache) - self.paras["refactor_size"], \
138
+ f'expect {len(self.cache) - self.paras["refactor_size"]} deletion suggestions, but got {len(suggest_keys)}'
139
+ for key in suggest_keys:
140
+ self.__remove_of_cache(key=key)
141
+
142
+ def __remove_of_cache(self, key):
143
+ """
144
+ 从缓存中删除存在的条目
145
+ """
146
+ self.cache.remove(key=key)
147
+ metadata = self.metadata_s.pop(key)
148
+ # 通知策略管理器
149
+ self.strategy.notified_by_remove_of_cache(key=key, metadata=metadata)
150
+
151
+ def get(self, key, b_add_if_not_found=False, default_factory=None, **kwargs):
152
+ """
153
+ 获取 key 对应的值
154
+
155
+ 参数:
156
+ key: <hashable>
157
+ default: 默认值
158
+ 当 key 在缓存中不存在时返回
159
+ default_factory: <callable> 用于产生默认值的函数
160
+ 当 key 在缓存中不存在时返回该函数的结果
161
+ 使用该参数相对于 default 能延迟默认值的产生(如果不需要用到默认值就不生成),提高效率
162
+ 注意!!上面两个参数同时指定时,将以前者为准。
163
+ b_add_if_not_found: <boolean> 当 key 在缓存中不存在时,是否添加到缓存中
164
+ 默认为 False
165
+ """
166
+ if self.cache.has(key=key):
167
+ value = self.__read_of_cache(key=key)
168
+ elif "default" in kwargs or callable(default_factory):
169
+ value = kwargs["default"] if "default" in kwargs else default_factory()
170
+ if b_add_if_not_found:
171
+ self.__write_of_cache(key=key, value=value)
172
+ else:
173
+ raise KeyError(key)
174
+ return value
175
+
176
+ def pop(self, key):
177
+ """
178
+ 从缓存中删除 key 对应的条目,并返回该条目的值
179
+ """
180
+ if self.cache.has(key=key):
181
+ value = self.__read_of_cache(key=key)
182
+ self.__remove_of_cache(key=key)
183
+ else:
184
+ raise KeyError(key)
185
+ return value
186
+
187
+ def __read_of_cache(self, key):
188
+ """
189
+ 读取缓存中 已经存在的 条目
190
+ """
191
+ value = self.cache.read(key=key)
192
+ metadata = self.metadata_s[key]
193
+ # 更新 metadata
194
+ metadata["last_time"] = time.time()
195
+ metadata["survival_time"] = metadata["last_time"] - metadata["initial_time"]
196
+ metadata["counts"] += 1
197
+ # 通知策略管理器
198
+ self.strategy.notified_by_read_of_cache(key=key, value=value, metadata=metadata)
199
+
200
+ return value
201
+
202
+ def has(self, key):
203
+ """
204
+ 判断 key 是否在缓存中
205
+ 注意!!不会更新 metadata
206
+ """
207
+ return self.cache.has(key=key)
208
+
209
+ def clear(self):
210
+ self.cache.clear()
211
+ self.metadata_s.clear()
212
+ self.strategy.notified_by_clear_of_cache()
213
+
214
+ def __len__(self):
215
+ return len(self.cache)
216
+
217
+ def __contains__(self, key):
218
+ return self.has(key)
@@ -0,0 +1,5 @@
1
+ from .strategy_base import Strategy_Base
2
+ from .lru_strategy import LRU_Strategy
3
+ from .lfu_strategy import LFU_Strategy
4
+ from .fifo_strategy import FIFO_Strategy
5
+ from .lst_strategy import LST_Strategy
@@ -0,0 +1,21 @@
1
+ from collections import OrderedDict
2
+ from kevin_toolbox.computer_science.algorithm.cache_manager.strategy import LRU_Strategy
3
+ from kevin_toolbox.computer_science.algorithm.cache_manager.variable import CACHE_STRATEGY_REGISTRY
4
+
5
+
6
+ @CACHE_STRATEGY_REGISTRY.register()
7
+ class FIFO_Strategy(LRU_Strategy):
8
+ """
9
+ 删除最后一次访问时间最久远的部分
10
+ drop items with smaller initial_time
11
+ """
12
+
13
+ name = ":by_initial_time:FIFO_Strategy"
14
+
15
+ def notified_by_read_of_cache(self, key, value, metadata):
16
+ pass
17
+
18
+
19
+ # 添加其他别名
20
+ for name in [":by_initial_time:FIFO", ":by_initial_time:First_In_First_Out", ":by_initial_time:drop_smaller"]:
21
+ CACHE_STRATEGY_REGISTRY.add(obj=FIFO_Strategy, name=name, b_force=False, b_execute_now=False)
@@ -0,0 +1,80 @@
1
+ import heapq
2
+ from kevin_toolbox.computer_science.algorithm.cache_manager.strategy import Strategy_Base
3
+ from kevin_toolbox.computer_science.algorithm.cache_manager.variable import CACHE_STRATEGY_REGISTRY
4
+
5
+
6
+ class Score_to_Key:
7
+ def __init__(self, score, key):
8
+ self.score = score
9
+ self.key = key
10
+
11
+ def __lt__(self, other):
12
+ return self.score < other.score
13
+
14
+ def __eq__(self, other):
15
+ return self.score == other.score
16
+
17
+ def __gt__(self, other):
18
+ return self.score > other.score
19
+
20
+ def __repr__(self):
21
+ return f"Counts_to_Key(key:{self.key}, score:{self.score})"
22
+
23
+
24
+ @CACHE_STRATEGY_REGISTRY.register()
25
+ class LFU_Strategy(Strategy_Base):
26
+ """
27
+ 删除访问频率最低的部分
28
+ drop items with smaller counts
29
+ """
30
+
31
+ name = ":by_counts:LFU_Strategy"
32
+
33
+ def __init__(self):
34
+ self.order_ls = list() # 最小堆
35
+ self.record_s = dict()
36
+
37
+ def notified_by_write_of_cache(self, key, value, metadata):
38
+ assert (metadata is None or metadata["counts"] == 0) and key not in self.record_s
39
+ self.record_s[key] = Score_to_Key(score=0, key=key)
40
+ heapq.heappush(self.order_ls, self.record_s[key])
41
+
42
+ def notified_by_read_of_cache(self, key, value, metadata):
43
+ assert metadata is None or metadata["counts"] == self.record_s[key].score + 1
44
+ self.record_s[key].score += 1
45
+
46
+ def notified_by_remove_of_cache(self, key, metadata):
47
+ temp = self.record_s.pop(key)
48
+ temp.score = -1
49
+ heapq.heapify(self.order_ls)
50
+ temp = heapq.heappop(self.order_ls)
51
+ assert temp.key == key
52
+
53
+ def notified_by_clear_of_cache(self):
54
+ self.record_s.clear()
55
+ self.order_ls.clear()
56
+
57
+ def suggest(self, refactor_size):
58
+ heapq.heapify(self.order_ls)
59
+ res = []
60
+ temp_ls = []
61
+ for _ in range(len(self.order_ls) - refactor_size):
62
+ temp = heapq.heappop(self.order_ls)
63
+ res.append(temp.key)
64
+ temp_ls.append(temp)
65
+ self.order_ls = temp_ls + self.order_ls
66
+ return res
67
+
68
+ def clear(self):
69
+ self.notified_by_clear_of_cache()
70
+
71
+
72
+ # 添加其他别名
73
+ for name in [":by_counts:LFU", ":by_counts:Least_Frequently_Used", ":by_counts:drop_smaller"]:
74
+ CACHE_STRATEGY_REGISTRY.add(obj=LFU_Strategy, name=name, b_force=False, b_execute_now=False)
75
+
76
+ if __name__ == "__main__":
77
+ max_heap = []
78
+ for i, j in [(-5, "a"), (-2, "adafd"), (-7, "ad"), (-1, "a"), (-10, "fasfde")]:
79
+ heapq.heappush(max_heap, Score_to_Key(i, j))
80
+ print(max_heap)
@@ -0,0 +1,43 @@
1
+ from collections import OrderedDict
2
+ from kevin_toolbox.computer_science.algorithm.cache_manager.strategy import Strategy_Base
3
+ from kevin_toolbox.computer_science.algorithm.cache_manager.variable import CACHE_STRATEGY_REGISTRY
4
+
5
+
6
+ @CACHE_STRATEGY_REGISTRY.register()
7
+ class LRU_Strategy(Strategy_Base):
8
+ """
9
+ 删除最后一次访问时间最久远的部分
10
+ drop items with smaller last_time
11
+ """
12
+
13
+ name = ":by_last_time:LRU_Strategy"
14
+
15
+ def __init__(self):
16
+ self.record_s = OrderedDict()
17
+
18
+ def notified_by_write_of_cache(self, key, value, metadata):
19
+ self.record_s[key] = None
20
+
21
+ def notified_by_read_of_cache(self, key, value, metadata):
22
+ self.record_s.pop(key)
23
+ self.record_s[key] = None
24
+
25
+ def notified_by_remove_of_cache(self, key, metadata):
26
+ self.record_s.pop(key)
27
+
28
+ def notified_by_clear_of_cache(self):
29
+ self.record_s.clear()
30
+
31
+ def suggest(self, refactor_size):
32
+ if refactor_size == 0:
33
+ return list(self.record_s.keys())
34
+ else:
35
+ return list(self.record_s.keys())[:-refactor_size]
36
+
37
+ def clear(self):
38
+ self.record_s.clear()
39
+
40
+
41
+ # 添加其他别名
42
+ for name in [":by_last_time:LRU", ":by_last_time:Least_Recently_Used", ":by_last_time:drop_smaller"]:
43
+ CACHE_STRATEGY_REGISTRY.add(obj=LRU_Strategy, name=name, b_force=False, b_execute_now=False)