kevin-toolbox-dev 1.3.3__tar.gz → 1.3.4__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 (319) hide show
  1. kevin-toolbox-dev-1.3.4/PKG-INFO +62 -0
  2. kevin-toolbox-dev-1.3.4/README.md +41 -0
  3. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/__init__.py +2 -2
  4. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/__init__.py +1 -0
  5. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/read.py +11 -4
  6. kevin-toolbox-dev-1.3.4/kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py +31 -0
  7. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/write.py +51 -26
  8. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +1 -0
  9. kevin-toolbox-dev-1.3.4/kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py +127 -0
  10. kevin-toolbox-dev-1.3.4/kevin_toolbox_dev.egg-info/PKG-INFO +62 -0
  11. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox_dev.egg-info/SOURCES.txt +2 -0
  12. kevin-toolbox-dev-1.3.3/PKG-INFO +0 -70
  13. kevin-toolbox-dev-1.3.3/README.md +0 -49
  14. kevin-toolbox-dev-1.3.3/kevin_toolbox_dev.egg-info/PKG-INFO +0 -70
  15. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/__init__.py +0 -0
  16. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
  17. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +0 -0
  18. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +0 -0
  19. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/cache_base.py +0 -0
  20. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/memo_cache.py +0 -0
  21. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +0 -0
  22. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +0 -0
  23. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/fifo_strategy.py +0 -0
  24. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lfu_strategy.py +0 -0
  25. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lru_strategy.py +0 -0
  26. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lst_strategy.py +0 -0
  27. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/strategy_base.py +0 -0
  28. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/test/__init__.py +0 -0
  29. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_builder.py +0 -0
  30. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_manager.py +0 -0
  31. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_strategy.py +0 -0
  32. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +0 -0
  33. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
  34. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
  35. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
  36. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
  37. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
  38. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
  39. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
  40. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
  41. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
  42. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
  43. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
  44. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
  45. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
  46. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
  47. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
  48. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
  49. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
  50. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
  51. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
  52. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +0 -0
  53. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -0
  54. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
  55. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
  56. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
  57. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
  58. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
  59. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
  60. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
  61. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
  62. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
  63. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
  64. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +0 -0
  65. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
  66. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
  67. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
  68. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +0 -0
  69. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +0 -0
  70. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
  71. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
  72. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
  73. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/dangerous/__init__.py +0 -0
  74. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
  75. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/__init__.py +0 -0
  76. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/__init__.py +0 -0
  77. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
  78. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
  79. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/cache/test/__init__.py +0 -0
  80. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/cache/test/test_cache_manager_for_iterator.py +0 -0
  81. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
  82. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
  83. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
  84. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
  85. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/__init__.py +0 -0
  86. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
  87. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
  88. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
  89. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
  90. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
  91. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/escape_tuple_and_set.py +0 -0
  92. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
  93. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
  94. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py +0 -0
  95. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
  96. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
  97. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
  98. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
  99. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
  100. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +0 -0
  101. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
  102. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
  103. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
  104. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
  105. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +0 -0
  106. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
  107. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
  108. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
  109. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/markdown/__init__.py +0 -0
  110. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/markdown/generate_link.py +0 -0
  111. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
  112. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/data_flow/file/markdown/generate_table.py +0 -0
  113. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/__init__.py +0 -0
  114. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/decorator/__init__.py +0 -0
  115. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
  116. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
  117. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
  118. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
  119. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
  120. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
  121. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
  122. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
  123. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
  124. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
  125. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
  126. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
  127. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
  128. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
  129. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
  130. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/temperate/__init__.py +0 -0
  131. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
  132. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
  133. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
  134. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
  135. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/developing/test.py +0 -0
  136. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/__init__.py +0 -0
  137. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
  138. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
  139. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/test/__init__.py +0 -0
  140. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/test/test_version.py +0 -0
  141. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/version/__init__.py +0 -0
  142. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/version/compare_version.py +0 -0
  143. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/version/parse_version.py +0 -0
  144. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
  145. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/__init__.py +0 -0
  146. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
  147. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
  148. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
  149. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
  150. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
  151. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
  152. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
  153. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
  154. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
  155. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
  156. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
  157. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
  158. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/__init__.py +0 -0
  159. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
  160. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
  161. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
  162. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
  163. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
  164. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
  165. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
  166. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
  167. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
  168. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
  169. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
  170. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
  171. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
  172. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
  173. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
  174. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
  175. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
  176. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
  177. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
  178. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
  179. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
  180. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
  181. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
  182. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
  183. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
  184. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
  185. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
  186. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
  187. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/__init__.py +0 -0
  188. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/__init__.py +0 -0
  189. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
  190. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
  191. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
  192. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
  193. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
  194. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
  195. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
  196. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
  197. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
  198. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
  199. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
  200. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
  201. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
  202. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
  203. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
  204. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
  205. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
  206. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
  207. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
  208. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
  209. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/__init__.py +0 -0
  210. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/cache.py +0 -0
  211. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
  212. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
  213. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
  214. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
  215. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
  216. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
  217. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
  218. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/transform/__init__.py +0 -0
  219. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
  220. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
  221. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
  222. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
  223. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
  224. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/utils/__init__.py +0 -0
  225. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
  226. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
  227. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
  228. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
  229. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/math/utils/split_integer_most_evenly.py +0 -0
  230. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
  231. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
  232. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
  233. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
  234. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
  235. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
  236. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
  237. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
  238. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
  239. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
  240. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
  241. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
  242. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
  243. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
  244. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
  245. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
  246. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
  247. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
  248. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
  249. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
  250. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
  251. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -0
  252. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/serializer/variable.py +0 -0
  253. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/set_default.py +0 -0
  254. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/set_value.py +0 -0
  255. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
  256. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
  257. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
  258. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +0 -0
  259. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
  260. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/__init__.py +0 -0
  261. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_logging/__init__.py +0 -0
  262. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_logging/build_logger.py +0 -0
  263. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
  264. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
  265. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
  266. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
  267. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_matplotlib/generate_color_list.py +0 -0
  268. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
  269. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
  270. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
  271. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/linalg/entropy.py +0 -0
  272. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
  273. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
  274. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/random/__init__.py +0 -0
  275. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/random/get_rng.py +0 -0
  276. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +0 -0
  277. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +0 -0
  278. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_numpy/random/variable.py +0 -0
  279. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
  280. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/build_sampler.py +0 -0
  281. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/build_storage.py +0 -0
  282. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/build_study.py +0 -0
  283. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/copy_study.py +0 -0
  284. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
  285. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/__init__.py +0 -0
  286. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +0 -0
  287. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +0 -0
  288. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +0 -0
  289. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +0 -0
  290. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +0 -0
  291. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +0 -0
  292. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_os/__init__.py +0 -0
  293. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_os/pack.py +0 -0
  294. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_os/remove.py +0 -0
  295. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_os/unpack.py +0 -0
  296. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_os/walk.py +0 -0
  297. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_test/__init__.py +0 -0
  298. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
  299. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
  300. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
  301. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
  302. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
  303. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
  304. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
  305. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
  306. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
  307. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
  308. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
  309. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
  310. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
  311. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
  312. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
  313. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
  314. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
  315. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
  316. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
  317. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/pyproject.toml +0 -0
  318. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/setup.cfg +0 -0
  319. {kevin-toolbox-dev-1.3.3 → kevin-toolbox-dev-1.3.4}/setup.py +0 -0
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.3.4
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.4 (2024-04-06)【bug fix】【new feature】
50
+ - nested_dict_list
51
+ - 【new feature】add replace_identical_with_reference() to value_parser,新增该函数用于将具有相同 id 的多个节点,替换为单个节点和其多个引用的形式。一般用于去除冗余部分,压缩 ndl 的结构。
52
+ - 【bug fix】【new feature】fix bug in write(),添加了 saved_node_name_format 参数控制 nodes 下文件名的生成。
53
+ - bug:在 v1.3.3 前直接使用原始的 node_name 来作为 nodes/ 目录下的文件名,这导致当 node_name 中带有特殊字符时,比如 "/"(在linux下) 和 ":"(在windows下),将会导致保存失败。
54
+ - fix:使用 saved_node_name_format 指定生成文件名的方式,默认方式 '{count}_{hash_name}' 可以避免出现特殊字符。
55
+ - 【bug fix】fix bug in write()
56
+ - bug:在 v1.3.3 前 processed_s 通过 ndl.set_value() 来逐个节点构建,但是由于根据节点名创建的结果可能和原结构存在差异(详见 ndl.set_value() 中b_force参数的介绍),因此导致 processed_s 和 var 结构不一致,导致出错。
57
+ - fix:使用 ndl.copy_() 来创建结构与 var 一致的 processed_s。
58
+ - 【new feature】add b_keep_identical_relations to write(),增加该参数用于决定是否保留不同节点之间的 id 相等关系。
59
+ - 添加了对应的测试用例。
60
+
61
+
62
+
@@ -0,0 +1,41 @@
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.4 (2024-04-06)【bug fix】【new feature】
31
+ - nested_dict_list
32
+ - 【new feature】add replace_identical_with_reference() to value_parser,新增该函数用于将具有相同 id 的多个节点,替换为单个节点和其多个引用的形式。一般用于去除冗余部分,压缩 ndl 的结构。
33
+ - 【bug fix】【new feature】fix bug in write(),添加了 saved_node_name_format 参数控制 nodes 下文件名的生成。
34
+ - bug:在 v1.3.3 前直接使用原始的 node_name 来作为 nodes/ 目录下的文件名,这导致当 node_name 中带有特殊字符时,比如 "/"(在linux下) 和 ":"(在windows下),将会导致保存失败。
35
+ - fix:使用 saved_node_name_format 指定生成文件名的方式,默认方式 '{count}_{hash_name}' 可以避免出现特殊字符。
36
+ - 【bug fix】fix bug in write()
37
+ - bug:在 v1.3.3 前 processed_s 通过 ndl.set_value() 来逐个节点构建,但是由于根据节点名创建的结果可能和原结构存在差异(详见 ndl.set_value() 中b_force参数的介绍),因此导致 processed_s 和 var 结构不一致,导致出错。
38
+ - fix:使用 ndl.copy_() 来创建结构与 var 一致的 processed_s。
39
+ - 【new feature】add b_keep_identical_relations to write(),增加该参数用于决定是否保留不同节点之间的 id 相等关系。
40
+ - 添加了对应的测试用例。
41
+
@@ -1,4 +1,4 @@
1
- __version__ = "1.3.3"
1
+ __version__ = "1.3.4"
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 1727520805 --verbose 0'
15
+ f'--expiration_timestamp 1727961379 --verbose 0'
16
16
  )
