kevin-toolbox-dev 1.2.8__tar.gz → 1.3.0__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 (278) hide show
  1. kevin-toolbox-dev-1.3.0/PKG-INFO +68 -0
  2. kevin-toolbox-dev-1.3.0/README.md +50 -0
  3. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/__init__.py +2 -2
  4. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/registration/registry.py +35 -11
  5. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/__init__.py +1 -0
  6. kevin-toolbox-dev-1.2.8/kevin_toolbox/nested_dict_list/serializer/variable.py → kevin-toolbox-dev-1.3.0/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -8
  7. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/read.py +2 -1
  8. kevin-toolbox-dev-1.3.0/kevin_toolbox/nested_dict_list/serializer/variable.py +8 -0
  9. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/write.py +2 -1
  10. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/set_value.py +8 -2
  11. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +39 -13
  12. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_os/__init__.py +1 -0
  13. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_os/remove.py +4 -2
  14. kevin-toolbox-dev-1.3.0/kevin_toolbox/patches/for_os/walk.py +167 -0
  15. kevin-toolbox-dev-1.3.0/kevin_toolbox_dev.egg-info/PKG-INFO +68 -0
  16. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox_dev.egg-info/SOURCES.txt +2 -0
  17. kevin-toolbox-dev-1.2.8/PKG-INFO +0 -75
  18. kevin-toolbox-dev-1.2.8/README.md +0 -57
  19. kevin-toolbox-dev-1.2.8/kevin_toolbox_dev.egg-info/PKG-INFO +0 -75
  20. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/__init__.py +0 -0
  21. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
  22. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
  23. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
  24. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
  25. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
  26. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
  27. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
  28. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
  29. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
  30. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
  31. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
  32. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
  33. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
  34. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
  35. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
  36. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
  37. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
  38. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
  39. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
  40. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
  41. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +0 -0
  42. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -0
  43. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
  44. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
  45. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
  46. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
  47. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
  48. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
  49. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
  50. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
  51. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
  52. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +0 -0
  53. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
  54. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
  55. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
  56. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +0 -0
  57. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +0 -0
  58. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
  59. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
  60. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
  61. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/dangerous/__init__.py +0 -0
  62. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
  63. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/__init__.py +0 -0
  64. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/__init__.py +0 -0
  65. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
  66. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
  67. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
  68. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
  69. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
  70. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
  71. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/__init__.py +0 -0
  72. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
  73. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
  74. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
  75. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
  76. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
  77. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/escape_tuple.py +0 -0
  78. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
  79. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
  80. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple.py +0 -0
  81. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
  82. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
  83. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
  84. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
  85. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
  86. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +0 -0
  87. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
  88. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
  89. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
  90. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
  91. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +0 -0
  92. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
  93. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
  94. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
  95. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/markdown/__init__.py +0 -0
  96. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/markdown/generate_link.py +0 -0
  97. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
  98. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/data_flow/file/markdown/generate_table.py +0 -0
  99. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/__init__.py +0 -0
  100. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/decorator/__init__.py +0 -0
  101. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
  102. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
  103. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
  104. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
  105. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
  106. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
  107. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
  108. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
  109. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
  110. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
  111. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
  112. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
  113. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
  114. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
  115. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
  116. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/temperate/__init__.py +0 -0
  117. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
  118. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
  119. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
  120. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
  121. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/developing/test.py +0 -0
  122. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/__init__.py +0 -0
  123. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
  124. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
  125. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/test/__init__.py +0 -0
  126. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/test/test_version.py +0 -0
  127. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/version/__init__.py +0 -0
  128. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/version/compare_version.py +0 -0
  129. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/version/parse_version.py +0 -0
  130. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
  131. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/__init__.py +0 -0
  132. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
  133. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
  134. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
  135. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
  136. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
  137. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
  138. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
  139. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
  140. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
  141. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
  142. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
  143. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
  144. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/__init__.py +0 -0
  145. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
  146. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
  147. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
  148. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
  149. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
  150. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
  151. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
  152. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
  153. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
  154. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
  155. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
  156. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
  157. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
  158. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
  159. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
  160. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
  161. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
  162. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
  163. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
  164. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
  165. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
  166. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
  167. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
  168. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
  169. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
  170. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
  171. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
  172. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
  173. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/__init__.py +0 -0
  174. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/__init__.py +0 -0
  175. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
  176. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
  177. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
  178. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
  179. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
  180. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
  181. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
  182. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
  183. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
  184. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
  185. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
  186. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
  187. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
  188. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
  189. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
  190. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
  191. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
  192. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
  193. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
  194. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
  195. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/__init__.py +0 -0
  196. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/cache.py +0 -0
  197. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
  198. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
  199. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
  200. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
  201. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
  202. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
  203. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
  204. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/transform/__init__.py +0 -0
  205. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
  206. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
  207. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
  208. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
  209. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
  210. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/utils/__init__.py +0 -0
  211. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
  212. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
  213. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
  214. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
  215. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/math/utils/spilt_integer_most_evenly.py +0 -0
  216. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
  217. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
  218. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
  219. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
  220. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
  221. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
  222. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
  223. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
  224. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
  225. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
  226. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
  227. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
  228. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
  229. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
  230. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
  231. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
  232. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
  233. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
  234. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
  235. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
  236. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
  237. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
  238. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +0 -0
  239. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
  240. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
  241. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +0 -0
  242. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
  243. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/__init__.py +0 -0
  244. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
  245. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
  246. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
  247. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
  248. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
  249. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
  250. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
  251. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
  252. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
  253. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
  254. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_os/pack.py +0 -0
  255. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_os/unpack.py +0 -0
  256. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_test/__init__.py +0 -0
  257. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
  258. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
  259. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
  260. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
  261. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
  262. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
  263. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
  264. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
  265. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
  266. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
  267. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
  268. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
  269. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
  270. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
  271. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
  272. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
  273. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
  274. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
  275. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
  276. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/pyproject.toml +0 -0
  277. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/setup.cfg +0 -0
  278. {kevin-toolbox-dev-1.2.8 → kevin-toolbox-dev-1.3.0}/setup.py +0 -0
