kevin-toolbox-dev 1.4.5__tar.gz → 1.4.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. kevin-toolbox-dev-1.4.6/PKG-INFO +71 -0
  2. kevin-toolbox-dev-1.4.6/README.md +50 -0
  3. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/__init__.py +2 -2
  4. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +6 -0
  5. kevin-toolbox-dev-1.4.6/kevin_toolbox/data_flow/file/excel/__init__.py +1 -0
  6. kevin-toolbox-dev-1.4.6/kevin_toolbox/data_flow/file/excel/write_excel_with_matrix.py +105 -0
  7. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/read_json.py +1 -0
  8. kevin-toolbox-dev-1.4.6/kevin_toolbox/env_info/__init__.py +2 -0
  9. kevin-toolbox-dev-1.4.6/kevin_toolbox/env_info/check_validity_and_uninstall.py +49 -0
  10. kevin-toolbox-dev-1.4.6/kevin_toolbox/env_info/check_version_and_update.py +72 -0
  11. kevin-toolbox-dev-1.4.6/kevin_toolbox/env_info/test/test_check_.py +52 -0
  12. kevin-toolbox-dev-1.4.6/kevin_toolbox/patches/for_os/find_files_in_dir.py +35 -0
  13. kevin-toolbox-dev-1.4.6/kevin_toolbox/patches/for_os/organize/__init__.py +1 -0
  14. kevin-toolbox-dev-1.4.6/kevin_toolbox/patches/for_os/organize/group_files_by_timestamp.py +90 -0
  15. kevin-toolbox-dev-1.4.6/kevin_toolbox_dev.egg-info/PKG-INFO +71 -0
  16. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox_dev.egg-info/SOURCES.txt +5 -0
  17. kevin-toolbox-dev-1.4.5/PKG-INFO +0 -68
  18. kevin-toolbox-dev-1.4.5/README.md +0 -47
  19. kevin-toolbox-dev-1.4.5/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -29
  20. kevin-toolbox-dev-1.4.5/kevin_toolbox/env_info/check_version_and_update.py +0 -51
  21. kevin-toolbox-dev-1.4.5/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -1
  22. kevin-toolbox-dev-1.4.5/kevin_toolbox/patches/for_os/find_files_in_dir.py +0 -30
  23. kevin-toolbox-dev-1.4.5/kevin_toolbox_dev.egg-info/PKG-INFO +0 -68
  24. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/__init__.py +0 -0
  25. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
  26. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +0 -0
  27. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +0 -0
  28. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/cache_base.py +0 -0
  29. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/memo_cache.py +0 -0
  30. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +0 -0
  31. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/fifo_strategy.py +0 -0
  32. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lfu_strategy.py +0 -0
  33. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lru_strategy.py +0 -0
  34. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lst_strategy.py +0 -0
  35. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/strategy_base.py +0 -0
  36. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/__init__.py +0 -0
  37. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_builder.py +0 -0
  38. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_manager.py +0 -0
  39. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_strategy.py +0 -0
  40. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +0 -0
  41. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
  42. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
  43. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
  44. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
  45. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
  46. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
  47. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
  48. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
  49. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
  50. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
  51. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
  52. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
  53. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
  54. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
  55. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
  56. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
  57. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
  58. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
  59. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
  60. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +0 -0
  61. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -0
  62. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
  63. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
  64. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +0 -0
  65. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
  66. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
  67. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
  68. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
  69. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
  70. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
  71. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
  72. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
  73. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +0 -0
  74. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +0 -0
  75. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
  76. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
  77. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
  78. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +0 -0
  79. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +0 -0
  80. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
  81. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
  82. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
  83. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/dangerous/__init__.py +0 -0
  84. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
  85. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/__init__.py +0 -0
  86. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/__init__.py +0 -0
  87. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
  88. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
  89. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/cache/test/__init__.py +0 -0
  90. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/cache/test/test_cache_manager_for_iterator.py +0 -0
  91. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
  92. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
  93. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
  94. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
  95. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/__init__.py +0 -0
  96. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
  97. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
  98. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
  99. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
  100. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
  101. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/escape_tuple_and_set.py +0 -0
  102. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
  103. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
  104. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py +0 -0
  105. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
  106. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
  107. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
  108. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
  109. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +0 -0
  110. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
  111. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
  112. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
  113. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
  114. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +0 -0
  115. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
  116. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
  117. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py +0 -0
  118. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
  119. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/__init__.py +0 -0
  120. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
  121. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/link/__init__.py +0 -0
  122. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/link/find_links.py +0 -0
  123. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/link/generate_link.py +0 -0
  124. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/__init__.py +0 -0
  125. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/convert/__init__.py +0 -0
  126. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/convert/complete_to_matrix.py +0 -0
  127. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/convert/matrix_to_complete.py +0 -0
  128. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/convert_format.py +0 -0
  129. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/find_tables.py +0 -0
  130. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/generate_table.py +0 -0
  131. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/get_format.py +0 -0
  132. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/padding_misaligned_values.py +0 -0
  133. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/table/variable.py +0 -0
  134. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/utils/__init__.py +0 -0
  135. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/data_flow/file/markdown/utils/save_images_in_ndl.py +0 -0
  136. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/__init__.py +0 -0
  137. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/decorator/__init__.py +0 -0
  138. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
  139. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
  140. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
  141. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
  142. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
  143. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
  144. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
  145. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
  146. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
  147. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
  148. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
  149. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
  150. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
  151. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
  152. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
  153. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/temperate/__init__.py +0 -0
  154. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
  155. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
  156. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
  157. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
  158. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/developing/test.py +0 -0
  159. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/test/__init__.py +0 -0
  160. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/test/test_variable_.py +0 -0
  161. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/test/test_version.py +0 -0
  162. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/variable_/__init__.py +0 -0
  163. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/variable_/env_vars_parser.py +0 -0
  164. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/version/__init__.py +0 -0
  165. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/version/compare_version.py +0 -0
  166. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/version/parse_version.py +0 -0
  167. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
  168. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/__init__.py +0 -0
  169. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
  170. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
  171. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
  172. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
  173. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
  174. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
  175. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
  176. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
  177. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
  178. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
  179. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
  180. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
  181. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/__init__.py +0 -0
  182. {kevin-toolbox-dev-1.4.5/kevin_toolbox/env_info → kevin-toolbox-dev-1.4.6/kevin_toolbox/machine_learning/dataset}/__init__.py +0 -0
  183. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
  184. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
  185. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
  186. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
  187. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
  188. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
  189. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
  190. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
  191. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
  192. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
  193. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
  194. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
  195. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
  196. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
  197. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
  198. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
  199. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
  200. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
  201. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
  202. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
  203. {kevin-toolbox-dev-1.4.5/kevin_toolbox/machine_learning/dataset → kevin-toolbox-dev-1.4.6/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices}/__init__.py +0 -0
  204. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
  205. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
  206. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
  207. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
  208. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
  209. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
  210. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/__init__.py +0 -0
  211. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/__init__.py +0 -0
  212. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
  213. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
  214. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
  215. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
  216. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
  217. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
  218. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
  219. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
  220. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
  221. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
  222. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
  223. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
  224. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
  225. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
  226. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
  227. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
  228. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
  229. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
  230. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
  231. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
  232. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/__init__.py +0 -0
  233. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/cache.py +0 -0
  234. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
  235. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
  236. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
  237. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
  238. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
  239. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
  240. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
  241. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/transform/__init__.py +0 -0
  242. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
  243. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
  244. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
  245. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
  246. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
  247. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/utils/__init__.py +0 -0
  248. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
  249. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
  250. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
  251. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
  252. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/math/utils/split_integer_most_evenly.py +0 -0
  253. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
  254. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
  255. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
  256. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
  257. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
  258. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
  259. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
  260. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
  261. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
  262. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
  263. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/__init__.py +0 -0
  264. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
  265. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
  266. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
  267. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
  268. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
  269. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
  270. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
  271. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
  272. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
  273. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
  274. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
  275. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -0
  276. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/read.py +0 -0
  277. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py +0 -0
  278. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/variable.py +0 -0
  279. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/serializer/write.py +0 -0
  280. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/set_default.py +0 -0
  281. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/set_value.py +0 -0
  282. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
  283. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +0 -0
  284. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
  285. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
  286. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +0 -0
  287. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
  288. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py +0 -0
  289. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/__init__.py +0 -0
  290. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_logging/__init__.py +0 -0
  291. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_logging/build_logger.py +0 -0
  292. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
  293. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
  294. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
  295. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
  296. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/clear_border_of_axes.py +0 -0
  297. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/color/__init__.py +0 -0
  298. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/color/color_format.py +0 -0
  299. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/color/convert_format.py +0 -0
  300. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/color/generate_color_list.py +0 -0
  301. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/color/get_format.py +0 -0
  302. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +0 -0
  303. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +0 -0
  304. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +0 -0
  305. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +0 -0
  306. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +0 -0
  307. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +0 -0
  308. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +0 -0
  309. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
  310. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
  311. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
  312. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/linalg/entropy.py +0 -0
  313. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
  314. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
  315. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/__init__.py +0 -0
  316. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/get_rng.py +0 -0
  317. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/get_rng_state.py +0 -0
  318. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/set_rng_state.py +0 -0
  319. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +0 -0
  320. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +0 -0
  321. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_numpy/random/variable.py +0 -0
  322. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
  323. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/build_sampler.py +0 -0
  324. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/build_storage.py +0 -0
  325. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/build_study.py +0 -0
  326. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/copy_study.py +0 -0
  327. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
  328. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/__init__.py +0 -0
  329. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +0 -0
  330. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +0 -0
  331. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +0 -0
  332. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +0 -0
  333. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +0 -0
  334. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +0 -0
  335. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/__init__.py +0 -0
  336. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/copy.py +0 -0
  337. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/pack.py +0 -0
  338. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/path/__init__.py +0 -0
  339. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/path/find_illegal_chars.py +0 -0
  340. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +0 -0
  341. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/remove.py +0 -0
  342. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/unpack.py +0 -0
  343. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_os/walk.py +0 -0
  344. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_streamlit/__init__.py +0 -0
  345. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_streamlit/markdown/__init__.py +0 -0
  346. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_streamlit/markdown/show.py +0 -0
  347. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_streamlit/markdown/show_image.py +0 -0
  348. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_streamlit/markdown/show_table.py +0 -0
  349. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_test/__init__.py +0 -0
  350. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
  351. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
  352. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
  353. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
  354. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
  355. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
  356. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
  357. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
  358. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
  359. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
  360. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
  361. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
  362. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
  363. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
  364. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
  365. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
  366. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/utils/__init__.py +0 -0
  367. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox/utils/variable.py +0 -0
  368. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
  369. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
  370. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
  371. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/pyproject.toml +0 -0
  372. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/setup.cfg +0 -0
  373. {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.6}/setup.py +0 -0
