kevin-toolbox-dev 1.4.7__tar.gz → 1.4.8__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 (396) hide show
  1. kevin-toolbox-dev-1.4.8/PKG-INFO +81 -0
  2. kevin-toolbox-dev-1.4.8/README.md +60 -0
  3. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/__init__.py +2 -2
  4. {kevin-toolbox-dev-1.4.7/kevin_toolbox/developing → kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm}/decorator/__init__.py +2 -1
  5. kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm/decorator/retry.py +62 -0
  6. kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm/registration/__init__.py +2 -0
  7. kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm/registration/serializer_for_registry_execution.py +82 -0
  8. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +1 -1
  9. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/variable_/env_vars_parser.py +17 -2
  10. kevin-toolbox-dev-1.4.8/kevin_toolbox/nested_dict_list/serializer/variable.py +20 -0
  11. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/write.py +2 -0
  12. kevin-toolbox-dev-1.4.8/kevin_toolbox/network/__init__.py +10 -0
  13. kevin-toolbox-dev-1.4.8/kevin_toolbox/network/download_file.py +120 -0
  14. kevin-toolbox-dev-1.4.8/kevin_toolbox/network/fetch_content.py +55 -0
  15. kevin-toolbox-dev-1.4.8/kevin_toolbox/network/fetch_metadata.py +64 -0
  16. kevin-toolbox-dev-1.4.8/kevin_toolbox/network/get_response.py +50 -0
  17. kevin-toolbox-dev-1.4.8/kevin_toolbox/network/variable.py +6 -0
  18. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_logging/build_logger.py +1 -1
  19. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +51 -0
  20. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +95 -0
  21. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +131 -0
  22. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +114 -0
  23. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_from_record.py +21 -0
  24. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +107 -0
  25. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +102 -0
  26. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +97 -0
  27. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/__init__.py +3 -0
  28. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/get_output_path.py +15 -0
  29. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/save_plot.py +11 -0
  30. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/save_record.py +34 -0
  31. kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/variable.py +20 -0
  32. kevin-toolbox-dev-1.4.8/kevin_toolbox_dev.egg-info/PKG-INFO +81 -0
  33. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/SOURCES.txt +16 -2
  34. kevin-toolbox-dev-1.4.7/PKG-INFO +0 -64
  35. kevin-toolbox-dev-1.4.7/README.md +0 -43
  36. kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -1
  37. kevin-toolbox-dev-1.4.7/kevin_toolbox/nested_dict_list/serializer/variable.py +0 -8
  38. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +0 -6
  39. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +0 -54
  40. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +0 -84
  41. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +0 -65
  42. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +0 -67
  43. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +0 -53
  44. kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +0 -54
  45. kevin-toolbox-dev-1.4.7/kevin_toolbox_dev.egg-info/PKG-INFO +0 -64
  46. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/__init__.py +0 -0
  47. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
  48. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +0 -0
  49. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +0 -0
  50. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/cache_base.py +0 -0
  51. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/memo_cache.py +0 -0
  52. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +0 -0
  53. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +0 -0
  54. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/fifo_strategy.py +0 -0
  55. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lfu_strategy.py +0 -0
  56. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lru_strategy.py +0 -0
  57. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lst_strategy.py +0 -0
  58. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/strategy_base.py +0 -0
  59. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/test/__init__.py +0 -0
  60. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_builder.py +0 -0
  61. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_manager.py +0 -0
  62. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_strategy.py +0 -0
  63. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +0 -0
  64. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
  65. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
  66. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
  67. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
  68. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
  69. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
  70. {kevin-toolbox-dev-1.4.7/kevin_toolbox/developing → kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm}/decorator/restore_original_work_path.py +0 -0
  71. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
  72. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
  73. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
  74. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
  75. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
  76. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
  77. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
  78. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
  79. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
  80. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
  81. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
  82. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
  83. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
  84. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +0 -0
  85. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_process_execute.py +0 -0
  86. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -0
  87. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/utils/__init__.py +0 -0
  88. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/utils/wrapper_with_timeout_1.py +0 -0
  89. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/utils/wrapper_with_timeout_2.py +0 -0
  90. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
  91. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
  92. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +0 -0
  93. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
  94. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
  95. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
  96. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
  97. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
  98. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
  99. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
  100. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +0 -0
  101. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +0 -0
  102. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
  103. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
  104. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
  105. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +0 -0
  106. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +0 -0
  107. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
  108. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
  109. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
  110. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/dangerous/__init__.py +0 -0
  111. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
  112. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/__init__.py +0 -0
  113. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/__init__.py +0 -0
  114. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
  115. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/cache/test/__init__.py +0 -0
  116. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/cache/test/test_cache_manager_for_iterator.py +0 -0
  117. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
  118. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
  119. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
  120. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
  121. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/__init__.py +0 -0
  122. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/excel/__init__.py +0 -0
  123. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/excel/write_excel_with_matrix.py +0 -0
  124. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
  125. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
  126. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
  127. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
  128. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
  129. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/escape_tuple_and_set.py +0 -0
  130. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
  131. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
  132. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py +0 -0
  133. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
  134. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
  135. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
  136. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
  137. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
  138. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +0 -0
  139. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
  140. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
  141. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
  142. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
  143. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +0 -0
  144. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
  145. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
  146. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py +0 -0
  147. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
  148. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/__init__.py +0 -0
  149. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
  150. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/link/__init__.py +0 -0
  151. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/link/find_links.py +0 -0
  152. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/link/generate_link.py +0 -0
  153. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/__init__.py +0 -0
  154. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/convert/__init__.py +0 -0
  155. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/convert/complete_to_matrix.py +0 -0
  156. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/convert/matrix_to_complete.py +0 -0
  157. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/convert_format.py +0 -0
  158. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/find_tables.py +0 -0
  159. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/generate_table.py +0 -0
  160. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/get_format.py +0 -0
  161. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/padding_misaligned_values.py +0 -0
  162. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/variable.py +0 -0
  163. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/utils/__init__.py +0 -0
  164. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/utils/save_images_in_ndl.py +0 -0
  165. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/__init__.py +0 -0
  166. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
  167. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
  168. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
  169. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
  170. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
  171. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
  172. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
  173. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
  174. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
  175. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
  176. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
  177. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
  178. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
  179. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
  180. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/__init__.py +0 -0
  181. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
  182. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
  183. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
  184. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
  185. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/test.py +0 -0
  186. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/__init__.py +0 -0
  187. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
  188. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
  189. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/__init__.py +0 -0
  190. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/test_check_.py +0 -0
  191. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/test_variable_.py +0 -0
  192. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/test_version.py +0 -0
  193. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/variable_/__init__.py +0 -0
  194. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/__init__.py +0 -0
  195. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/compare_version.py +0 -0
  196. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/parse_version.py +0 -0
  197. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
  198. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/__init__.py +0 -0
  199. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
  200. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
  201. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
  202. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
  203. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
  204. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
  205. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
  206. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
  207. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
  208. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
  209. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
  210. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
  211. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/__init__.py +0 -0
  212. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
  213. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
  214. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
  215. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
  216. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
  217. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
  218. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
  219. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
  220. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
  221. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
  222. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
  223. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
  224. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
  225. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
  226. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
  227. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
  228. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
  229. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
  230. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
  231. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
  232. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
  233. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
  234. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
  235. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
  236. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
  237. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
  238. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
  239. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
  240. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/__init__.py +0 -0
  241. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/__init__.py +0 -0
  242. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
  243. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
  244. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
  245. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
  246. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
  247. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
  248. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
  249. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
  250. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
  251. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
  252. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
  253. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
  254. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
  255. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
  256. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
  257. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
  258. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
  259. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
  260. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
  261. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
  262. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/__init__.py +0 -0
  263. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/cache.py +0 -0
  264. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
  265. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
  266. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
  267. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
  268. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
  269. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
  270. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
  271. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/__init__.py +0 -0
  272. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
  273. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
  274. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
  275. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
  276. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
  277. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/__init__.py +0 -0
  278. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
  279. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
  280. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
  281. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
  282. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/split_integer_most_evenly.py +0 -0
  283. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
  284. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
  285. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
  286. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
  287. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
  288. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
  289. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
  290. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
  291. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
  292. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
  293. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/__init__.py +0 -0
  294. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
  295. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
  296. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
  297. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
  298. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
  299. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
  300. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
  301. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
  302. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
  303. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
  304. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
  305. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -0
  306. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/read.py +0 -0
  307. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py +0 -0
  308. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/set_default.py +0 -0
  309. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/set_value.py +0 -0
  310. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
  311. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +0 -0
  312. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
  313. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
  314. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +0 -0
  315. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
  316. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py +0 -0
  317. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/__init__.py +0 -0
  318. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_logging/__init__.py +0 -0
  319. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
  320. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
  321. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
  322. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
  323. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/clear_border_of_axes.py +0 -0
  324. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/__init__.py +0 -0
  325. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/color_format.py +0 -0
  326. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/convert_format.py +0 -0
  327. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/generate_color_list.py +0 -0
  328. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/get_format.py +0 -0
  329. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
  330. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
  331. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
  332. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/entropy.py +0 -0
  333. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
  334. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
  335. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/__init__.py +0 -0
  336. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/get_rng.py +0 -0
  337. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/get_rng_state.py +0 -0
  338. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/set_rng_state.py +0 -0
  339. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +0 -0
  340. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +0 -0
  341. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/variable.py +0 -0
  342. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
  343. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/build_sampler.py +0 -0
  344. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/build_storage.py +0 -0
  345. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/build_study.py +0 -0
  346. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/copy_study.py +0 -0
  347. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
  348. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/__init__.py +0 -0
  349. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +0 -0
  350. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +0 -0
  351. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +0 -0
  352. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +0 -0
  353. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +0 -0
  354. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +0 -0
  355. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/__init__.py +0 -0
  356. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/copy.py +0 -0
  357. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/find_files_in_dir.py +0 -0
  358. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/organize/__init__.py +0 -0
  359. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/organize/group_files_by_timestamp.py +0 -0
  360. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/pack.py +0 -0
  361. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/path/__init__.py +0 -0
  362. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/path/find_illegal_chars.py +0 -0
  363. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +0 -0
  364. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/remove.py +0 -0
  365. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/unpack.py +0 -0
  366. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/walk.py +0 -0
  367. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/__init__.py +0 -0
  368. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/__init__.py +0 -0
  369. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/show.py +0 -0
  370. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/show_image.py +0 -0
  371. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/show_table.py +0 -0
  372. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_test/__init__.py +0 -0
  373. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
  374. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
  375. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
  376. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
  377. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
  378. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
  379. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
  380. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
  381. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
  382. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
  383. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
  384. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
  385. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
  386. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
  387. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
  388. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
  389. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/utils/__init__.py +0 -0
  390. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/utils/variable.py +0 -0
  391. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
  392. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
  393. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
  394. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/pyproject.toml +0 -0
  395. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/setup.cfg +0 -0
  396. {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/setup.py +0 -0
@@ -0,0 +1,81 @@
1
+ Metadata-Version: 2.1
2
+ Name: kevin-toolbox-dev
3
+ Version: 1.4.8
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.8 (2025-03-06)【new feature】【refactor】
50
+
51
+ - 【new feature】network,新增网络模块。
52
+ - 该模块包含网络访问相关的函数:
53
+ - get_response(),获取 url 的响应。
54
+ - fetch_metadata(),从 URL/response 中获取文件名、后缀(扩展名)、大小等元信息。
55
+ - fetch_content(),从 URL/response 中获取内容。
56
+ - download_file(),下载文件。
57
+ - env_info
58
+ - modify Env_Vars_Parser.parse(),新增 default 参数用于支持解释失败时候返回默认值。
59
+ - computer_science.algorithm
60
+ - 【refactor】【new feature】decorator,从 developing 中将装饰器相关模块整合到 cs.algorithm 中。
61
+ - 该目录目前包含以下函数:
62
+ - retry(),在函数执行失败时,等待一定时间后重试多次。
63
+ - restore_original_work_path(),在运行函数 func 前备份当前工作目录,并在函数运行结束后还原到原始工作目录。
64
+ - registration
65
+ - 【new feature】add Serializer_for_Registry_Execution,用于对基于 Registry 中成员构建的执行过程进行序列化和反序列化操作。
66
+ - nested_dict_list.serializer
67
+ - modify write(),增加返回值,返回保存到的路径。
68
+ - patches.for_matplotlib
69
+ - 【new feature】add COMMON_CHARTS,增加该注册器用于管理 common_charts 模块中的方法。
70
+ - common_charts
71
+ - 为所有plot_xx函数增加了注释和测试用例。
72
+ - 为所有plot_xx函数增加以下参数:
73
+ - b_generate_record:是否保存函数参数为档案。
74
+ - 默认为 False,当设置为 True 时将会把函数参数保存成 [output_path].record.tar。
75
+ - 后续可以使用 plot_from_record() 函数或者 Serializer_for_Registry_Execution 读取该档案,并进行修改和重新绘制。
76
+ - 该参数仅在 output_dir 和 output_path 非 None 时起效。
77
+ - output_path:图片输出路径。
78
+ - 支持直接指定图片要保存的路径,在原有的通过 output_dir 和 title 自动生成路径的方式之外,提供了另一个指定的方式。
79
+ - 【new feature】add plot_from_record,从保存的档案 .record.tar 文件中恢复并绘制图像。
80
+
81
+
@@ -0,0 +1,60 @@
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.8 (2025-03-06)【new feature】【refactor】
31
+
32
+ - 【new feature】network,新增网络模块。
33
+ - 该模块包含网络访问相关的函数:
34
+ - get_response(),获取 url 的响应。
35
+ - fetch_metadata(),从 URL/response 中获取文件名、后缀(扩展名)、大小等元信息。
36
+ - fetch_content(),从 URL/response 中获取内容。
37
+ - download_file(),下载文件。
38
+ - env_info
39
+ - modify Env_Vars_Parser.parse(),新增 default 参数用于支持解释失败时候返回默认值。
40
+ - computer_science.algorithm
41
+ - 【refactor】【new feature】decorator,从 developing 中将装饰器相关模块整合到 cs.algorithm 中。
42
+ - 该目录目前包含以下函数:
43
+ - retry(),在函数执行失败时,等待一定时间后重试多次。
44
+ - restore_original_work_path(),在运行函数 func 前备份当前工作目录,并在函数运行结束后还原到原始工作目录。
45
+ - registration
46
+ - 【new feature】add Serializer_for_Registry_Execution,用于对基于 Registry 中成员构建的执行过程进行序列化和反序列化操作。
47
+ - nested_dict_list.serializer
48
+ - modify write(),增加返回值,返回保存到的路径。
49
+ - patches.for_matplotlib
50
+ - 【new feature】add COMMON_CHARTS,增加该注册器用于管理 common_charts 模块中的方法。
51
+ - common_charts
52
+ - 为所有plot_xx函数增加了注释和测试用例。
53
+ - 为所有plot_xx函数增加以下参数:
54
+ - b_generate_record:是否保存函数参数为档案。
55
+ - 默认为 False,当设置为 True 时将会把函数参数保存成 [output_path].record.tar。
56
+ - 后续可以使用 plot_from_record() 函数或者 Serializer_for_Registry_Execution 读取该档案,并进行修改和重新绘制。
57
+ - 该参数仅在 output_dir 和 output_path 非 None 时起效。
58
+ - output_path:图片输出路径。
59
+ - 支持直接指定图片要保存的路径,在原有的通过 output_dir 和 title 自动生成路径的方式之外,提供了另一个指定的方式。
60
+ - 【new feature】add plot_from_record,从保存的档案 .record.tar 文件中恢复并绘制图像。
@@ -1,4 +1,4 @@
1
- __version__ = "1.4.7"
1
+ __version__ = "1.4.8"
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 1755525740 --verbose 0'
15
+ f'--expiration_timestamp 1756803931 --verbose 0'
16
16
  )