@@ -0,0 +1,68 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.3.0
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
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3
14
+ Requires-Python: >=3.6
15
+ Description-Content-Type: text/markdown
16
+ Provides-Extra: plot
17
+ Provides-Extra: rest
18
+
19
+ # kevin_toolbox
20
+
21
+ 一个通用的工具代码包集合
22
+
23
+
24
+
25
+ 环境要求
26
+
27
+ ```shell
28
+ numpy>=1.19
29
+ pytorch>=1.2
30
+ ```
31
+
32
+ 安装方法:
33
+
34
+ ```shell
35
+ pip install kevin-toolbox --no-dependencies
36
+ ```
37
+
38
+
39
+
40
+ [项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
41
+
42
+ [使用指南 User_Guide](./notes/User_Guide.md)
43
+
44
+ [免责声明 Disclaimer](./notes/Disclaimer.md)
45
+
46
+ [版本更新记录](./notes/Release_Record.md):
47
+
48
+ - v 1.3.0 (2023-12-13)【bug fix】【new feature】【incompatible change】
49
+ - nested_dict_list
50
+ - serializer
51
+ - 【bug fix】fix bug in read() and write(),解除这两个函数中出现的 nested_dict_list 和 kevin_toolbox.computer_science.algorithm.registration.Registry 模块之间的交叉引用。
52
+ - 【bug fix】fix bug in set_value(),对于使用method=@,但是node不为正整数的name进行强制写入的情况,未修复前表现为错误地尝试使用list进行构建并报错,现修复为使用 dict 进行构建。在新的策略下,对于强制写入,只有 method=@ 且 node 为非负正整数的情况下才会使用 list 进行构建,其他一律用 dict。
53
+ - 添加了对应的测试用例。
54
+ - patches.for_os
55
+ - 【new feature】add walk(),该方法在 os.walk() 的基础上增加了 ignore_s 参数,用于设定规则排除特定的目录和文件。相较于先使用 os.walk() 递归遍历这个目录,再对内容进行逐个过滤筛选的这种方式,本方法在遍历过程中就可以使用规则进行过滤并决定是否要继续深入遍历,更加高效。
56
+ - 补充了对应的测试用例。
57
+ - 【new feature】add Path_Ignorer,该类用于解释 ignore_s 参数,并进行基于规则的判断。
58
+ - 【new feature】modify remove(),支持对软连接的删除。
59
+ - computer_science.algorithm.registration
60
+ - 【new feature】【incompatible change】modify Registry.collect_from_paths(),将原有的通过目录前缀匹配来排除目录的 path_ls_to_exclude 参数,替换成通过规则匹配待排除目录的 ignore_s 参数,更加自由灵活。ignore_s 参数的设定方式与 for_os.walk() 中的 ignore_s 参数相同。
61
+ - 添加了对应的测试用例。
62
+ - patches.for_optuna
63
+ - 【new feature】【incompatible change】modify sample_from_feasible_domain(),进行了以下改变:
64
+ - 允许在 <feasible_domain> 中通过 "p_name" 字段来强制指定该参数在 trial 中的注册名称。
65
+ - 支持通过 f_p_name_builder 和 b_use_name_as_idx 决定如何从 <feasible_domain> 的位置生成参数的注册名称。
66
+ - 删去了 pre_name 参数,如果要实现原 pre_name 的效果,可以等效使用:
67
+ - `f_p_name_builder =lambda idx, p_type: f'{pre_name}{idx}'`
68
+ - 原来返回 var, node_name_ls 改为返回 var, node_vs_paras_s,其中 node_vs_paras_s 是一个`<dict>`,以被采样的节点在 var 中位置的名称作为键,以对应节点在 trial 中注册的参数名为值。
@@ -0,0 +1,50 @@
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.0 (2023-12-13)【bug fix】【new feature】【incompatible change】
31
+ - nested_dict_list
32
+ - serializer
33
+ - 【bug fix】fix bug in read() and write(),解除这两个函数中出现的 nested_dict_list 和 kevin_toolbox.computer_science.algorithm.registration.Registry 模块之间的交叉引用。
34
+ - 【bug fix】fix bug in set_value(),对于使用method=@,但是node不为正整数的name进行强制写入的情况,未修复前表现为错误地尝试使用list进行构建并报错,现修复为使用 dict 进行构建。在新的策略下,对于强制写入,只有 method=@ 且 node 为非负正整数的情况下才会使用 list 进行构建,其他一律用 dict。
35
+ - 添加了对应的测试用例。
36
+ - patches.for_os
37
+ - 【new feature】add walk(),该方法在 os.walk() 的基础上增加了 ignore_s 参数,用于设定规则排除特定的目录和文件。相较于先使用 os.walk() 递归遍历这个目录,再对内容进行逐个过滤筛选的这种方式,本方法在遍历过程中就可以使用规则进行过滤并决定是否要继续深入遍历,更加高效。
38
+ - 补充了对应的测试用例。
39
+ - 【new feature】add Path_Ignorer,该类用于解释 ignore_s 参数,并进行基于规则的判断。
40
+ - 【new feature】modify remove(),支持对软连接的删除。
41
+ - computer_science.algorithm.registration
42
+ - 【new feature】【incompatible change】modify Registry.collect_from_paths(),将原有的通过目录前缀匹配来排除目录的 path_ls_to_exclude 参数,替换成通过规则匹配待排除目录的 ignore_s 参数,更加自由灵活。ignore_s 参数的设定方式与 for_os.walk() 中的 ignore_s 参数相同。
43
+ - 添加了对应的测试用例。
44
+ - patches.for_optuna
45
+ - 【new feature】【incompatible change】modify sample_from_feasible_domain(),进行了以下改变:
46
+ - 允许在 <feasible_domain> 中通过 "p_name" 字段来强制指定该参数在 trial 中的注册名称。
47
+ - 支持通过 f_p_name_builder 和 b_use_name_as_idx 决定如何从 <feasible_domain> 的位置生成参数的注册名称。
48
+ - 删去了 pre_name 参数,如果要实现原 pre_name 的效果,可以等效使用:
49
+ - `f_p_name_builder =lambda idx, p_type: f'{pre_name}{idx}'`
50
+ - 原来返回 var, node_name_ls 改为返回 var, node_vs_paras_s,其中 node_vs_paras_s 是一个`<dict>`,以被采样的节点在 var 中位置的名称作为键,以对应节点在 trial 中注册的参数名为值。
@@ -1,4 +1,4 @@
1
- __version__ = "1.2.8"
1
+ __version__ = "1.3.0"
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 1715414856 --verbose 0'
15
+ f'--expiration_timestamp 1718018144 --verbose 0'
16
16
  )