@@ -1,3 +1,4 @@
1
1
  from .write import write
2
2
  from .read import read
3
3
  from .enum_variable import Strictness_Level
4
+ from .saved_node_name_builder import Saved_Node_Name_Builder
@@ -29,13 +29,15 @@ def read(input_path, **kwargs):
29
29
 
30
30
  # 读取 var
31
31
  var = json_.read(file_path=os.path.join(input_path, "var.json"), b_use_suggested_converter=True)
32
+ # 读取 record
33
+ record_s = dict()
34
+ if os.path.isfile(os.path.join(input_path, "record.json")):
35
+ record_s = json_.read(file_path=os.path.join(input_path, "record.json"), b_use_suggested_converter=True)
32
36
 
33
37
  # 读取被处理的节点
34
38
  processed_nodes = []
35
- if os.path.isfile(os.path.join(input_path, "record.json")):
36
- for name, value in ndl.get_nodes(
37
- var=json_.read(file_path=os.path.join(input_path, "record.json"),
38
- b_use_suggested_converter=True)["processed"], level=-1, b_strict=True):
39
+ if record_s:
40
+ for name, value in ndl.get_nodes(var=record_s["processed"], level=-1, b_strict=True):
39
41
  if value:
40
42
  processed_nodes.append(name)
41
43
  else:
@@ -56,6 +58,11 @@ def read(input_path, **kwargs):
56
58
  bk = SERIALIZER_BACKEND.get(name=value.pop("backend"))(folder=os.path.join(input_path, "nodes"))
57
59
  ndl.set_value(var=var, name=name, value=bk.read(**value))
58
60
 
61
+ #
62
+ if record_s.get("b_keep_identical_relations", False):
63
+ from kevin_toolbox.nested_dict_list import value_parser
64
+ var = value_parser.replace_identical_with_reference(var=var, flag="same", b_reverse=True)
65
+
59
66
  #
60
67
  if temp_dir is not None:
61
68
  for_os.remove(path=temp_dir, ignore_errors=True)
@@ -0,0 +1,31 @@
1
+ class Saved_Node_Name_Builder:
2
+ """
3
+ 生成保存节点内容时的文件夹/文件名称
4
+ """
5
+
6
+ def __init__(self, format_):
7
+ try:
8
+ temp = format_.format(**{k: k + "_" * 3 for k in {"raw_name", "id", "hash_name", "count"}})
9
+ assert len(temp) > len(format_)
10
+ except:
11
+ raise ValueError(f'invalid saved_node_name_format {format_}')
12
+
13
+ self.format_ = format_
14
+ self.count = 0
15
+
16
+ def __call__(self, name, value):
17
+ from kevin_toolbox.nested_dict_list import get_hash
18
+
19
+ res = self.format_.format(
20
+ **{"raw_name": name, "id": id(value), "hash_name": get_hash(name, length=12), "count": self.count})
21
+ self.count += 1
22
+ return res
23
+
24
+
25
+ if __name__ == '__main__':
26
+ bd = Saved_Node_Name_Builder(format_="{raw_name}_{count}_{hash_name}_{id}")
27
+ print(bd(":a@0", 1))
28
+ print(bd(":b:c", []))
29
+
30
+ # bd = Saved_Node_Name_Builder(format_="")
31
+ # bd = Saved_Node_Name_Builder(format_="{raw_name2}_{count}")
@@ -7,16 +7,18 @@ 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
9
  from .enum_variable import Strictness_Level