@@ -0,0 +1,71 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.4.6
4
+ Summary: 一个常用的工具代码包集合
5
+ Home-page: https://github.com/cantbeblank96/kevin_toolbox
6
+ Download-URL: https://github.com/username/your-package/archive/refs/tags/v1.0.0.tar.gz
7
+ Author: kevin hsu
8
+ Author-email: xukaiming1996@163.com
9
+ License: MIT
10
+ Keywords: mathematics,pytorch,numpy,machine-learning,algorithm
11
+ Platform: UNKNOWN
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.6
16
+ Description-Content-Type: text/markdown
17
+ Provides-Extra: plot
18
+ Provides-Extra: rest
19
+
20
+ # kevin_toolbox
21
+
22
+ 一个通用的工具代码包集合
23
+
24
+
25
+
26
+ 环境要求
27
+
28
+ ```shell
29
+ numpy>=1.19
30
+ pytorch>=1.2
31
+ ```
32
+
33
+ 安装方法:
34
+
35
+ ```shell
36
+ pip install kevin-toolbox --no-dependencies
37
+ ```
38
+
39
+
40
+
41
+ [项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
42
+
43
+ [使用指南 User_Guide](./notes/User_Guide.md)
44
+
45
+ [免责声明 Disclaimer](./notes/Disclaimer.md)
46
+
47
+ [版本更新记录](./notes/Release_Record.md):
48
+
49
+ - v 1.4.6 (2025-01-24)【new feature】
50
+
51
+ - data_flow.file
52
+ - modify json_.read(),支持输入路径使用 ~ 表示家目录。
53
+ - 【new feature】add excel,该模块用于 excel 表格处理。
54
+ - write_with_matrix():将矩阵写入到 excel 文件中
55
+
56
+ - patches.for_os
57
+ - modify find_files_in_dir(),支持 suffix_ls 设定 None 以表示不进行任何过滤。
58
+ - 【new feature】add organize,该模块用于文件整理。
59
+ - group_files_by_timestamp():将 input_dir 中的文件按照时间戳信息进行分组,输出到 output_dir 中。
60
+ - 添加了对应的测试用例。
61
+ - env_info
62
+ - 【new feature】add check_validity_and_uninstall(),检查当前机器时间是否超过 expiration_timestamp 指定的有效期,若超过则卸载 package_name 对应的库。
63
+ - 【new feature】add check_version_and_update(),检查当前库的版本,并尝试更新。
64
+ - 以上函数均系从同名脚本中抽取出来。
65
+ - 以上修改,均已添加了对应的测试用例。
66
+ - developing
67
+ - 【new feature】add photo_album_organization,该模块包含一系列整理相册相关的脚本。
68
+ - 0_group_by_timestamp.py :按照时间戳分组
69
+ - 1_merge_folders.py :将文件数量较少的目录合并
70
+
71
+
@@ -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.4.6 (2025-01-24)【new feature】
31
+
32
+ - data_flow.file
33
+ - modify json_.read(),支持输入路径使用 ~ 表示家目录。
34
+ - 【new feature】add excel,该模块用于 excel 表格处理。
35
+ - write_with_matrix():将矩阵写入到 excel 文件中
36
+
37
+ - patches.for_os
38
+ - modify find_files_in_dir(),支持 suffix_ls 设定 None 以表示不进行任何过滤。
39
+ - 【new feature】add organize,该模块用于文件整理。
40
+ - group_files_by_timestamp():将 input_dir 中的文件按照时间戳信息进行分组,输出到 output_dir 中。
41
+ - 添加了对应的测试用例。
42
+ - env_info
43
+ - 【new feature】add check_validity_and_uninstall(),检查当前机器时间是否超过 expiration_timestamp 指定的有效期,若超过则卸载 package_name 对应的库。
44
+ - 【new feature】add check_version_and_update(),检查当前库的版本,并尝试更新。
45
+ - 以上函数均系从同名脚本中抽取出来。
46
+ - 以上修改,均已添加了对应的测试用例。
47
+ - developing
48
+ - 【new feature】add photo_album_organization,该模块包含一系列整理相册相关的脚本。
49
+ - 0_group_by_timestamp.py :按照时间戳分组
50
+ - 1_merge_folders.py :将文件数量较少的目录合并
@@ -1,4 +1,4 @@
1
- __version__ = "1.4.5"
1
+ __version__ = "1.4.6"
2
2
 
3
3
 
4
4
  import os
@@ -12,5 +12,5 @@ os.system(
12
12
  os.system(
13
13
  f'python {os.path.split(__file__)[0]}/env_info/check_validity_and_uninstall.py '
14
14
  f'--package_name kevin-toolbox-dev '
15
- f'--expiration_timestamp 1750434037 --verbose 0'
15
+ f'--expiration_timestamp 1753280251 --verbose 0'
16
16
  )
@@ -44,6 +44,12 @@ class Cache_Manager:
44
44
  当设置为 float 时表示占 upper_bound 的比例
45
45
  默认为 0.5
46
46
  strategy: <str/dict/Strategy_Base> 管理策略
47
+ 目前支持以下策略:
48
+ - ":by_initial_time:FIFO" 删除最后一次访问时间最久远的部分
49
+ - ":by_counts:LFU" 删除访问频率最低的部分
50
+ - ":by_last_time:LRU" 删除最后一次访问时间最久远的部分
51
+ - ":by_survival_time:LST" 删除访问频率最低的部分
52
+ 默认使用 LRU 策略
47
53
  cache: <str/dict/Cache_Base> 缓存种类
48
54
  """
49
55
  # 默认参数
@@ -0,0 +1 @@
1
+ from .write_excel_with_matrix import write_excel_with_matrix as write_with_matrix
@@ -0,0 +1,105 @@
1
+ import os
2
+ import openpyxl
3
+ from openpyxl.styles import Alignment, Font, PatternFill
4
+ from kevin_toolbox.patches.for_os import remove
5
+
6
+
7
+ # excel
8
+ def write_excel_with_matrix(matrix, file_path=None, file_obj=None, sheet_name="matrix",
9
+ column_label_ls=None, row_label_ls=None, column_title="", row_title="", main_title=""):
10
+ """
11
+ 将矩阵写入到 excel 文件中
12
+
13
+ 参数:
14
+ file_path: 要写入到哪个文件
15
+ file_obj: <openpyxl.Workbook> 文件对象
16
+ 注意!!以上两个参数指定其一即可,同时指定时候,以后者为准。
17
+ sheet_name: 要写入到哪个sheet页面
18
+ matrix: <np.array or np.matrix> 矩阵
19
+ column_label_ls, row_label_ls: 行列标签
20
+ column_title, row_title: 行列标题
21
+ main_title: 总标题
22
+ """
23
+ assert file_path is not None or file_obj is not None
24
+
25
+ if file_obj is None:
26
+ file_path = os.path.abspath(os.path.expanduser(file_path))
27
+ os.makedirs(os.path.dirname(file_path), exist_ok=True)
28
+ # 判断文件是否存在,不存在则新建,否则读取文件
29
+ if not os.path.isfile(file_path):
30
+ wb = openpyxl.Workbook() # 创建文件对象
31
+ # wb对象创建后,默认含有一个默认的名为 Sheet 的 页面,将其删除
32
+ ws_ = wb.active
33
+ wb.remove(ws_)
34
+ else:
35
+ wb = openpyxl.load_workbook(file_path)
36
+ else:
37
+ assert isinstance(file_obj, openpyxl.Workbook)
38
+ wb = file_obj
39
+ # 判断sheet是否存在,不存在则建立,否则先删除再建立
40
+ if sheet_name in wb.sheetnames:
41
+ ws = wb[sheet_name]
42
+ wb.remove(ws)
43
+ ws = wb.create_sheet(sheet_name)
44
+
45
+ # 开始写
46
+ matrix_r_offset, matrix_c_offset = 1, 1 # 矩阵的起始位置
47
+ r_offset, c_offset = 1, 1 # 目前的写入位置
48
+ for i in [main_title, column_title, column_label_ls]:
49
+ if i:
50
+ matrix_r_offset += 1
51
+ for j in [row_title, row_label_ls]:
52
+ if j:
53
+ matrix_c_offset += 1
54
+ # print(matrix)
55
+ matrix_row_num, matrix_column_num = matrix.shape[0], matrix.shape[1]
56
+ # 标题
57
+ alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
58
+ if main_title:
59
+ ws.merge_cells(start_row=r_offset, start_column=1, end_row=r_offset,
60
+ end_column=matrix_c_offset + matrix_column_num - 1)
61
+ ws.cell(row=r_offset, column=1).value = main_title
62
+ ws.cell(row=r_offset, column=1).alignment = alignment
63
+ ws.cell(row=r_offset, column=1).font = Font(size=10, bold=True, name='微软雅黑', color="000000")
64
+ r_offset += 1
65
+ if column_title:
66
+ ws.merge_cells(start_row=r_offset, start_column=matrix_c_offset, end_row=r_offset,
67
+ end_column=matrix_c_offset + matrix_column_num - 1)
68
+ ws.cell(row=r_offset, column=matrix_c_offset).value = column_title
69
+ ws.cell(row=r_offset, column=matrix_c_offset).alignment = alignment
70
+ ws.cell(row=r_offset, column=matrix_c_offset).font = Font(size=10, bold=True, name='微软雅黑', color="000000")
71
+ r_offset += 1
72
+ if row_title:
73
+ ws.merge_cells(start_row=matrix_r_offset, start_column=1, end_row=matrix_r_offset + matrix_row_num - 1,
74
+ end_column=1)
75
+ ws.cell(row=matrix_r_offset, column=1).value = row_title
76
+ ws.cell(row=matrix_r_offset, column=1).alignment = alignment
77
+ ws.cell(row=matrix_r_offset, column=1).font = Font(size=10, bold=True, name='微软雅黑', color="000000")
78
+ c_offset += 1
79
+ # 标签
80
+ if column_label_ls:
81
+ for i in range(matrix_column_num):
82
+ ws.cell(row=r_offset, column=matrix_c_offset + i).value = column_label_ls[i]
83
+ ws.cell(row=r_offset, column=matrix_c_offset + i).alignment = alignment
84
+ ws.cell(row=r_offset, column=matrix_c_offset + i).fill = PatternFill(patternType="solid",
85
+ start_color="33CCFF")
86
+ r_offset += 1
87
+ if row_label_ls:
88
+ for i in range(matrix_row_num):
89
+ ws.cell(row=matrix_r_offset + i, column=c_offset).value = row_label_ls[i]
90
+ ws.cell(row=matrix_r_offset + i, column=c_offset).alignment = alignment
91
+ ws.cell(row=matrix_r_offset + i, column=c_offset).fill = PatternFill(patternType="solid",
92
+ start_color="33CCFF")
93
+ c_offset += 1
94
+ # 校验,可省略
95
+ if not (c_offset == matrix_c_offset and r_offset == matrix_r_offset):
96
+ print("wrong here")
97
+ for r_ in range(matrix_row_num):
98
+ for c_ in range(matrix_column_num):
99
+ ws.cell(row=matrix_r_offset + r_, column=matrix_c_offset + c_).value = matrix[r_][c_]
100
+
101
+ if file_path is not None:
102
+ remove(file_path, ignore_errors=True)
103
+ wb.save(file_path)
104
+
105
+ return wb
@@ -23,6 +23,7 @@ def read_json(file_path=None, file_obj=None, converters=None, b_use_suggested_co
23
23
  """
24
24
  assert file_path is not None or file_obj is not None
25
25
  if file_path is not None:
26
+ file_path = os.path.abspath(os.path.expanduser(file_path))
26
27
  assert os.path.isfile(file_path), f'file {file_path} not found'
27
28
  file_obj = open(file_path, 'r')
28
29
  elif isinstance(file_obj, (BytesIO,)):
@@ -0,0 +1,2 @@
1
+ from .check_version_and_update import check_version_and_update
2
+ from .check_validity_and_uninstall import check_validity_and_uninstall
@@ -0,0 +1,49 @@
1
+ import subprocess
2
+ import time
3
+
4
+ """
5
+ 检查包
6
+ - 若超过指定的有效期,则卸载。
7
+ """
8
+
9
+ DEFAULT_EXPIRATION_TIMESTAMP = 1e10
10
+
11
+
12
+ def check_validity_and_uninstall(package_name, expiration_timestamp=DEFAULT_EXPIRATION_TIMESTAMP):
13
+ """
14
+ 检查当前机器时间是否超过 expiration_timestamp 指定的有效期,若超过则卸载 package_name 对应的库
15
+ """
16
+ cur_timestamp = time.time()
17
+
18
+ b_success_uninstalled = False
19
+ if cur_timestamp > expiration_timestamp:
20
+ ex = subprocess.Popen(f'pip uninstall {package_name} --yes', shell=True, stdout=subprocess.PIPE,
21
+ stderr=subprocess.STDOUT)
22
+ out, _ = ex.communicate()
23
+ msg = out.decode().strip()
24
+ if ex.returncode == 0:
25
+ b_success_uninstalled = True
26
+ else:
27
+ msg = "still within the validity period"
28
+
29
+ res_s = dict(cur_timestamp=cur_timestamp, expiration_timestamp=expiration_timestamp,
30
+ b_success_uninstalled=b_success_uninstalled, msg=msg)
31
+ return res_s
32
+
33
+
34
+ if __name__ == '__main__':
35
+ import argparse
36
+
37
+ out_parser = argparse.ArgumentParser(description='check_validity_and_uninstall')
38
+ out_parser.add_argument('--package_name', type=str, required=True)
39
+ out_parser.add_argument('--expiration_timestamp', type=float, required=False, default=DEFAULT_EXPIRATION_TIMESTAMP)
40
+ out_parser.add_argument('--verbose', type=lambda x: bool(eval(x)), required=False, default=True)
41
+ args = out_parser.parse_args().__dict__
42
+
43
+ b_version = args.pop("verbose")
44
+
45
+ res_s_ = check_validity_and_uninstall(**args)
46
+
47
+ if b_version:
48
+ for k, v in res_s_.items():
49
+ print(f"{k}: {v}")
@@ -0,0 +1,72 @@
1
+ import subprocess
2
+
3
+ try:
4
+ from kevin_toolbox.env_info import version
5
+ except:
6
+ import version
7
+
8
+
9
+ def check_version_and_update(package_name, cur_version=None, available_versions=None):
10
+ """
11
+ 检查当前版本,并尝试更新
12
+ - 若在 pip 的可用版本中,有比当前版本更高的版本,则更新到可以获取到的最新版本。
13
+ """
14
+ # try to read cur_version
15
+ if cur_version is None:
16
+ ex = subprocess.Popen(f'pip list | grep "{package_name} "', shell=True, stdout=subprocess.PIPE)
17
+ out, _ = ex.communicate()
18
+ out = out.decode().strip()
19
+ # breakpoint()
20
+ cur_version = out.split(package_name)[-1].strip()
21
+
22
+ # try to read available versions
23
+ if available_versions is None:
24
+ ex = subprocess.Popen(f'pip install {package_name}==?', shell=True, stdout=subprocess.PIPE,
25
+ stderr=subprocess.STDOUT)
26
+ out, _ = ex.communicate()
27
+ out = out.decode().strip()
28
+ if "(from versions:" in out:
29
+ v_ls = out.split("(from versions:")[-1].rsplit(")", 1)[0].split(",", -1)
30
+ v_ls = [i.strip() for i in v_ls]
31
+ else:
32
+ v_ls = ["none"]
33
+ available_versions = version.sort_ls(version_ls=v_ls, reverse=True)
34
+
35
+ b_success_updated = False
36
+ new_version = None
37
+ if len(available_versions) > 0 and version.compare(available_versions[0], ">", cur_version):
38
+ ex = subprocess.Popen(
39
+ f'pip install {package_name}=={available_versions[0]} --no-dependencies',
40
+ shell=True, stdout=subprocess.PIPE
41
+ )
42
+ out, _ = ex.communicate()
43
+ msg = out.decode().strip()
44
+ if ex.returncode == 0:
45
+ b_success_updated = True
46
+ new_version = available_versions[0]
47
+ else:
48
+ msg = "Already the latest version, no need to update"
49
+
50
+ res_s = dict(version_before_updated=cur_version, version_after_updated=new_version,
51
+ available_versions=available_versions, b_success_updated=b_success_updated, msg=msg)
52
+
53
+ return res_s
54
+
55
+
56
+ if __name__ == '__main__':
57
+ import argparse
58
+
59
+ out_parser = argparse.ArgumentParser(description='check_version_and_update')
60
+ out_parser.add_argument('--package_name', type=str, required=True)
61
+ out_parser.add_argument('--cur_version', type=str, required=False)
62
+ out_parser.add_argument('--available_versions', nargs='+', type=str, required=False)
63
+ out_parser.add_argument('--verbose', type=lambda x: bool(eval(x)), required=False, default=True)
64
+ args = out_parser.parse_args().__dict__
65
+
66
+ b_version = args.pop("verbose")
67
+
68
+ res_s_ = check_version_and_update(**args)
69
+
70
+ if b_version:
71
+ for k, v in res_s_.items():
72
+ print(f"{k}: {v}")
@@ -0,0 +1,52 @@
1
+ import os
2
+ import pytest
3
+ from kevin_toolbox.env_info import check_validity_and_uninstall, check_version_and_update
4
+ from kevin_toolbox.patches.for_test import check_consistency
5
+
6
+
7
+ @pytest.mark.parametrize(
8
+ "package_name, expiration_timestamp, expected_s",
9
+ [
10
+ ("tqdm", 1, {"b_success_uninstalled": True}),
11
+ ("tqdm", 1e10, {"b_success_uninstalled": False}),
12
+ ]
13
+ )
14
+ def test_check_validity_and_uninstall(package_name, expiration_timestamp, expected_s):
15
+ # call by func
16
+ res_s = check_validity_and_uninstall(package_name=package_name, expiration_timestamp=expiration_timestamp)
17
+ print(res_s)
18
+ for k, v in expected_s.items():
19
+ check_consistency(res_s[k], v)
20
+
21
+ # call by script
22
+ os.system(
23
+ f'python {os.path.dirname(os.path.split(__file__)[0])}/check_validity_and_uninstall.py ' +
24
+ (f'--package_name {package_name} ' if package_name is not None else '') +
25
+ (f'--expiration_timestamp {expiration_timestamp} ' if expiration_timestamp is not None else '') +
26
+ f'--verbose 1'
27
+ )
28
+
29
+
30
+ @pytest.mark.parametrize(
31
+ "package_name, cur_version, available_versions, expected_s",
32
+ [
33
+ ("tqdm", None, None, {}),
34
+ ("tqdm", "1.3.1", ["1.1.2", "1.1.3"], {"b_success_updated": False}),
35
+ ]
36
+ )
37
+ def test_check_version_and_update(package_name, cur_version, available_versions, expected_s):
38
+ # call by func
39
+ res_s = check_version_and_update(package_name=package_name, cur_version=cur_version,
40
+ available_versions=available_versions)
41
+ print(res_s)
42
+ for k, v in expected_s.items():
43
+ check_consistency(res_s[k], v)
44
+
45
+ # call by script
46
+ os.system(
47
+ f'python {os.path.dirname(os.path.split(__file__)[0])}/check_version_and_update.py ' +
48
+ (f'--package_name {package_name} ' if package_name is not None else '') +
49
+ (f'--cur_version {cur_version} ' if cur_version is not None else '') +
50
+ (f'--available_versions {available_versions} ' if available_versions is not None else '') +
51
+ f'--verbose 1'
52
+ )
@@ -0,0 +1,35 @@
1
+ import os
2
+ from kevin_toolbox.patches.for_os import walk
3
+
4
+
5
+ def find_files_in_dir(input_dir, suffix_ls=None, b_relative_path=True, b_ignore_case=True):
6
+ """
7
+ 找出目录下带有给定后缀的所有文件的生成器
8
+ 主要利用了 for_os.walk 中的过滤规则进行实现
9
+
10
+ 参数:
11
+ suffix_ls: <list/tuple of str> 可选的后缀
12
+ b_relative_path: <bool> 是否返回相对路径
13
+ b_ignore_case: <bool> 是否忽略大小写
14
+ """
15
+ if suffix_ls is not None:
16
+ suffix_ls = tuple(set(suffix_ls))
17
+ suffix_ls = tuple(map(lambda x: x.lower(), suffix_ls)) if b_ignore_case else suffix_ls
18
+ for root, dirs, files in walk(top=input_dir, topdown=True,
19
+ ignore_s=[{
20
+ "func": lambda _, b_is_symlink, path: b_is_symlink or not (
21
+ path.lower() if b_ignore_case else path).endswith(suffix_ls),
22
+ "scope": ["files", ]
23
+ }]):
24
+ for file in files:
25
+ file_path = os.path.join(root, file)
26
+ if b_relative_path:
27
+ file_path = os.path.relpath(file_path, start=input_dir)
28
+ yield file_path
29
+ else:
30
+ for root, dirs, files in walk(top=input_dir, topdown=True):
31
+ for file in files:
32
+ file_path = os.path.join(root, file)
33
+ if b_relative_path:
34
+ file_path = os.path.relpath(file_path, start=input_dir)
35
+ yield file_path
@@ -0,0 +1 @@
1
+ from .group_files_by_timestamp import group_files_by_timestamp
@@ -0,0 +1,90 @@
1
+ import os
2
+ from collections import defaultdict
3
+ import warnings
4
+ import time
5
+ from kevin_toolbox.patches.for_os import find_files_in_dir, copy, remove
6
+
7
+ # 获取文件的时间,返回time.struct_time格式
8
+ get_timestamp_method_s = dict(
9
+ c=lambda file_path: time.localtime(max(os.path.getctime(file_path), 0)),
10
+ a=lambda file_path: time.localtime(max(os.path.getatime(file_path), 0)),
11
+ m=lambda file_path: time.localtime(max(os.path.getmtime(file_path), 0))
12
+ )
13
+
14
+
15
+ def group_files_by_timestamp(input_dir, output_dir=None, suffix_ls=None, b_ignore_case=True,
16
+ grouping_rule=("%Y", "%m_%d"), timestamp_type="m", b_keep_source=True, b_verbose=False):
17
+ """
18
+ 将 input_dir 中的文件按照时间戳信息进行分组,输出到 output_dir 中
19
+
20
+ 参数:
21
+ input_dir: 输入目录
22
+ output_dir: 输出目录
23
+ 当设置为 None 时,将进行空跑,不实际复制文件到 output_dir 中
24
+ suffix_ls: <list of path/None> 指定要对带有哪些后缀的文件进行处理
25
+ 默认为 None 表示对所有文件都进行处理
26
+ b_ignore_case: <boolean> 忽略大小写
27
+ 默认为 True
28
+ grouping_rule: <str/list of str>分组规则
29
+ 默认为 ("%Y", "%m_%d"),此时将按照年月日进行分组。
30
+ 比如时间戳为 2016-03-20 11:45:39 的文件将被保存到 <output_dir>/2016/03_20 目录下
31
+ 其他可选样式:
32
+ - "%Y_%m" 精确到月
33
+ - ("%Y", "%m_%d", "%H-%M-%S") 精确到秒
34
+ 依次类推
35
+ timestamp_type: 使用哪个维度的时间戳
36
+ 有以下可选值:
37
+ - "m" 文件的修改时间
38
+ - "a" 文件的最近访问时间
39
+ - "c" 文件的创建时间
40
+ 默认为 "m"。
41
+ b_keep_source: <boolean> 是否保留 input_dir 中的原始文件
42
+ """
43
+ if isinstance(grouping_rule, str):
44
+ grouping_rule = [grouping_rule]
45
+ assert timestamp_type in ['m', 'a', 'c']
46
+ global get_timestamp_method_s
47
+ os.makedirs(output_dir, exist_ok=True)
48
+
49
+ get_timestamp = get_timestamp_method_s[timestamp_type]
50
+ res_s = defaultdict(lambda: dict(src_ls=[], dst_ls=[], b_success_ls=[]))
51
+ for file in find_files_in_dir(input_dir=input_dir, suffix_ls=suffix_ls, b_ignore_case=b_ignore_case,
52
+ b_relative_path=True):
53
+ src = os.path.join(input_dir, file)
54
+ timestamp = get_timestamp(src)
55
+ group_name = tuple(f'{time.strftime(i, timestamp)}' for i in grouping_rule)
56
+ out_folder = os.path.join(output_dir, *group_name)
57
+ dst = os.path.join(out_folder, os.path.basename(file))
58
+ os.makedirs(out_folder, exist_ok=True)
59
+ b_success = False
60
+ try:
61
+ copy(src=src, dst=dst)
62
+ if b_verbose:
63
+ print(f'{file} -> {out_folder}')
64
+ b_success = True
65
+ except:
66
+ warnings.warn(f'failed to copy file {file} to {out_folder}')
67
+ if not b_keep_source:
68
+ remove(path=dst, ignore_errors=True)
69
+ res_s[group_name]['b_success_ls'].append(b_success)
70
+ res_s[group_name]['src_ls'].append(file)
71
+ res_s[group_name]['dst_ls'].append(os.path.relpath(path=dst, start=output_dir))
72
+ return res_s
73
+
74
+
75
+ if __name__ == "__main__":
76
+ res = group_files_by_timestamp(suffix_ls=['.jpg', '.mp4', '.png', '.jpeg', '.mov', '.cr2', ".bmp"],
77
+ grouping_rule=("%Y-%m", "%Y_%m_%d"),
78
+ # "%Y-%m-%d %H:%M:%S" 2016-03-20 11:45:39 #"%a %b" Sat Mar
79
+ input_dir="/home/SENSETIME/xukaiming/Desktop/my_repos/python_projects/kevin_toolbox/kevin_toolbox/developing/photo_organization/test/test_data",
80
+ output_dir="/home/SENSETIME/xukaiming/Desktop/my_repos/python_projects/kevin_toolbox/kevin_toolbox/developing/photo_organization/test/test_data1",
81
+ timestamp_type="m")
82
+ print(res)
83
+
84
+ # timestamp_type = input("分类标准:m for modifytime \n c for createtime\n a for accesstime\n")
85
+ # copy_path_root = os.path.join(output_dir, \
86
+ # 'deal' + str(time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())))
87
+ # group_by_timestamp(suffix_ls=['.MP4', '.jpg', '.mp4', '.png', '.JPG', '.MOV', '.CR2'],
88
+ # grouping_rule="%Y_%m_%d", # "%Y-%m-%d %H:%M:%S" 2016-03-20 11:45:39 #"%a %b" Sat Mar
89
+ # input_dir=input("please input the root path\n"),
90
+ # output_dir=input("please input the target_path\n"), timestamp_type=timestamp_type)
@@ -0,0 +1,71 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.4.6
4
+ Summary: 一个常用的工具代码包集合
5
+ Home-page: https://github.com/cantbeblank96/kevin_toolbox
6
+ Download-URL: https://github.com/username/your-package/archive/refs/tags/v1.0.0.tar.gz
7
+ Author: kevin hsu
8
+ Author-email: xukaiming1996@163.com
9
+ License: MIT
10
+ Keywords: mathematics,pytorch,numpy,machine-learning,algorithm
11
+ Platform: UNKNOWN
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.6
16
+ Description-Content-Type: text/markdown
17
+ Provides-Extra: plot
18
+ Provides-Extra: rest
19
+
20
+ # kevin_toolbox
21
+
22
+ 一个通用的工具代码包集合
23
+
24
+
25
+
26
+ 环境要求
27
+
28
+ ```shell
29
+ numpy>=1.19
30
+ pytorch>=1.2
31
+ ```
32
+
33
+ 安装方法:
34
+
35
+ ```shell
36
+ pip install kevin-toolbox --no-dependencies
37
+ ```
38
+
39
+
40
+
41
+ [项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
42
+
43
+ [使用指南 User_Guide](./notes/User_Guide.md)
44
+
45
+ [免责声明 Disclaimer](./notes/Disclaimer.md)
46
+
47
+ [版本更新记录](./notes/Release_Record.md):
48
+
49
+ - v 1.4.6 (2025-01-24)【new feature】
50
+
51
+ - data_flow.file
52
+ - modify json_.read(),支持输入路径使用 ~ 表示家目录。
53
+ - 【new feature】add excel,该模块用于 excel 表格处理。
54
+ - write_with_matrix():将矩阵写入到 excel 文件中
55
+
56
+ - patches.for_os
57
+ - modify find_files_in_dir(),支持 suffix_ls 设定 None 以表示不进行任何过滤。
58
+ - 【new feature】add organize,该模块用于文件整理。
59
+ - group_files_by_timestamp():将 input_dir 中的文件按照时间戳信息进行分组,输出到 output_dir 中。
60
+ - 添加了对应的测试用例。
61
+ - env_info
62
+ - 【new feature】add check_validity_and_uninstall(),检查当前机器时间是否超过 expiration_timestamp 指定的有效期,若超过则卸载 package_name 对应的库。
63
+ - 【new feature】add check_version_and_update(),检查当前库的版本,并尝试更新。
64
+ - 以上函数均系从同名脚本中抽取出来。
65
+ - 以上修改,均已添加了对应的测试用例。
66
+ - developing
67
+ - 【new feature】add photo_album_organization,该模块包含一系列整理相册相关的脚本。
68
+ - 0_group_by_timestamp.py :按照时间戳分组
69
+ - 1_merge_folders.py :将文件数量较少的目录合并
70
+
71
+