@@ -4,6 +4,8 @@ import inspect
4
4
  import pkgutil
5
5
  import weakref
6
6
  import kevin_toolbox.nested_dict_list as ndl
7
+ from kevin_toolbox.patches import for_os
8
+ from kevin_toolbox.patches.for_os import Path_Ignorer, Ignore_Scope
7
9
 
8
10
 
9
11
  class Registry:
@@ -218,14 +220,22 @@ class Registry:
218
220
 
219
221
  # -------------------- 通过路径添加 --------------------- #
220
222
 
221
- def collect_from_paths(self, path_ls=None, path_ls_to_exclude=None, b_execute_now=False):
223
+ def collect_from_paths(self, path_ls=None, ignore_s=None, b_execute_now=False):
222
224
  """
223
225
  遍历 path_ls 下的所有模块,并自动导入其中主要被注册的部分
224
226
  比如被 register() 装饰器包裹或者通过 add() 添加的部分
225
227
 
226
228
  参数:
227
229
  path_ls: <list of paths> 需要搜索的目录
228
- path_ls_to_exclude: <list of paths> 需要排除的目录
230
+ ignore_s: <list/tuple of dict> 在搜索遍历目录时候要执行的排除规则
231
+ 具体设置方式参考 patches.for_os.walk() 中的 ignore_s 参数。
232
+ 比如使用下面的规则就可以排除待搜索目录下的所有 temp/ 和 test/ 文件夹:
233
+ [
234
+ {
235
+ "func": lambda _, __, path: os.path.basename(path) in ["temp", "test"],
236
+ "scope": ["root", "dirs"]
237
+ },
238
+ ]
229
239
  b_execute_now: <boolean> 现在就执行导入
230
240
  默认为 False,将等到第一次执行 get() 函数时才会真正尝试导入
231
241
 
@@ -243,10 +253,13 @@ class Registry:
243
253
  f'calling Registry.collect_from_paths() in __init__.py is forbidden, file: {caller_frame.filename}.\n' \
244
254
  f'you can call it in other files, and then import the result of the call in __init__.py'
245
255
 
256
+ # 根据 ignore_s 构建 Path_Ignorer
257
+ path_ignorer = ignore_s if isinstance(ignore_s, (Path_Ignorer,)) else Path_Ignorer(ignore_s=ignore_s)
258
+
246
259
  #
247
260
  if not b_execute_now:
248
261
  self._path_to_collect.append(
249
- dict(path_ls=path_ls, path_ls_to_exclude=path_ls_to_exclude, b_execute_now=True))
262
+ dict(path_ls=path_ls, ignore_s=path_ignorer, b_execute_now=True))
250
263
  return
251
264
 
252
265
  #
@@ -254,27 +267,38 @@ class Registry:
254
267
  temp = []
255
268
  for path in filter(lambda x: os.path.isdir(x), path_ls):
256
269
  temp.append(path)
257
- for root, dirs, _ in os.walk(path, topdown=False):
270
+ for root, dirs, _ in for_os.walk(path, topdown=False, ignore_s=path_ignorer, followlinks=True):
258
271
  temp.extend([os.path.join(root, i) for i in dirs])
259
- if path_ls_to_exclude is not None:
260
- for path_ex in path_ls_to_exclude:
261
- if not os.path.exists(path_ex):
262
- continue
263
- for i in reversed(range(len(temp))):
264
- if os.path.samefile(os.path.commonpath([path_ex, temp[i]]), path_ex):
265
- temp.pop(i)
266
272
  # 从深到浅导入,可以避免继承引起的 TypeError: super(type, obj) 类型错误
267
273
  path_ls = list(set(temp))
268
274
  path_ls.sort(reverse=True)
275
+ path_set = set(path_ls)
269
276
 
270
277
  temp = None
271
278
  for loader, module_name, is_pkg in pkgutil.walk_packages(path_ls):
279
+ # 判断该模块是否需要导入
280
+ # (快速判断)判断该模块所在目录是否在 path_set 中
281
+ if loader.path not in path_set:
282
+ continue
283
+ if is_pkg:
284
+ # 若不是 package,判断是否满足 Path_Ignorer 中的 dirs 对应的规则
285
+ path = os.path.dirname(loader.find_module(module_name).path)
286
+ if path_ignorer(Ignore_Scope.DIRS, True, os.path.islink(path), path):
287
+ continue
288
+ else:
289
+ # 若该模块是 package,判断该模块的文件路径是否满足 Path_Ignorer 中的 files 对应的规则
290
+ path = loader.find_module(module_name).path
291
+ if path_ignorer(Ignore_Scope.FILES, False, os.path.islink(path), path):
292
+ continue
293
+ # 加载模块
272
294
  module = loader.find_module(module_name).load_module(module_name)
295
+ # 选择遍历过程中第一次找到的 Registry 实例
273
296
  if temp is None:
274
297
  for name, obj in inspect.getmembers(module):
275
298
  if getattr(obj, "name", None) == Registry.name and getattr(obj, "uid", None) == self.uid:
276
299
  temp = obj
277
300
  break
301
+
278
302
  if temp is not None:
279
303
  self.database = temp.database
280
304
 
@@ -1,2 +1,3 @@
1
1
  from .write import write
2
2
  from .read import read
3
+ from .enum_variable import Strictness_Level
@@ -1,12 +1,4 @@
1
- import os
2
1
  from enum import Enum
3
- from kevin_toolbox.computer_science.algorithm.registration import Registry
4
-
5
- SERIALIZER_BACKEND = Registry(uid="SERIALIZER_BACKEND")
6
-
7
- # 从 kevin_toolbox/nested_dict_list/serializer/backends 下收集被注册的 backend
8
- SERIALIZER_BACKEND.collect_from_paths(path_ls=[os.path.join(os.path.dirname(__file__), "backends"), ],
9
- b_execute_now=False)
10
2
 
11
3
 
12
4
  class Strictness_Level(Enum):
@@ -3,7 +3,6 @@ import time
3
3
  from kevin_toolbox.patches import for_os
4
4
  from kevin_toolbox.data_flow.file import json_
5
5
  import kevin_toolbox.nested_dict_list as ndl
6
- from kevin_toolbox.nested_dict_list.serializer.variable import SERIALIZER_BACKEND
7
6
 
8
7
 
9
8
  def read(input_path, **kwargs):
@@ -13,6 +12,8 @@ def read(input_path, **kwargs):
13
12
  参数:
14
13
  input_path: <path> 文件夹或者 .tar 文件,具体结构参考 write()
15
14
  """