@@ -1 +1,2 @@
1
- from .restore_original_work_path import restore_original_work_path
1
+ from .restore_original_work_path import restore_original_work_path
2
+ from .retry import retry
@@ -0,0 +1,62 @@
1
+ import time
2
+ import functools
3
+ from kevin_toolbox.patches.for_logging import build_logger
4
+
5
+ default_logger = build_logger(
6
+ name=":retry",
7
+ handler_ls=[
8
+ dict(target=None, level="INFO", formatter="%(name)s - %(levelname)s - %(message)s"),
9
+ ]
10
+ )
11
+
12
+
13
+ def retry(retries=3, delay=0.5, exceptions=(Exception,), logger=None):
14
+ """
15
+ 在函数执行失败时,等待一定时间后重试多次
16
+
17
+ 参数:
18
+ retries: <int> 重试次数
19
+ 默认重试3次
20
+ delay: <int/float> 每次重试前等待的秒数
21
+ 默认0.5秒
22
+ exceptions: <list> 捕获的异常类型
23
+ 默认捕获所有 Exception
24
+
25
+ 使用示例:
26
+ @retry(retries=5, delay=2)
27
+ def func():
28
+ ...
29
+ """
30
+ logger = default_logger if logger == "default" else logger
31
+
32
+ def decorator(func):
33
+ @functools.wraps(func)
34
+ def wrapper(*args, **kwargs):
35
+ last_exception = None
36
+ for attempt in range(1, retries + 1):
37
+ try:
38
+ return func(*args, **kwargs)
39
+ except exceptions as e:
40
+ last_exception = e
41
+ if logger is not None:
42
+ logger.info(f"第 {attempt} 次调用 {func.__name__} 失败\n\t异常:{e}\n\t等待 {delay} 秒后重试...")
43
+ time.sleep(delay)
44
+ # 如果所有重试均失败,则抛出最后一次捕获的异常
45
+ raise last_exception
46
+
47
+ return wrapper
48
+
49
+ return decorator
50
+
51
+
52
+ if __name__ == '__main__':
53
+ @retry(retries=2, delay=0.3, logger="default")
54
+ def func_(*args, **kwargs):
55
+ if args or kwargs:
56
+ return args, kwargs
57
+ else:
58
+ raise ValueError("no paras")
59
+
60
+
61
+ print(func_(123))
62
+ func_()
@@ -0,0 +1,2 @@
1
+ from .registry import Registry, UNIFIED_REGISTRY
2
+ from .serializer_for_registry_execution import Serializer_for_Registry_Execution, execution_serializer
@@ -0,0 +1,82 @@
1
+ from kevin_toolbox.nested_dict_list import serializer
2
+ from kevin_toolbox.computer_science.data_structure import Executor
3
+ from kevin_toolbox.computer_science.algorithm.registration import Registry
4
+
5
+
6
+ class Serializer_for_Registry_Execution:
7
+ """
8
+ 用于对基于 Registry 中成员构建的执行过程进行序列化和反序列化操作
9
+ 比如对于一个含有callable成员的 Registry,我们可以使用该 recorder 将其执行过程序列化保存下来,并在需要时恢复并执行
10
+
11
+ 工作流程:
12
+ recover() ---> executor ---> run to get result
13
+ ^
14
+ |
15
+ record(...) ---> self.record_s ---> save()
16
+ ^ |
17
+ | v
18
+ load() <--- record_file
19
+ """
20
+
21
+ def __init__(self):
22
+ self.record_s = None
23
+
24
+ def record(self, _name=None, _registry=None, *args, **kwargs):
25
+ """
26
+ 将参数保存到 record_s 中
27
+ """
28
+ return self.record_name(_name, _registry).record_paras(*args, **kwargs)
29
+
30
+ def record_name(self, _name, _registry):
31
+ assert isinstance(_registry, (Registry,))
32
+ assert callable(_registry.get(name=_name, default=None))
33
+ self.record_s = self.record_s or dict()
34
+ self.record_s["name"] = _name
35
+ self.record_s["registry_uid"] = _registry.uid
36
+ return self
37
+
38
+ def record_paras(self, *args, **kwargs):
39
+ self.record_s = self.record_s or dict()
40
+ self.record_s["args"] = args
41
+ self.record_s["kwargs"] = kwargs
42
+ return self
43
+
44
+ def save(self, output_dir=None, b_pack_into_tar=False, b_allow_overwrite=False, **kwargs):
45
+ """
46
+ 将 record_s 使用 ndl 持久化到文件中
47
+
48
+ 参数:
49
+ output_dir:
50
+ b_pack_into_tar:
51
+ b_allow_overwrite:
52
+ 其余未列出参数请参考 ndl.serializer.write 中的介绍,常用的有:
53
+ b_allow_overwrite
54
+ settings
55
+ 等。
56
+ """
57
+ assert self.record_s is not None
58
+ file_path = serializer.write(var=self.record_s, output_dir=output_dir, b_pack_into_tar=b_pack_into_tar,
59
+ b_allow_overwrite=b_allow_overwrite, **kwargs)
60
+ return file_path
61
+
62
+ def load(self, input_path):
63
+ """
64
+ 从文件中加载内容到 record_s
65
+ """
66
+ self.record_s = serializer.read(input_path=input_path)
67
+ return self
68
+
69
+ def recover(self, record_s=None):
70
+ """
71
+ 根据 record_s 中的信息,结合 registry 构建一个执行器并返回
72
+ """
73
+ record_s = record_s or self.record_s
74
+ assert record_s is not None
75
+
76
+ func = Registry(uid=record_s["registry_uid"]).get(name=record_s["name"], default=None)
77
+ assert callable(func)
78
+ executor = Executor(func=func, args=record_s["args"], kwargs=record_s["kwargs"])
79
+ return executor
80
+
81
+
82
+ execution_serializer = Serializer_for_Registry_Execution()
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import time
3
3
  import importlib.util