10
+ from .saved_node_name_builder import Saved_Node_Name_Builder
10
11
 
11
12
 
12
13
  def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_pack_into_tar=True,
13
- strictness_level=Strictness_Level.COMPATIBLE, **kwargs):
14
+ strictness_level=Strictness_Level.COMPATIBLE, saved_node_name_format='{count}_{hash_name}',
15
+ b_keep_identical_relations=False, **kwargs):
14
16
  """
15
17
  将输入的嵌套字典列表 var 的结构和节点值保存到文件中
16
18
  遍历 var,匹配并使用 settings 中设置的保存方式来对各部分结构/节点进行序列化
17
19
  将会生成一个文件夹或者 .tar 文件,其中包含:
18
20
  - var.json: 用于保存结构、简单节点值、复杂节点值/结构的序列化方式
19
- - nodes/目录: 其中包含一系列 <name>.<suffix> 文件或者 <name> 文件夹,其中包含复杂节点值/结构的序列化结果
21
+ - nodes/: 该目录中包含一系列 <name>.<suffix> 文件或者 <name> 文件夹,其中包含复杂节点值/结构的序列化结果
20
22
  - record.json: 其中记录了:
21
23
  {
22
24
  "processed": ... # 对哪些节点/部分进行了处理
@@ -82,25 +84,50 @@ def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_p
82
84
  - "low" / Strictness_Level.IGNORE_FAILURE 匹配不完整,或者某些节点尝试过所有匹配到
83
85
  的 backend 之后仍然无法写入
84
86
  默认是 "normal"
87
+ saved_node_name_format: <str> nodes/目录下节点文件/文件夹的命名方式。
88
+ 基本结构为: '{<part_0>}...{<part_1>}...'
89
+ 其中 {} 内将根据 part 指定的类型进行自动填充。目前支持以下几种选项:
90
+ - "raw_name" 该节点对应位置的 name。
91
+ - "id" 该节点在当前内存中的 id。
92
+ - "hash_name" 该节点位置 name 的 hash 值。
93
+ - "count" 累加计算,表示是保存的第几个节点。
94
+ !!注意:
95
+ "raw_name" 该选项在 v1.3.3 前被使用,但是由于其可能含有 : 和 / 等特殊符号,当以其作为文件夹名时,
96
+ 可能会引发错误。因此对于 windows 用户,禁止使用该选项,对于 mac 和 linux 用户,同样也不建议使用该选项。
97
+ "id" 虽然具有唯一性,但是其值对于每次运行是随机的。
98
+ "hash_name" 有极低的可能会发生 hash 碰撞。
99
+ 综合而言:
100
+ 建议使用 "hash_name" 和 "count" 的组合。
101
+ 默认值为:
102
+ '{count}_{hash_name}'
103
+ b_keep_identical_relations: <boolean> 是否保留不同节点之间的 id 相等关系。
104
+ 具体而言,就是使用 value_parser.replace_identical_with_reference() 函数将具有相同 id 的多个节点,
105
+ 替换为单个节点和其多个引用的形式。
106
+ 对于 ndl 中存在大量具有相同 id 的重复节点的情况,使用该操作可以额外达到压缩的效果。
107
+ 默认为 False
85
108
  """
86
109
  from kevin_toolbox.nested_dict_list.serializer.variable import SERIALIZER_BACKEND
87
110
 
88
- #
111
+ # 检查参数
89
112
  traversal_mode = Traversal_Mode(traversal_mode)
90
113
  strictness_level = Strictness_Level(strictness_level)
91
114
  os.makedirs(output_dir, exist_ok=True)
92
115
  var = ndl.copy_(var=var, b_deepcopy=False)
116
+ if b_keep_identical_relations:
117
+ from kevin_toolbox.nested_dict_list import value_parser
118
+ var = value_parser.replace_identical_with_reference(var=var, flag="same", b_reverse=False)
93
119
  if settings is None:
94
120
  settings = [{"match_cond": "<level>-1", "backend": (":skip:simple", ":numpy:npy", ":torch:tensor", ":pickle")}]
121
+ snn_builder = Saved_Node_Name_Builder(format_=saved_node_name_format)
95
122
 
96
123
  # 构建 processed_s
97
124
  # 为了避免重复处理节点/结构,首先构建与 var 具有相似结构的 processed_s 来记录处理处理进度。
