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.
- kevin-toolbox-dev-1.4.8/PKG-INFO +81 -0
- kevin-toolbox-dev-1.4.8/README.md +60 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/__init__.py +2 -2
- {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
- kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm/decorator/retry.py +62 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm/registration/__init__.py +2 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/computer_science/algorithm/registration/serializer_for_registry_execution.py +82 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/variable_/env_vars_parser.py +17 -2
- kevin-toolbox-dev-1.4.8/kevin_toolbox/nested_dict_list/serializer/variable.py +20 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/write.py +2 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/network/__init__.py +10 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/network/download_file.py +120 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/network/fetch_content.py +55 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/network/fetch_metadata.py +64 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/network/get_response.py +50 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/network/variable.py +6 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_logging/build_logger.py +1 -1
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +51 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +95 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +131 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +114 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_from_record.py +21 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +107 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +102 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +97 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/__init__.py +3 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/get_output_path.py +15 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/save_plot.py +11 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/common_charts/utils/save_record.py +34 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox/patches/for_matplotlib/variable.py +20 -0
- kevin-toolbox-dev-1.4.8/kevin_toolbox_dev.egg-info/PKG-INFO +81 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/SOURCES.txt +16 -2
- kevin-toolbox-dev-1.4.7/PKG-INFO +0 -64
- kevin-toolbox-dev-1.4.7/README.md +0 -43
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -1
- kevin-toolbox-dev-1.4.7/kevin_toolbox/nested_dict_list/serializer/variable.py +0 -8
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +0 -6
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +0 -54
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +0 -84
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +0 -65
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +0 -67
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +0 -53
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +0 -54
- kevin-toolbox-dev-1.4.7/kevin_toolbox_dev.egg-info/PKG-INFO +0 -64
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/test/__init__.py +0 -0
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/dangerous/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/cache/test/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/excel/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/link/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/link/find_links.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/link/generate_link.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/convert/__init__.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/convert_format.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/find_tables.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/generate_table.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/get_format.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/table/variable.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/data_flow/file/markdown/utils/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/developing/test.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/test_check_.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/test_variable_.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/test/test_version.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/variable_/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/compare_version.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/parse_version.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
- {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
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/cache.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/math/utils/split_integer_most_evenly.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/serializer/read.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/set_default.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/set_value.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_logging/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/clear_border_of_axes.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/color_format.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/convert_format.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/generate_color_list.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_matplotlib/color/get_format.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/entropy.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/get_rng.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/get_rng_state.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/set_rng_state.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_numpy/random/variable.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/build_sampler.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/build_storage.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/build_study.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/copy_study.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/copy.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/find_files_in_dir.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/organize/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/pack.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/path/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/path/find_illegal_chars.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/remove.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/unpack.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_os/walk.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/show.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/show_image.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_streamlit/markdown/show_table.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
- {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
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox/utils/variable.py +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/pyproject.toml +0 -0
- {kevin-toolbox-dev-1.4.7 → kevin-toolbox-dev-1.4.8}/setup.cfg +0 -0
- {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.
|
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
|
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,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.
|
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_))
|