4
- from kevin_toolbox.developing.decorator import restore_original_work_path
4
+ from kevin_toolbox.computer_science.algorithm.decorator import restore_original_work_path
5
5
  from kevin_toolbox.computer_science.algorithm.cache_manager import Cache_Manager
6
6
 
7
7
  if importlib.util.find_spec("cPickle") is not None:
@@ -26,10 +26,24 @@ class Env_Vars_Parser:
26
26
  def __call__(self, *args, **kwargs):
27
27
  return self.parse(*args, **kwargs)
28
28
 
29
- def parse(self, text):
29
+ def parse(self, text, **kwargs):
30
30
  """
31
31
  解释并替换
32
+
33
+ 参数:
34
+ default: 默认之。
35
+ 当有设定时,若无法解释则返回该值。
36
+ 否则,若无法解释将报错。
32
37
  """
38
+ if "default" in kwargs:
39
+ try:
40
+ return self.__parse(text=text)
41
+ except:
42
+ return kwargs["default"]
43
+ else:
44
+ return self.__parse(text=text)
45
+
46
+ def __parse(self, text):
33
47
  temp_ls = []
34
48
  for it in self.split_string(text=text):
35
49
  if isinstance(it, str):
@@ -85,4 +99,5 @@ class Env_Vars_Parser:
85
99
 