98
125
  # 对于 processed_s,其节点值为 True 时表示该节点已经被处理,当节点值为 False 或者 list/dict 类型时表示该节点或者节点下面的结构中仍然
99
126
  # 存在未处理的部分。
100
127
  # 对于中间节点,只有其下所有叶节点都未处理时才会被匹配。
101
- processed_s = dict()
128
+ processed_s = ndl.copy_(var=var, b_deepcopy=False, b_keep_internal_references=False)
102
129
  for n, _ in ndl.get_nodes(var=var, level=-1, b_strict=True):
103
- ndl.set_value(var=processed_s, name=n, value=False, b_force=True)
130
+ ndl.set_value(var=processed_s, name=n, value=False, b_force=False)
104
131
  # processed_s_bak 用于记录 var 的原始结构
105
132
  processed_s_bak = ndl.copy_(var=processed_s, b_deepcopy=True)
106
133
  if "_hook_for_debug" in kwargs:
@@ -126,27 +153,21 @@ def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_p
126
153
  _process = _process_from_top_to_down
127
154
  else:
128
155
  _process = _process_from_down_to_top
129
- paras = dict(
130
- var=var, processed_s=processed_s, match_cond=setting["match_cond"],
131
- traversal_mode=t_mode, strictness_level=strictness_level
132
- )
156
+ paras = dict(var=var, match_cond=setting["match_cond"], traversal_mode=t_mode)
133
157
  elif setting["match_cond"].startswith("<level>"):
134
158
  _process = _process_for_level
135
- paras = dict(
136
- var=var, processed_s=processed_s, processed_s_bak=processed_s_bak,
137
- level=int(setting["match_cond"][7:]), strictness_level=strictness_level
138
- )
159
+ paras = dict(var=var, processed_s_bak=processed_s_bak, level=int(setting["match_cond"][7:]))
139
160
  elif setting["match_cond"].startswith("<node>"):
140
161
  _process = _process_for_name
141
- paras = dict(var=var, processed_s=processed_s, name=setting["match_cond"][6:],
142
- strictness_level=strictness_level)
162
+ paras = dict(var=var, name=setting["match_cond"][6:])
143
163
  else:
144
164
  raise ValueError(f'invalid match_cond: {setting["match_cond"]}')
145
165
  # 执行
146
166
  for i in backend_name_ls:
147
167
  # print(processed_s)
148
168
  # print(f'backend: {i}')
149
- _process(backend=backend_s[i], **paras)
169
+ _process(backend=backend_s[i], strictness_level=strictness_level, processed_s=processed_s,
170
+ snn_builder=snn_builder, **paras)
150
171
  if "_hook_for_debug" in kwargs:
151
172
  kwargs["_hook_for_debug"]["processed"].append([i, ndl.copy_(var=processed_s, b_deepcopy=True)])
152
173
 
@@ -171,7 +192,8 @@ def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_p
171
192
  json_.write(content=var, file_path=os.path.join(output_dir, "var.json"), b_use_suggested_converter=True)
172
193
  # 保存处理结果(非必要)
173
194
  json_.write(content=dict(processed=processed_s, raw_structure=processed_s_bak, timestamp=time.time(),
174
- kt_version=kevin_toolbox.__version__),
195
+ kt_version=kevin_toolbox.__version__,
196
+ b_keep_identical_relations=b_keep_identical_relations),
175
197
  file_path=os.path.join(output_dir, "record.json"), b_use_suggested_converter=True)
176
198
 
177
199
  # 打包成 .tar 文件
@@ -196,13 +218,13 @@ def _judge_processed_or_not(processed_s, name):
196
218
  return b_processed
197
219
 
198
220
 
199
- def _process_for_level(var, processed_s, processed_s_bak, level, backend, strictness_level):
221
+ def _process_for_level(var, processed_s, processed_s_bak, level, backend, strictness_level, snn_builder):
200
222
  for name, _ in ndl.get_nodes(var=processed_s_bak, level=level, b_strict=True):
201
223
  _process_for_name(var=var, processed_s=processed_s, name=name, backend=backend,
202
- strictness_level=strictness_level)
224
+ strictness_level=strictness_level, snn_builder=snn_builder)
203
225
 
204
226
 
205
- def _process_for_name(var, processed_s, name, backend, strictness_level):
227
+ def _process_for_name(var, processed_s, name, backend, strictness_level, snn_builder):
206
228
  if _judge_processed_or_not(processed_s=processed_s, name=name) is True:
207
229
  # has been processed
208
230
  return
@@ -212,8 +234,9 @@ def _process_for_name(var, processed_s, name, backend, strictness_level):
212
234
  return
213
235
 
214
236
  # write by backend
237
+ snn_name = snn_builder(name=name, value=value)
215
238
  try:
216
- res = backend.write(name=name, var=value)
239
+ res = backend.write(name=snn_name, var=value)
217
240
  except:
218
241
  assert strictness_level in (Strictness_Level.IGNORE_FAILURE, Strictness_Level.COMPATIBLE), \
219
242
  f'An error occurred when node {name} was saved using the first matched backend {backend}'
@@ -222,7 +245,7 @@ def _process_for_name(var, processed_s, name, backend, strictness_level):
222
245
  ndl.set_value(var=var, name=name, value=res, b_force=False)
223
246
 
224
247
 
225
- def _process_from_top_to_down(var, processed_s, match_cond, backend, traversal_mode, strictness_level):
248
+ def _process_from_top_to_down(var, processed_s, match_cond, backend, traversal_mode, strictness_level, snn_builder):
226
249
  def match_cond_(parent_type, idx, value):
227
250
  nonlocal match_cond, processed_s
228
251
 
@@ -237,8 +260,9 @@ def _process_from_top_to_down(var, processed_s, match_cond, backend, traversal_m
237
260
  nonlocal processed_s, backend, strictness_level
238
261
 
239
262
  # write by backend
263
+ snn_name = snn_builder(name=idx, value=value)
240
264
  try:
241
- res = backend.write(name=idx, var=value)
265
+ res = backend.write(name=snn_name, var=value)
242
266
  except:
243
267
  assert strictness_level in (Strictness_Level.IGNORE_FAILURE, Strictness_Level.COMPATIBLE), \
244
268
  f'An error occurred when node {name} was saved using the first matched backend {backend}'
@@ -250,7 +274,7 @@ def _process_from_top_to_down(var, processed_s, match_cond, backend, traversal_m
250
274
  b_use_name_as_idx=True, traversal_mode=traversal_mode, b_traverse_matched_element=False)
251
275
 
252
276
 
253
- def _process_from_down_to_top(var, processed_s, match_cond, backend, traversal_mode, strictness_level):
277
+ def _process_from_down_to_top(var, processed_s, match_cond, backend, traversal_mode, strictness_level, snn_builder):
254
278
  processed_s_raw, processed_s = processed_s, ndl.copy_(var=processed_s, b_deepcopy=True)
255
279
 
256
280
  def match_cond_(parent_type, idx, value):
@@ -268,8 +292,9 @@ def _process_from_down_to_top(var, processed_s, match_cond, backend, traversal_m
268
292
  nonlocal processed_s, backend, processed_s_raw, strictness_level
269
293
 
270
294
  # write by backend
295
+ snn_name = snn_builder(name=idx, value=value)
271
296
  try:
272
- res = backend.write(name=idx, var=value)
297
+ res = backend.write(name=snn_name, var=value)
273
298
  except:
274
299
  assert strictness_level in (Strictness_Level.IGNORE_FAILURE, Strictness_Level.COMPATIBLE), \
275
300
  f'An error occurred when node {name} was saved using the first matched backend {backend}'
@@ -305,7 +330,7 @@ if __name__ == '__main__':
305
330
  {"match_cond": lambda _, __, value: not isinstance(value, (list, dict)),
306
331
  "backend": (":skip:simple",)},
307
332
  ]
308
- write(var=var_, output_dir=os.path.join(os.path.dirname(__file__), "temp3"), traversal_mode="bfs",
333
+ write(var=var_, output_dir=os.path.join(os.path.dirname(__file__), "temp"), traversal_mode="bfs",
309
334
  b_pack_into_tar=True, settings=settings_, _hook_for_debug=_hook_for_debug)
310
335
 
311
336
  for bk_name, p in _hook_for_debug["processed"]:
@@ -2,3 +2,4 @@ from .cal_relation_between_references import cal_relation_between_references
2
2
  from .eval_references import eval_references
3
3
  from .parse_references import parse_references
4
4
  from .parse_and_eval_references import parse_and_eval_references
5
+ from .replace_identical_with_reference import replace_identical_with_reference
@@ -0,0 +1,127 @@
1
+ from collections import defaultdict
2
+ from kevin_toolbox.nested_dict_list import get_nodes, get_value, set_value
3
+ from kevin_toolbox.nested_dict_list import value_parser
4
+
5
+
6
+ def replace_identical_with_reference(var, flag="same", match_cond=None, b_reverse=False):
7
+ """
8
+ 将具有相同 id 的多个节点,替换为单个节点和其多个引用的形式
9
+ 一般用于去除冗余部分,压缩 ndl 的结构
10
+
11
+ 参数:
12
+ var:
13
+ flag: <str> 引用标记头,表示该节点应该替换为指定节点的内容
14
+ 默认为 "same"
15
+ 注意,在正向过程中,如果遇到本身就是以该 flag 开头的字符串,会自动在前添加多一个 flag 以示区分,
16
+ 然后在逆向过程中,遇到两个 flag 标记开头的字符串将删除一个,然后跳过不处理。
17
+ match_cond: <func> 仅对匹配上(返回True视为匹配上)的节点进行处理
18
+ 函数类型为 def(name, value)
19
+ 其中:
20
+ name 该节点在结构体中的位置
21
+ value 节点的值
22
+ 默认不对 int、float、bool、str、None 等类型进行处理
23
+ b_reverse: <boolean> 是否进行逆向操作
24
+ """
25
+ if match_cond is None:
26
+ match_cond = lambda name, value: not isinstance(value, (int, float, bool, str, type(None)))
27
+ assert callable(match_cond)
28
+
29
+ if b_reverse:
30
+ return _reverse(var, flag)
31
+ else:
32
+ return _forward(var, flag, match_cond)
33
+
34
+
35
+ def _forward(var, flag, match_cond):
36
+ id_to_height_s = defaultdict(set)
37
+ id_to_name_s = defaultdict(set)
38
+ height = 1
39
+ while True:
40
+ node_ls = get_nodes(var=var, level=-height, b_strict=True)
41
+ if not node_ls:
42
+ break
43
+ for name, value in node_ls:
44
+ if not match_cond(name, value):
45
+ continue
46
+ id_to_name_s[id(value)].add(name)
47
+ id_to_height_s[id(value)].add(height)
48
+ height += 1
49
+
50
+ #
51
+ for k, v in list(id_to_height_s.items()):
52
+ # 仅保留有多个节点对应的 id
53
+ if len(id_to_name_s[k]) <= 1:
54
+ id_to_height_s.pop(k)
55
+ id_to_name_s.pop(k)
56
+ continue
57
+ # 具有相同 id 的节点所处的高度应该相同
58
+ assert len(v) == 1, f'nodes {id_to_name_s[k]} have different heights: {v}'
59
+ # 按高度排序
60
+ id_vs_height = sorted([(k, v.pop()) for k, v in id_to_height_s.items()], key=lambda x: x[1], reverse=True)
61
+
62
+ # 从高到低,依次将具有相同 id 的节点替换为 单个节点和多个引用 的形式
63
+ temp = []
64
+ processed_name_set = set()
65
+ for k, _ in id_vs_height:
66
+ # 找出父节点仍然未被处理的节点(亦即仍然能够访问到的节点)
67
+ unprocessed_name_set = {n for n in id_to_name_s[k] if id(get_value(var=var, name=n, default=temp)) == k}
68
+ if len(unprocessed_name_set) <= 1:
69
+ continue
70
+ # 任选其一进行保留,其余改为引用
71
+ keep_name = unprocessed_name_set.pop()
72
+ for name in unprocessed_name_set:
73
+ try:
74
+ var = set_value(var=var, name=name, value=f'<{flag}>{{{keep_name}}}', b_force=False)
75
+ except:
76
+ breakpoint()
77
+ processed_name_set.update(unprocessed_name_set)
78
+
79
+ # 将叶节点中,未被处理过,且是 str,且以 flag 开头的字符串,添加多一个 flag,以示区分
80
+ for name, value in get_nodes(var=var, level=-1, b_strict=True):
81
+ if name not in processed_name_set and isinstance(value, str) and value.startswith(f'<{flag}>'):
82
+ var = set_value(var=var, name=name, value=f'<{flag}>' + value, b_force=False)
83
+
84
+ return var
85
+
86
+
87
+ class _My_Str:
88
+ def __init__(self, s):
89
+ self.s = s
90
+
91
+
92
+ def _reverse(var, flag):
93
+ # 找出叶节点中,带有2个以上 flag 标记的字符串,删除其中一个标记,并使用 _My_Str 包裹,以便与普通引用节点区分
94
+ for name, value in get_nodes(var=var, level=-1, b_strict=True):
95
+ if isinstance(value, str) and value.startswith(f'<{flag}><{flag}>'):
96
+ var = set_value(var=var, name=name, value=_My_Str(value[len(flag) + 2:]), b_force=False)
97
+ # 解释引用
98
+ var, _ = value_parser.parse_and_eval_references(var=var, flag=flag)
99
+ # 解除 _My_Str 包裹
100
+ for name, value in get_nodes(var=var, level=-1, b_strict=True):
101
+ if isinstance(value, _My_Str):
102
+ var = set_value(var=var, name=name, value=value.s, b_force=False)
103
+ return var
104
+
105
+
106
+ if __name__ == '__main__':
107
+ import numpy as np
108
+ from kevin_toolbox.nested_dict_list import copy_
109
+
110
+ a = np.array([1, 2, 3])
111
+ b = np.ones((2, 3))
112
+ c = [a, b]
113
+ d = {"a": a, "b": b}
114
+ e = {"c1": c, "c2": c}
115
+ x = [e, a, d, c, "<same>{@1}", "<same><same>{@1}"]
116
+
117
+ print(x)
118
+
119
+ y = replace_identical_with_reference(var=copy_(x, b_deepcopy=True), flag="same")
120
+ print(y)
121
+
122
+ x1 = replace_identical_with_reference(var=y, flag="same", b_reverse=True)
123
+ print(x1)
124
+
125
+ from kevin_toolbox.patches.for_test import check_consistency
126
+
127
+ check_consistency(x, x1)
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.3.4
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.4 (2024-04-06)【bug fix】【new feature】
50
+ - nested_dict_list
51
+ - 【new feature】add replace_identical_with_reference() to value_parser,新增该函数用于将具有相同 id 的多个节点,替换为单个节点和其多个引用的形式。一般用于去除冗余部分,压缩 ndl 的结构。
52
+ - 【bug fix】【new feature】fix bug in write(),添加了 saved_node_name_format 参数控制 nodes 下文件名的生成。
53
+ - bug:在 v1.3.3 前直接使用原始的 node_name 来作为 nodes/ 目录下的文件名,这导致当 node_name 中带有特殊字符时,比如 "/"(在linux下) 和 ":"(在windows下),将会导致保存失败。
54
+ - fix:使用 saved_node_name_format 指定生成文件名的方式,默认方式 '{count}_{hash_name}' 可以避免出现特殊字符。
55
+ - 【bug fix】fix bug in write()
56
+ - bug:在 v1.3.3 前 processed_s 通过 ndl.set_value() 来逐个节点构建,但是由于根据节点名创建的结果可能和原结构存在差异(详见 ndl.set_value() 中b_force参数的介绍),因此导致 processed_s 和 var 结构不一致,导致出错。
57
+ - fix:使用 ndl.copy_() 来创建结构与 var 一致的 processed_s。
58
+ - 【new feature】add b_keep_identical_relations to write(),增加该参数用于决定是否保留不同节点之间的 id 相等关系。
59
+ - 添加了对应的测试用例。
60
+
61
+
62
+
@@ -234,6 +234,7 @@ kevin_toolbox/nested_dict_list/name_handler/parse_name.py
234
234
  kevin_toolbox/nested_dict_list/serializer/__init__.py
235
235
  kevin_toolbox/nested_dict_list/serializer/enum_variable.py
236
236
  kevin_toolbox/nested_dict_list/serializer/read.py
237
+ kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py
237
238
  kevin_toolbox/nested_dict_list/serializer/variable.py
238
239
  kevin_toolbox/nested_dict_list/serializer/write.py
239
240
  kevin_toolbox/nested_dict_list/serializer/backends/__init__.py
@@ -252,6 +253,7 @@ kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py
252
253
  kevin_toolbox/nested_dict_list/value_parser/eval_references.py
253
254
  kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py
254
255
  kevin_toolbox/nested_dict_list/value_parser/parse_references.py
256
+ kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py
255
257
  kevin_toolbox/patches/__init__.py
256
258
  kevin_toolbox/patches/for_logging/__init__.py
257
259
  kevin_toolbox/patches/for_logging/build_logger.py
@@ -1,70 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: kevin-toolbox-dev
3
- Version: 1.3.3
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.3 (2024-04-01)【bug fix】【new feature】
50
- - math.utils
51
- - 【bug fix】更正拼写错误,将原有的 spilt_integer_most_evenly() 中的 "spilt" 改正为 "split",新的函数名为 split_integer_most_evenly
52
-
53
- - patches.for_numpy.random
54
- - 【bug fix】modify get_rng(),改进以避免遇到 rng 中不存在的函数时报错。
55
-
56
- - data_flow.file
57
- - json_
58
- - 【new feature】将 escape_tuple() 改成 escape_tuple_and_set(),新增对 set 进行处理。
59
- - 【new feature】将 unescape_tuple() 改成 unescape_tuple_and_set()。
60
-
61
- - core.reader
62
- - 【new feature】为 File_Iterative_Reader 新增了 file_obj 参数,支持直接输入文件对象。
63
-
64
- - kevin_notation
65
- - 【new feature】根据 File_Iterative_Reader 的修改,为 Kevin_Notation_Reader 和 read() 对应增加 file_obj 参数,以支持直接输入文件对象。
66
- - 补充了对应的测试用例。
67
-
68
-
69
-
70
-