15
+ from kevin_toolbox.nested_dict_list.serializer.variable import SERIALIZER_BACKEND
16
+
16
17
  assert os.path.exists(input_path)
17
18
 
18
19
  # 解压
@@ -0,0 +1,8 @@
1
+ import os
2
+ from kevin_toolbox.computer_science.algorithm.registration import Registry
3
+
4
+ SERIALIZER_BACKEND = Registry(uid="SERIALIZER_BACKEND")
5
+
6
+ # 从 kevin_toolbox/nested_dict_list/serializer/backends 下收集被注册的 backend
7
+ SERIALIZER_BACKEND.collect_from_paths(path_ls=[os.path.join(os.path.dirname(__file__), "backends"), ],
8
+ b_execute_now=False)
@@ -6,7 +6,7 @@ from kevin_toolbox.data_flow.file import json_
6
6
  from kevin_toolbox.patches import for_os
7
7
  import kevin_toolbox.nested_dict_list as ndl
8
8
  from kevin_toolbox.nested_dict_list.traverse import Traversal_Mode
9
- from kevin_toolbox.nested_dict_list.serializer.variable import SERIALIZER_BACKEND, Strictness_Level
9
+ from .enum_variable import Strictness_Level
10
10
 
11
11
 
12
12
  def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_pack_into_tar=True,