86
100
  if __name__ == '__main__':
87
101
  env_vars_parser = Env_Vars_Parser()
88
- print(env_vars_parser.split_string("666/123${:VAR}/afasf/${/xxx.../xxx.json:111:222}336"))
102
+ # print(env_vars_parser.split_string("666/123${:VAR}/afasf/${/xxx.../xxx.json:111:222}336"))
103
+ print(env_vars_parser.parse("${KVT_PATCHES:for_matplotlib:common_charts:font_settings:for_non-windows-platform}"))
@@ -0,0 +1,20 @@
1
+ import os
2
+ from kevin_toolbox.computer_science.algorithm.registration import Registry
3
+
4
+ SERIALIZER_BACKEND = Registry(uid="SERIALIZER_BACKEND")
5
+
6
+ # 导入时的默认过滤规则
7
+ ignore_s = [
8
+ {
9
+ "func": lambda _, __, path: os.path.basename(path) in ["temp", "test", "__pycache__",
10
+ "_old_version"],
11
+ "scope": ["root", "dirs"]
12
+ },
13
+ ]
14
+
15
+ # 从 kevin_toolbox/nested_dict_list/serializer/backends 下收集被注册的 backend
16
+ SERIALIZER_BACKEND.collect_from_paths(
17
+ path_ls=[os.path.join(os.path.dirname(__file__), "backends"), ],
18
+ ignore_s=ignore_s,
19
+ b_execute_now=False
20
+ )
@@ -250,6 +250,8 @@ def write(var, output_dir, settings=None, traversal_mode=Traversal_Mode.BFS, b_p
250
250
  if not os.path.exists(tgt_path):
251
251
  for_os.copy(src=src_path, dst=tgt_path, remove_dst_if_exists=True)
252
252
 
253
+ return tgt_path
254
+
253
255
 
254
256
  def _judge_processed_or_not(processed_s, name):
255
257
  """
@@ -0,0 +1,10 @@
1
+ import urllib3
2
+ from urllib3.exceptions import InsecureRequestWarning
3
+
4
+ # 禁用不安全请求警告(例如当 verify=False 时)
5
+ urllib3.disable_warnings(InsecureRequestWarning)
6
+
7
+ from .get_response import get_response
8
+ from .fetch_metadata import fetch_metadata
9
+ from .fetch_content import fetch_content
10
+ from .download_file import download_file
@@ -0,0 +1,120 @@
1
+ import os
2
+ import time
3
+ from tqdm import tqdm
4
+ from kevin_toolbox.network import fetch_metadata, fetch_content, get_response
5
+ from kevin_toolbox.patches.for_os.path import replace_illegal_chars
6
+ from kevin_toolbox.patches import for_os
7
+ from kevin_toolbox.nested_dict_list import get_hash
8
+
9
+ default_option_func_s = {
10
+ "hash_name": lambda url, _, option_s: {"hash_name": get_hash(option_s["name"], length=12)},
11
+ "hash_url": lambda url, _, option_s: {"hash_url": get_hash(url, length=12)},
12
+ "timestamp": lambda *arg, **kwargs: {"timestamp": f'{time.time()}'},
13
+ "legalized_name": lambda url, _, option_s: {
14
+ "legalized_name": replace_illegal_chars(file_name=option_s["name"], b_is_path=False)}
15
+ }
16
+
17
+
18
+ def download_file(
19
+ output_dir, url=None, response=None, chunk_size=1024 * 10,
20
+ file_name=None, file_name_format="{legalized_name:.100}{suffix}", format_option_generate_func_ls=None,
21
+ b_allow_overwrite=False, b_display_progress=False, **kwargs
22
+ ):
23
+ """
24
+ 下载文件
25
+ 支持以下高级功能:
26
+ 1. 自动识别文件类型并命名。
27
+ 2. 多次重试。
28
+ 3. TODO:断点续传(待实现)。
29
+
30
+ 参数:
31
+ output_dir: <path> 文件保存的目录
32
+ url: <str> 下载的 URL 地址。
33
+ response: 响应。
34
+ 以上两个参数只需要指定其一即可,建议使用后者。
35
+ chunk_size: <int> 采用分块下载时,块的大小
36
+ 默认为 1024 * 10
37
+ file_name: <str> 文件名
38
+ 默认为 None,此时将根据 file_name_format 自动生成名字。
39
+ file_name_format: <str> 保存的文件的命名方式。
40
+ 基本结构为: '{<part_0>}...{<part_1>}...'
41
+ 其中 {} 内将根据 part 指定的选项进行自动填充。目前支持以下几种选项:
42
+ - "name" 文件名(不含后缀)。
43
+ - "suffix" 后缀。
44
+ - "timestamp" 下载的时间戳。
45
+ - "hash_name" 文件名的hash值。
46
+ - "legalized_name" 经过合法化处理的文件名(对其中特殊符号进行了替换)。
47
+ - "hash_url" url的hash值。
48
+ !!注意:
49
+ "name" 该选项由于其可能含有 : 和 / 等特殊符号,当以其作为文件名时,可能会引发错误。
50
+ 因此对于 windows 用户,请慎重使用该选项,对于 mac 和 linux 用户,同样也不建议使用该选项。
51
+ 相较而言,"legalized_name" 是一个更好的选择。
52
+ "hash_name" 和 "hash_url" 有极低但非0的可能会发生 hash 碰撞。
53
+ 综合而言:
54
+ 建议使用 "legalized_name" 和 "suffix" 以及 "timestamp" 的组合。
55
+ 高级设置:
56
+ 1. 如果想限制文件名中某部分的长度(避免文件名过长在某些系统下引发报错),应该如何做?
57
+ 本命名方式兼容 str.format() 语法,比如你可以通过 {name:.10} 来限制名字的长度不大于10个字符。
58
+ 2. 如果已有的选项无法满足你的需求,如何新增选项?
59
+ 本函数支持通过设置 format_option_generate_func_ls 来补充或者覆盖默认选项。
60
+ 默认值为:
61
+ '{legalized_name:.100}{suffix}'
62
+ format_option_generate_func_ls: <list of callable> 函数列表,将使用这些函数的结果来对 file_name_format 中的选项进行补充或者覆盖。
63
+ 函数需要接受 url, response, option_s(已有的选项键值对) 三个参数,并返回一个包含选项名和选项值的 dict。
64
+ 默认为 None
65
+ b_allow_overwrite: <boolean> 是否允许覆盖已有文件。
66
+ b_display_progress: <boolean> 显示进度条。
67
+
68
+
69
+ 返回:
70
+ 文件完整路径(下载成功)或空字符串(失败)
71
+ """
72
+ global default_option_func_s
73
+ assert url is not None or response is not None
74
+ if url is not None:
75
+ response = response or get_response(url=url, **kwargs)
76
+ assert response is not None
77
+ output_dir = os.path.expanduser(output_dir)
78
+ #
79
+ metadata_s = fetch_metadata(url=url, response=response, default_name="", default_suffix="")
80
+ if file_name is None:
81
+ option_s = metadata_s.copy()
82
+ for k, func in default_option_func_s.items():
83
+ if k in file_name_format:
84
+ option_s.update(func(url, response, option_s))
85
+ if isinstance(format_option_generate_func_ls, (list, tuple,)):
86
+ for func in format_option_generate_func_ls:
87
+ assert callable(func)
88
+ option_s.update(func(url, response, option_s))
89
+ file_name = file_name_format.format(**option_s)
90
+ #
91
+ os.makedirs(output_dir, exist_ok=True)
92
+ #
93
+ file_path = os.path.join(output_dir, file_name)
94
+ if os.path.exists(file_path):
95
+ if b_allow_overwrite:
96
+ for_os.remove(path=file_path, ignore_errors=True)
97
+ else:
98
+ raise FileExistsError(f"target {file_path} already exists")
99
+
100
+ if metadata_s["content_length"] and b_display_progress:
101
+ pbar = tqdm(total=metadata_s["content_length"], unit="B", unit_scale=True, desc="下载进度")
102
+ else:
103
+ pbar = None
104
+
105
+ with open(file_path, "wb") as f:
106
+ for chunk in fetch_content(response=response, chunk_size=chunk_size):
107
+ if chunk:
108
+ f.write(chunk)
109
+ if pbar is not None:
110
+ pbar.update(len(chunk))
111
+
112
+ return file_path
113
+
114
+
115
+ # 示例用法
116
+ if __name__ == "__main__":
117
+ url_ = "https://i.pinimg.com/736x/28/6a/b1/286ab1eb816dc59a1c72374c75645d80.jpg"
118
+ output_dir = r'./temp/123'
119
+ downloaded_file = download_file(url=url_, output_dir=output_dir, file_name="233.jpg", b_allow_overwrite=True,
120
+ b_display_progress=True, chunk_size=100)
@@ -0,0 +1,55 @@
1
+ import warnings
2
+ from kevin_toolbox.network import get_response
3
+
4
+
5
+ def fetch_content(url=None, response=None, decoding=None, chunk_size=None, **kwargs):
6
+ """
7
+ 从 URL/response 中获取内容
8
+
9
+ 参数:
10
+ url: <str> 请求的 URL 地址。
11
+ response: 响应。
12
+ 以上两个参数只需要指定其一即可,建议使用后者。
13
+ decoding: <str> 响应内容的解码方式
14
+ 默认为 None,返回原始的字节流。
15
+ 一些常用的可选值:
16
+ "utf-8"
17
+ chunk_size: <int> 采用分块方式读取内容时,块的大小
18
+ 默认为 None,此时不使用分块读取,而直接读取所有内容
19
+ 注意!当 chunk_size 非 None 时,decoding 将失效
20
+
21
+ 返回:
22
+ 当 chunk_size 为 None 时:
23
+ str: 请求成功后的响应内容。如果 decoding 为 None,则返回 bytes 类型数据。
24
+ 当 chunk_size 非 None 时:
25
+ 读取内容的生成器。
26
+ """
27
+ assert url is not None or response is not None
28
+ if url is not None:
29
+ response = response or get_response(url=url, **kwargs)
30
+ assert response is not None
31
+
32
+ if chunk_size is None:
33
+ content = response.data
34
+ if decoding:
35
+ content = content.decode(decoding)
36
+ return content
37
+ else:
38
+ if decoding:
39
+ warnings.warn(f'当 chunk_size 非 None 时,decoding 参数将失效。')
40
+ return __generator(response, chunk_size)
41
+
42
+
43
+ def __generator(response, chunk_size):
44
+ while True:
45
+ chunk = response.read(chunk_size)
46
+ if not chunk:
47
+ break
48
+ yield chunk
49
+
50
+
51
+ if __name__ == "__main__":
52
+ url_ = "https://i.pinimg.com/736x/28/6a/b1/286ab1eb816dc59a1c72374c75645d80.jpg" # "https://www.google.com/"
53
+ print(len(fetch_content(url=url_, decoding=None)))
54
+ for i, j in enumerate(fetch_content(url=url_, chunk_size=50000)):
55
+ print(i, len(j))
@@ -0,0 +1,64 @@
1
+ import os
2
+ import re
3
+ import time
4
+ import mimetypes
5
+ from urllib.parse import quote
6
+ from urllib.parse import urlsplit, unquote
7
+ from kevin_toolbox.network import get_response
8
+
9
+
10
+ def fetch_metadata(url=None, response=None, default_suffix=".bin", default_name=None, **kwargs):
11
+ """
12
+ 从 URL/response 中获取文件名、后缀(扩展名)、大小等元信息
13
+
14
+ 参数:
15
+ url: <str> 请求的 URL 地址。
16
+ response: 响应。
17
+ 以上两个参数建议同时指定。
18
+ default_suffix: <str> 默认后缀。
19
+ default_name: <str> 默认文件名。
20
+ 默认为 None,表示使用当前时间戳作为默认文件名。
21
+ 只有从 URL/response 中无法获取出 suffix 和 name 时才会使用上面的默认值作为填充
22
+
23
+ 返回:
24
+ dict with keys ['content_length', 'content_type', 'content_disp', 'suffix', 'name']
25
+ """
26
+ assert url is not None or response is not None
27
+ if url is not None:
28
+ response = response or get_response(url=url, **kwargs)
29
+ assert response is not None
30
+ default_name = f'{time.time()}' if default_name is None else default_name
31
+
32
+ metadata_s = {"content_length": None, "content_type": None, "content_disp": None, "suffix": None, "name": None}
33
+ name, suffix = None, None
34
+ # 尝试直接从url中获取文件名和后缀
35
+ if url is not None:
36
+ url = quote(url, safe='/:?=&')
37
+ basename = unquote(os.path.basename(urlsplit(url).path))
38
+ name, suffix = os.path.splitext(basename)
39
+ # 尝试从更加可信的响应头中获取文件名和后缀
40
+ content_length = response.headers.get("Content-Length", None)
41
+ metadata_s["content_length"] = int(content_length) if content_length and content_length.isdigit() else None
42
+ #
43
+ content_type = response.headers.get("Content-Type", None)
44
+ metadata_s["content_type"] = content_type
45
+ if content_type:
46
+ suffix = mimetypes.guess_extension(content_type.split(";")[0].strip()) or suffix
47
+ #
48
+ content_disp = response.headers.get("Content-Disposition", None)
49
+ metadata_s["content_disp"] = content_disp
50
+ if content_disp:
51
+ temp_ls = re.findall('filename="([^"]+)"', content_disp)
52
+ if temp_ls:
53
+ name, temp = os.path.splitext(temp_ls[0])
54
+ suffix = temp or suffix
55
+ metadata_s["name"] = name or default_name
56
+ metadata_s["suffix"] = suffix or default_suffix
57
+
58
+ return metadata_s
59
+
60
+
61
+ # 示例用法
62
+ if __name__ == "__main__":
63
+ url_ = "https://i.pinimg.com/736x/28/6a/b1/286ab1eb816dc59a1c72374c75645d80.jpg" # "https://www.google.com/"
64
+ print(fetch_metadata(url=url_))