@@ -83,6 +83,7 @@ def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_p
83
83
  的 backend 之后仍然无法写入
84
84
  默认是 "normal"
85
85
  """
86
+ from kevin_toolbox.nested_dict_list.serializer.variable import SERIALIZER_BACKEND
86
87
 
87
88
  #
88
89
  traversal_mode = Traversal_Mode(traversal_mode)
@@ -52,11 +52,17 @@ def set_value(var, name, value, b_force=False):
52
52
  raise ValueError(f'The location pointed to by name {name} does not exist in var')
53
53
  else:
54
54
  if method_ls[-1] in "|:":
55
+ # 对于字符串默认使用 dict 构建
55
56
  value = {raw_key: value}
56
57
  else:
58
+ # 对于需要eval的情况
57
59
  key = eval(raw_key)
58
- assert isinstance(key, (int,)) and key >= 0
59
- value = [None] * key + [value]
60
+ if isinstance(key, (int,)) and key >= 0:
61
+ # 只有当 key 为非负整数时,才会使用 list 构建
62
+ value = [None] * key + [value]
63
+ else:
64
+ # 其他,比如当 key 为元组、浮点数等等时,则使用 dict 构建
65
+ value = {key: value}
60
66
  var = set_value(var=var, name=name[:-1 - len(node_ls[-1])], value=value, b_force=b_force)
61
67
 
62
68
  return var
@@ -2,14 +2,14 @@ import optuna
2
2
  import kevin_toolbox.nested_dict_list as ndl
3
3
 
4
4
 
5
- def sample_from_feasible_domain(var, trial: optuna.trial.BaseTrial, pre_name=""):
5
+ def sample_from_feasible_domain(var, trial: optuna.trial.BaseTrial, f_p_name_builder=None, b_use_name_as_idx=True):
6
6
  """
7
7
  使用试验 trial 基于输入中的定义域 feasible_domain 部分进行参数采样和替换。
8
8
  遍历输入中的所有元素,找出符合 <feasible_domain> 格式要求的记录了参数定义域的元素,
9
9
  然后使用输入的试验实例 trial 结合参数定义域采样出对应的参数,最后用采样出来的参数替换掉原来的定义域。
10
10
 
11
11
  参数:
12
- inputs: <list/dict> 当其中的元素满足 <feasible_domain> 格式要求,将进行采样与替换。
12
+ var: <list/dict> 当其中的元素满足 <feasible_domain> 格式要求,将进行采样与替换。
13
13
  <feasible_domain> 格式要求:
14
14
  1. 是一个 dictionary
15
15
  2. 包含 "p_type" 字段
@@ -20,15 +20,26 @@ def sample_from_feasible_domain(var, trial: optuna.trial.BaseTrial, pre_name="")
20
20
  更多参见 https://optuna.readthedocs.io/zh_CN/latest/reference/generated/optuna.trial.Trial.html#optuna.trial.Trial
21
21
  中的 suggest_xxx() 函数。
22
22
  trial: <optuna.trial.BaseTrial> 试验
23
- pre_name: <string> 采样出的参数在试验 trial 中注册的名称的前缀
23
+ f_p_name_builder: <callable> 对于采样出的参数,使用该函数构建其在试验 trial 中注册的名称。
24
+ 函数类型为 def(idx, p_type): ...
25
+ 其中:
26
+ idx 被采样的节点在 var 中的位置
27
+ 当 b_use_name_as_idx=False 时,
28
+ 对于列表是 index,对于字典是 key
29
+ 当为 True 时,传入的是元素在整体结构中的 name 位置,name的格式和含义参考
30
+ name_handler.parse_name() 中的介绍
31
+ p_type 被采样的节点中的 "p_type" 字段
32
+ 默认为:
33
+ lambda idx, p_type: idx
34
+ b_use_name_as_idx: <boolean> 决定传入 f_p_name_builder 中的参数 idx 的形式。
24
35
 
25
36
  返回:
26
- var, name_ls
37
+ var, node_vs_paras_s
27
38
  var 是采样后的结果
28
- name_ls 是被采样的节点名称,注意并不带 pre_name 前缀
39
+ node_vs_paras_s 是一个<dict>,以被采样的节点在 var 中位置的名称作为键,以对应节点在 trial 中注册的参数名为值。
29
40
 
30
41
  实例:
31
- 对于输入 inputs={
42
+ 对于输入 var={
32
43
  "thr":[
33
44
  "interval_thr": {
34
45
  "p_type": "categorical",
@@ -56,19 +67,33 @@ def sample_from_feasible_domain(var, trial: optuna.trial.BaseTrial, pre_name="")
56
67
  ]
57
68
  }
58
69
  可能返回的采样结果是 res={"thr":[{"interval_thr":1000}, {"iou_thr":0.6}, {"connection":lambda x:x} ], }。
59
- pre_name="my" 时,这些参数在 trial 中注册的名称分别是 "my:thr@0:interval_thr","my:thr@1:iou_thr" 和 "my:thr@1:connection"。
70
+ f_p_name_builder=lambda idx, p_type: f'my{idx}' 时,
71
+ 这些参数在 trial 中注册的名称分别是 "my:thr@0:interval_thr","my:thr@1:iou_thr" 和 "my:thr@1:connection"。
60
72
  特别地,
61
73
  - 对于字典形式的 choices,其中保存在 trial 中的取值是其键 key 而非 value。
62
74
  - 对于list形式,但含有非支持类型的 choices,其中保存在 trial 中的取值是元素的 index。
63
75
  这些名称的含义详见 get_value()。
64
76
  """
77
+ if f_p_name_builder is None:
78
+ f_p_name_builder = lambda idx, p_type: idx
79
+ if not b_use_name_as_idx:
80
+ p_name_builder = lambda idx, p_type: f_p_name_builder(ndl.name_handler.parse_name(idx)[-1][-1], p_type)
81
+ else:
82
+ p_name_builder = f_p_name_builder
65
83
 
66
- name_ls=[]
84
+ node_vs_paras_s = dict()
85
+ p_name_set = set()
67
86
 
68
87
  def func(idx, v):
69
- nonlocal name_ls
88
+ nonlocal node_vs_paras_s, p_name_builder
89
+
70
90
  p_type = v.pop("p_type")
91
+ p_name = v.pop("p_name") if "p_name" in v else f'{p_name_builder(idx, p_type)}'
92
+ assert p_name not in p_name_set, \
93
+ f"p_name={p_name} is duplicated!"
94
+ p_name_set.add(p_name)
71
95
  kwargs = v
96
+ #
72
97
  choice_values = None
73
98
  if p_type == "categorical":
74
99
  # optuna 目前的类别元素仅支持 None, bool, int, float 和 str 类型
@@ -83,14 +108,15 @@ def sample_from_feasible_domain(var, trial: optuna.trial.BaseTrial, pre_name="")
83
108
  choice_values = kwargs["choices"]
84
109
  kwargs["choices"] = list(kwargs["choices"].keys())
85
110
 
86
- v = eval(f'trial.suggest_{p_type}(name=name, **kwargs)',
87
- {"trial": trial, "name": f'{pre_name}{idx}', "kwargs": kwargs})
111
+ v = eval(f'trial.suggest_{p_type}(name=name, **kwargs)', {"trial": trial, "name": p_name, "kwargs": kwargs})
88
112
  if choice_values is not None:
89
113
  v = choice_values[v]
90
- name_ls.append(idx)
114
+
115
+ #
116
+ node_vs_paras_s[idx] = p_name
91
117
  return v
92
118
 
93
119
  var = ndl.traverse(var=var, match_cond=lambda _, __, v: isinstance(v, (dict,)) and "p_type" in v,
94
120
  action_mode="replace", converter=func, b_use_name_as_idx=True)
95
121
 
96
- return var, name_ls
122
+ return var, node_vs_paras_s
@@ -1,3 +1,4 @@
1
1
  from .remove import remove
2
2
  from .pack import pack
3
3
  from .unpack import unpack
4
+ from .walk import walk, Path_Ignorer, Ignore_Scope
@@ -4,13 +4,15 @@ import shutil
4
4
 
5
5
  def remove(path, ignore_errors=False):
6
6
  """
7
- 移除文件/文件夹
7
+ 移除文件/文件夹/软连接
8
8
 
9
9
  返回:
10
10
  boolean 是否成功
11
11
  """
12
12
  try:
13
- if os.path.isfile(path): # 移除文件
13
+ if os.path.islink(path): # 移除软连接
14
+ os.unlink(path)
15
+ elif os.path.isfile(path): # 移除文件
14
16
  os.remove(path)
15
17
  elif os.path.isdir(path): # 移除文件夹
16
18
  shutil.rmtree(path=path, ignore_errors=False)
@@ -0,0 +1,167 @@
1
+ import os
2
+ from collections import defaultdict
3
+ from enum import Enum
4
+
5
+
6
+ class Ignore_Scope(Enum):
7
+ ROOT = "root"
8
+ DIRS = "dirs"
9
+ FILES = "files"
10
+
11
+
12
+ class Path_Ignorer:
13
+ def __init__(self, ignore_s=None):
14
+ self.ignore_s = defaultdict(list)
15
+ try:
16
+ if isinstance(ignore_s, (list, tuple)):
17
+ for it in ignore_s:
18
+ for scope in it["scope"]:
19
+ scope = Ignore_Scope(scope)
20
+ self.ignore_s[scope].append(it["func"])
21
+ elif isinstance(ignore_s, (dict,)):
22
+ for k, v in ignore_s.items():
23
+ self.ignore_s[Ignore_Scope(k)].extend(v)
24
+ except:
25
+ raise ValueError(f'invalid ignore_s, got a {ignore_s}')
26
+
27
+ def __call__(self, scope, *args, **kwargs):
28
+ for func in self.ignore_s[scope]:
29
+ if func(*args, **kwargs):
30
+ return True
31
+ return False
32
+
33
+ def __len__(self):
34
+ return len(self.ignore_s)
35
+
36
+
37
+ def walk(top, topdown=True, onerror=None, followlinks=False, ignore_s=None):
38
+ """
39
+ 在 os.walk() 的基础上增加了以下功能
40
+ - 可以通过 ignore_s 参数来排除特定的目录和文件
41
+
42
+ 参数:
43
+ (对于参数 top,topdown,onerror,followlinks,其用法与 os.walk() 完全相同)
44
+ top: <path> 要遍历的目录
45
+ topdown: <boolean> 是否从浅到深遍历
46
+ 默认为 True,优先遍历完浅层目录
47
+ onerror: <callable> 当遇到异常时,会调用该函数
48
+ followlinks: <boolean> 是否遍历软链接目录
49
+ 默认为 False,不对软链接进行进一步遍历
50
+ ignore_s: <list/tuple of dict or dict> 排除规则
51
+ 有两种输入方式:
52
+
53
+ 方式 1 <list/tuple of dict>:
54
+ 列表中每个字典需要具有以下键值对:
55
+ "scope": <list/tuple of str> 该规则的作用范围
56
+ 可选值,及(满足规则时)对应效果:
57
+ "root": 不遍历满足规则的目录
58
+ "dirs": 将返回的三元组中第二个 dirs 部分中满足规则的部分移除
59
+ "files": 将返回的三元组中第三个 files 部分中满足规则的部分移除
60
+ "func": <callable> 排除规则
61
+ 当调用该函数的返回值为 True 时,执行排除。
62
+ 函数类型为 def(b_is_dir, b_is_symlink, path): ...
63
+ 其中:
64
+ b_is_dir 是否是目录
65
+ b_is_symlink 是否是软链接
66
+ path 输入是对于作用范围 "root",输入的直接就是 root,
67
+ 对于作用范围 "dirs",输入是 dirs 中的每个元素和 root 组成的绝对路径,
68
+ 对于作用范围 "files",输入是 files 中的每个元素和 root 组成的绝对路径。
69
+ 注意:
70
+ - 当有多个规则时,只要满足其一即会进行排除。
71
+ - 任何规则都不会对 top 目录进行过滤,亦即对 top 的遍历是必然的。不能通过设定某个 top 满足的规则来停止对 top 的遍历。
72
+ 比如,通过下面的规则就可以实现不对 basename 为 "test" 和 "temp" 的目录进行遍历和输出,
73
+ 同时只保留非软连接的 .png 和 .jpg 文件:
74
+ [
75
+ {
76
+ "func": lambda _, __, path: os.path.basename(path) in ["temp", "test"],
77
+ "scope": ["root", "dirs"]
78
+ },
79
+ {
80
+ "func": lambda _, b_is_symlink, path: b_is_symlink or not path.endswith((".png",".jpg")),
81
+ "scope": ["files", ]
82
+ }
83
+ ]
84
+
85
+ 方式 2 <dict>:
86
+ 一个以 scope 为键,func 为值的字典。
87
+ 延续上面的例子,其另一种等效形式为:
88
+ {
89
+ "root": [
90
+ lambda _, __, path: os.path.basename(path) in ["temp", "test"],
91
+ ],
92
+ "dirs": [
93
+ lambda _, __, path: os.path.basename(path) in ["temp", "test"],
94
+ ],
95
+ "files": [
96
+ lambda _, b_is_symlink, path: b_is_symlink or not path.endswith((".png",".jpg")),
97
+ ]
98
+ }
99
+
100
+ 方式 3 <Path_Ignorer>:
101
+ 根据 ignore_s 构建的 Path_Ignorer
102
+
103
+ """
104
+ # 根据 ignore_s 构建 Path_Ignorer
105
+ path_ignorer = ignore_s if isinstance(ignore_s, (Path_Ignorer,)) else Path_Ignorer(ignore_s=ignore_s)
106
+
107
+ #
108
+ yield from __walk(top, topdown, onerror, followlinks, path_ignorer)
109
+
110
+
111
+ def __walk(top, topdown, onerror, followlinks, path_ignorer):
112
+ #
113
+ top = os.fspath(top)
114
+ dirs, files = [], []
115
+ walk_dirs = []
116
+
117
+ try:
118
+ scandir_it = os.scandir(top)
119
+ except OSError as error:
120
+ if onerror is not None:
121
+ onerror(error)
122
+ return
123
+
124
+ with scandir_it:
125
+ while True:
126
+ try:
127
+ try:
128
+ entry = next(scandir_it)
129
+ except StopIteration:
130
+ break
131
+ except OSError as error:
132
+ if onerror is not None:
133
+ onerror(error)
134
+ return
135
+
136
+ try:
137
+ is_dir = entry.is_dir()
138
+ except OSError:
139
+ is_dir = False
140
+
141
+ if is_dir:
142
+ dirs.append(entry.name)
143
+ walk_dirs.append(os.path.join(top, entry.name))
144
+ else:
145
+ files.append(entry.name)
146
+
147
+ # 过滤
148
+ if len(path_ignorer) > 0:
149
+ for it_ls, scope in zip([walk_dirs, dirs, files], [Ignore_Scope.ROOT, Ignore_Scope.DIRS, Ignore_Scope.FILES]):
150
+ for i in reversed(range(len(it_ls))):
151
+ path = os.path.join(top, it_ls[i]) if scope != Ignore_Scope.ROOT else it_ls[i]
152
+ if path_ignorer(scope, scope != Ignore_Scope.FILES, os.path.islink(path), path):
153
+ it_ls.pop(i)
154
+
155
+ #
156
+ if topdown:
157
+ yield top, dirs, files
158
+ #
159
+ for new_path in walk_dirs:
160
+ if followlinks or not os.path.islink(new_path):
161
+ yield from __walk(new_path, topdown, onerror, followlinks, path_ignorer)
162
+ else:
163
+ for new_path in walk_dirs:
164
+ if followlinks or not os.path.islink(new_path):
165
+ yield from __walk(new_path, topdown, onerror, followlinks, path_ignorer)
166
+ #
167
+ yield top, dirs, files