kevin-toolbox-dev 1.3.5__tar.gz → 1.3.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kevin-toolbox-dev-1.3.6/PKG-INFO +90 -0
- kevin-toolbox-dev-1.3.6/README.md +69 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/__init__.py +2 -2
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +1 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +218 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +1 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +2 -2
- kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +69 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +16 -4
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +5 -12
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +3 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py +27 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/write.py +3 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/__init__.py +3 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/find_tables.py +65 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/generate_table.py +19 -5
- kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/parse_table.py +135 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/save_images_in_ndl.py +81 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/data_flow/file/markdown/variable.py +17 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/read.py +1 -1
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/write.py +9 -2
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +6 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +54 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +60 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +65 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +61 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +53 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +54 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/__init__.py +2 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/find_files_in_dir.py +30 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/path/__init__.py +2 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/path/find_illegal_chars.py +47 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +49 -0
- kevin-toolbox-dev-1.3.6/kevin_toolbox_dev.egg-info/PKG-INFO +90 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/SOURCES.txt +18 -0
- kevin-toolbox-dev-1.3.5/PKG-INFO +0 -69
- kevin-toolbox-dev-1.3.5/README.md +0 -48
- kevin-toolbox-dev-1.3.5/kevin_toolbox_dev.egg-info/PKG-INFO +0 -69
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/cache_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/memo_cache.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/fifo_strategy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lfu_strategy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lru_strategy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lst_strategy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/strategy_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_builder.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_manager.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_strategy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/dangerous/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/cache/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/cache/test/test_cache_manager_for_iterator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/escape_tuple_and_set.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/generate_link.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/decorator/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/developing/test.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/test/test_version.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/compare_version.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/parse_version.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/cache.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/math/utils/split_integer_most_evenly.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/serializer/variable.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/set_default.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/set_value.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_logging/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_logging/build_logger.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_matplotlib/generate_color_list.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/entropy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/random/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/random/get_rng.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_numpy/random/variable.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/build_sampler.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/build_storage.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/build_study.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/copy_study.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/copy.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/pack.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/remove.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/unpack.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_os/walk.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_test/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/pyproject.toml +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/setup.cfg +0 -0
- {kevin-toolbox-dev-1.3.5 → kevin-toolbox-dev-1.3.6}/setup.py +0 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: kevin-toolbox-dev
|
3
|
+
Version: 1.3.6
|
4
|
+
Summary: 一个常用的工具代码包集合
|
5
|
+
Home-page: https://github.com/cantbeblank96/kevin_toolbox
|
6
|
+
Download-URL: https://github.com/username/your-package/archive/refs/tags/v1.0.0.tar.gz
|
7
|
+
Author: kevin hsu
|
8
|
+
Author-email: xukaiming1996@163.com
|
9
|
+
License: MIT
|
10
|
+
Keywords: mathematics,pytorch,numpy,machine-learning,algorithm
|
11
|
+
Platform: UNKNOWN
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
13
|
+
Classifier: Programming Language :: Python
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
15
|
+
Requires-Python: >=3.6
|
16
|
+
Description-Content-Type: text/markdown
|
17
|
+
Provides-Extra: plot
|
18
|
+
Provides-Extra: rest
|
19
|
+
|
20
|
+
# kevin_toolbox
|
21
|
+
|
22
|
+
一个通用的工具代码包集合
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
环境要求
|
27
|
+
|
28
|
+
```shell
|
29
|
+
numpy>=1.19
|
30
|
+
pytorch>=1.2
|
31
|
+
```
|
32
|
+
|
33
|
+
安装方法:
|
34
|
+
|
35
|
+
```shell
|
36
|
+
pip install kevin-toolbox --no-dependencies
|
37
|
+
```
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
[项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
|
42
|
+
|
43
|
+
[使用指南 User_Guide](./notes/User_Guide.md)
|
44
|
+
|
45
|
+
[免责声明 Disclaimer](./notes/Disclaimer.md)
|
46
|
+
|
47
|
+
[版本更新记录](./notes/Release_Record.md):
|
48
|
+
|
49
|
+
- v 1.3.6 (2024-07-03)【new feature】
|
50
|
+
- patches
|
51
|
+
- for_os
|
52
|
+
- 【new feature】add find_files_in_dir(),找出目录下带有给定后缀的所有文件的生成器。
|
53
|
+
- for_os.path
|
54
|
+
- 【new feature】add find_illegal_chars(),找出给定的文件名/路径中出现了哪些非法符号。
|
55
|
+
- 【new feature】add replace_illegal_chars(),将给定的文件名/路径中的非法符号替换为合法形式。
|
56
|
+
- for_matplotlib
|
57
|
+
- 【new feature】add module common_charts,新增模块——常用图表,该模块下包含以下函数:
|
58
|
+
- plot_bars(),绘制柱状图
|
59
|
+
- plot_scatters(),绘制散点图
|
60
|
+
- plot_lines(),绘制折线图
|
61
|
+
- plot_distribution(),绘制分布图
|
62
|
+
- plot_scatters_matrix(),绘制散点图矩阵(常用于多变量关系分析)
|
63
|
+
- plot_confusion_matrix(),绘制混淆矩阵(常用于混淆矩阵、相关性矩阵、特征图可视化)
|
64
|
+
- 添加了测试用例。
|
65
|
+
- data_flow.file
|
66
|
+
- markdown
|
67
|
+
- 【new feature】add save_images_in_ndl(),将ndl结构叶节点下的图片对象保存到 plot_dir 中,并替换为该图片的markdown链接。
|
68
|
+
- 便于对表格中的图片或者列表中的图片进行保存和替换。
|
69
|
+
- 【new feature】add find_tables(),用于从文本中找出markdown格式的表格,并以二维数组的列表形式返回。
|
70
|
+
- 【new feature】add parse_table(),将二维数组形式的表格(比如find_tables()的返回列表的元素),解析成指定的格式。
|
71
|
+
- kevin_notation
|
72
|
+
- 【bug fix】fix bug in Kevin_Notation_Writer,增加检验写入的列的元素数量是否一致,不一致时进行报错。
|
73
|
+
- 【bug fix】fix bug in write(),避免对输入参数 metadata 中的内容进行意料之外的改动。
|
74
|
+
- nested_dict_list
|
75
|
+
- add para b_allow_override to serializer.write to allow overwriting,增加参数用于允许强制覆盖已有文件。
|
76
|
+
- computer_science.algorithm
|
77
|
+
- pareto_front
|
78
|
+
- 【new feature】add Optimum_Picker,帕累托最优值选取器。
|
79
|
+
- 记录并更新帕累托最优值
|
80
|
+
- 同时支持监控以下行为,并触发设定的执行器,详见参数 trigger_for_new 和 trigger_for_out。
|
81
|
+
- 新加值是一个新的帕累托最优值
|
82
|
+
- 抛弃一个不再是最优的旧的最优值
|
83
|
+
- statistician
|
84
|
+
- 【new feature】add Accumulator_for_Ndl,适用于 ndl 结构的统计器。
|
85
|
+
- 【bug fix】fix bug in Accumulator_Base._init_var()
|
86
|
+
- 【new feature】modify Average_Accumulator,在 add() 中新增了 weight 参数用于计算带权重的平均值
|
87
|
+
- modify Exponential_Moving_Average,add_sequence() 不再支持 weight_ls 参数,让该接口与其他类更加一致。
|
88
|
+
- 添加了测试用例。
|
89
|
+
|
90
|
+
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# kevin_toolbox
|
2
|
+
|
3
|
+
一个通用的工具代码包集合
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
环境要求
|
8
|
+
|
9
|
+
```shell
|
10
|
+
numpy>=1.19
|
11
|
+
pytorch>=1.2
|
12
|
+
```
|
13
|
+
|
14
|
+
安装方法:
|
15
|
+
|
16
|
+
```shell
|
17
|
+
pip install kevin-toolbox --no-dependencies
|
18
|
+
```
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
[项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
|
23
|
+
|
24
|
+
[使用指南 User_Guide](./notes/User_Guide.md)
|
25
|
+
|
26
|
+
[免责声明 Disclaimer](./notes/Disclaimer.md)
|
27
|
+
|
28
|
+
[版本更新记录](./notes/Release_Record.md):
|
29
|
+
|
30
|
+
- v 1.3.6 (2024-07-03)【new feature】
|
31
|
+
- patches
|
32
|
+
- for_os
|
33
|
+
- 【new feature】add find_files_in_dir(),找出目录下带有给定后缀的所有文件的生成器。
|
34
|
+
- for_os.path
|
35
|
+
- 【new feature】add find_illegal_chars(),找出给定的文件名/路径中出现了哪些非法符号。
|
36
|
+
- 【new feature】add replace_illegal_chars(),将给定的文件名/路径中的非法符号替换为合法形式。
|
37
|
+
- for_matplotlib
|
38
|
+
- 【new feature】add module common_charts,新增模块——常用图表,该模块下包含以下函数:
|
39
|
+
- plot_bars(),绘制柱状图
|
40
|
+
- plot_scatters(),绘制散点图
|
41
|
+
- plot_lines(),绘制折线图
|
42
|
+
- plot_distribution(),绘制分布图
|
43
|
+
- plot_scatters_matrix(),绘制散点图矩阵(常用于多变量关系分析)
|
44
|
+
- plot_confusion_matrix(),绘制混淆矩阵(常用于混淆矩阵、相关性矩阵、特征图可视化)
|
45
|
+
- 添加了测试用例。
|
46
|
+
- data_flow.file
|
47
|
+
- markdown
|
48
|
+
- 【new feature】add save_images_in_ndl(),将ndl结构叶节点下的图片对象保存到 plot_dir 中,并替换为该图片的markdown链接。
|
49
|
+
- 便于对表格中的图片或者列表中的图片进行保存和替换。
|
50
|
+
- 【new feature】add find_tables(),用于从文本中找出markdown格式的表格,并以二维数组的列表形式返回。
|
51
|
+
- 【new feature】add parse_table(),将二维数组形式的表格(比如find_tables()的返回列表的元素),解析成指定的格式。
|
52
|
+
- kevin_notation
|
53
|
+
- 【bug fix】fix bug in Kevin_Notation_Writer,增加检验写入的列的元素数量是否一致,不一致时进行报错。
|
54
|
+
- 【bug fix】fix bug in write(),避免对输入参数 metadata 中的内容进行意料之外的改动。
|
55
|
+
- nested_dict_list
|
56
|
+
- add para b_allow_override to serializer.write to allow overwriting,增加参数用于允许强制覆盖已有文件。
|
57
|
+
- computer_science.algorithm
|
58
|
+
- pareto_front
|
59
|
+
- 【new feature】add Optimum_Picker,帕累托最优值选取器。
|
60
|
+
- 记录并更新帕累托最优值
|
61
|
+
- 同时支持监控以下行为,并触发设定的执行器,详见参数 trigger_for_new 和 trigger_for_out。
|
62
|
+
- 新加值是一个新的帕累托最优值
|
63
|
+
- 抛弃一个不再是最优的旧的最优值
|
64
|
+
- statistician
|
65
|
+
- 【new feature】add Accumulator_for_Ndl,适用于 ndl 结构的统计器。
|
66
|
+
- 【bug fix】fix bug in Accumulator_Base._init_var()
|
67
|
+
- 【new feature】modify Average_Accumulator,在 add() 中新增了 weight 参数用于计算带权重的平均值
|
68
|
+
- modify Exponential_Moving_Average,add_sequence() 不再支持 weight_ls 参数,让该接口与其他类更加一致。
|
69
|
+
- 添加了测试用例。
|
@@ -1,4 +1,4 @@
|
|
1
|
-
__version__ = "1.3.
|
1
|
+
__version__ = "1.3.6"
|
2
2
|
|
3
3
|
|
4
4
|
import os
|
@@ -12,5 +12,5 @@ os.system(
|
|
12
12
|
os.system(
|
13
13
|
f'python {os.path.split(__file__)[0]}/env_info/check_validity_and_uninstall.py '
|
14
14
|
f'--package_name kevin-toolbox-dev '
|
15
|
-
f'--expiration_timestamp
|
15
|
+
f'--expiration_timestamp 1735563213 --verbose 0'
|
16
16
|
)
|
kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
from kevin_toolbox.computer_science.data_structure import Executor
|
2
|
+
from kevin_toolbox.computer_science.algorithm.pareto_front import get_pareto_points_idx, Direction
|
3
|
+
import kevin_toolbox.nested_dict_list as ndl
|
4
|
+
import numpy as np
|
5
|
+
|
6
|
+
|
7
|
+
class Optimum_Picker:
|
8
|
+
"""
|
9
|
+
记录并更新帕累托最优值
|
10
|
+
同时支持监控以下行为:
|
11
|
+
- 新加值是一个新的帕累托最优值
|
12
|
+
- 抛弃一个不再是最优的旧的最优值
|
13
|
+
并触发设定的执行器,详见参数 trigger_for_new 和 trigger_for_out
|
14
|
+
"""
|
15
|
+
|
16
|
+
def __init__(self, **kwargs):
|
17
|
+
"""
|
18
|
+
参数:
|
19
|
+
directions: <list of Direction> 比较的方向
|
20
|
+
trigger_for_new: <Executor> 触发器
|
21
|
+
当 add() 新添加的监控值是一个新的帕累托最优时,执行该触发器
|
22
|
+
在执行前,将自动往触发器的 kwargs 中添加 {"metrics": <metrics>, "step": <step>, ...} 等信息
|
23
|
+
trigger_for_out: <Executor> 触发器
|
24
|
+
当 add() 时候需要抛弃一些不再是的帕累托最优的历史值时,执行该触发器
|
25
|
+
在执行前,将自动往触发器的 kwargs 中添加 {"metrics": <metrics>, "step": <step>, ...} 等信息
|
26
|
+
warmup_steps: <int> 在经过多少次 add() 之后,再开始比较监控值
|
27
|
+
默认为 0
|
28
|
+
pick_per_steps: <int> 每经过多少次 add(),就比较一次监控值
|
29
|
+
默认为 1
|
30
|
+
"""
|
31
|
+
# 默认参数
|
32
|
+
paras = {
|
33
|
+
"directions": None,
|
34
|
+
"trigger_for_new": None,
|
35
|
+
"trigger_for_out": None,
|
36
|
+
"warmup_steps": 0,
|
37
|
+
"pick_per_steps": 1,
|
38
|
+
}
|
39
|
+
|
40
|
+
# 获取参数
|
41
|
+
paras.update(kwargs)
|
42
|
+
|
43
|
+
# 校验参数
|
44
|
+
assert paras["warmup_steps"] >= 0 and paras["pick_per_steps"] >= 1
|
45
|
+
paras["directions"] = [Direction(i) for i in paras["directions"]]
|
46
|
+
for k in ["trigger_for_out", "trigger_for_new"]:
|
47
|
+
assert isinstance(paras[k], (type(None), Executor))
|
48
|
+
|
49
|
+
self.paras = paras
|
50
|
+
self._state = self._init_state()
|
51
|
+
|
52
|
+
def _init_state(self):
|
53
|
+
return dict(
|
54
|
+
optimal_ls=list(), # [{"metrics":metrics, "record":record, "step":step}, ...]
|
55
|
+
step=0,
|
56
|
+
b_empty_cache=True,
|
57
|
+
last_optimal_nums=0
|
58
|
+
)
|
59
|
+
|
60
|
+
def add(self, metrics, b_force_clear_cache=False, **kwargs):
|
61
|
+
"""
|
62
|
+
添加指标
|
63
|
+
|
64
|
+
参数:
|
65
|
+
metrics: 指标
|
66
|
+
b_force_clear_cache: <boolean> 是否强制清空缓存
|
67
|
+
默认为 False,此时将根据设定的 warmup_steps 和 pick_per_steps 来决定何时清空一次缓存
|
68
|
+
**kwargs: 用户自定义记录
|
69
|
+
将被添加到 record 中
|
70
|
+
"""
|
71
|
+
assert metrics is not None
|
72
|
+
metrics = np.asarray(metrics).reshape(1, -1)
|
73
|
+
assert metrics.shape[-1] == len(self.paras["directions"])
|
74
|
+
|
75
|
+
optimal_ls, step = self._state["optimal_ls"], self._state["step"]
|
76
|
+
new_record = dict(metrics=metrics, step=step)
|
77
|
+
new_record.update(kwargs)
|
78
|
+
#
|
79
|
+
optimal_ls.append(new_record)
|
80
|
+
self._state["step"] += 1
|
81
|
+
|
82
|
+
# warmup & cache
|
83
|
+
if not b_force_clear_cache and (step < self.paras["warmup_steps"] or
|
84
|
+
(step - self.paras["warmup_steps"]) % self.paras["pick_per_steps"] != 0):
|
85
|
+
self._state["b_empty_cache"] = False
|
86
|
+
return
|
87
|
+
|
88
|
+
# 找出新的帕累托最优值
|
89
|
+
points = np.concatenate([i["metrics"] for i in optimal_ls])
|
90
|
+
idx_ls = get_pareto_points_idx(points=points, directions=self.paras["directions"])
|
91
|
+
idx_ls.sort()
|
92
|
+
# 进行触发操作
|
93
|
+
if self.paras["trigger_for_new"] is not None:
|
94
|
+
for i in filter(lambda i: i >= self._state["last_optimal_nums"], idx_ls):
|
95
|
+
self.paras["trigger_for_new"].run(**optimal_ls[i])
|
96
|
+
#
|
97
|
+
if self.paras["trigger_for_out"] is not None:
|
98
|
+
for i in set(range(self._state["last_optimal_nums"])).difference(set(idx_ls)):
|
99
|
+
self.paras["trigger_for_out"].run(**optimal_ls[i])
|
100
|
+
|
101
|
+
# 更新
|
102
|
+
self._state["optimal_ls"] = [optimal_ls[i] for i in idx_ls]
|
103
|
+
self._state["b_empty_cache"] = True
|
104
|
+
self._state["last_optimal_nums"] = len(idx_ls)
|
105
|
+
|
106
|
+
def get(self, b_force_clear_cache=False):
|
107
|
+
"""
|
108
|
+
获取当前最优值记录
|
109
|
+
|
110
|
+
参数:
|
111
|
+
b_force_clear_cache: <boolean> 是否强制清空缓存
|
112
|
+
|
113
|
+
返回:
|
114
|
+
record_ls: <list of dict> 最优记录
|
115
|
+
b_empty_cache: <boolean> 缓存是否清空,亦即 record_ls 是否是真正的最优记录
|
116
|
+
当 pick_per_steps > 1 时,将有部分记录留存在缓存中,没有进行比较,此时的最优记录并不是完整的也不是最新的
|
117
|
+
"""
|
118
|
+
if b_force_clear_cache and not self._state["b_empty_cache"] and len(self._state["optimal_ls"]) > 0:
|
119
|
+
# 需要清空缓存,就把最后一次缓存的记录拿出来,重新使用 b_force_clear_cache=False 去 add 一次
|
120
|
+
record = self._state["optimal_ls"].pop(-1)
|
121
|
+
metrics, step = record.pop("metrics"), record.pop("step")
|
122
|
+
self._state["step"] -= 1
|
123
|
+
assert self._state["step"] == step
|
124
|
+
self.add(metrics=metrics, b_force_clear_cache=True, **record)
|
125
|
+
|
126
|
+
return self._state["optimal_ls"][:], self._state["b_empty_cache"] or b_force_clear_cache
|
127
|
+
|
128
|
+
def clear(self):
|
129
|
+
self._state = self._init_state()
|
130
|
+
|
131
|
+
def __len__(self):
|
132
|
+
return self._state["step"]
|
133
|
+
|
134
|
+
# ---------------------- 用于保存和加载状态 ---------------------- #
|
135
|
+
def load_state_dict(self, state_dict):
|
136
|
+
"""
|
137
|
+
加载状态
|
138
|
+
"""
|
139
|
+
self.clear()
|
140
|
+
self._state.update(state_dict)
|
141
|
+
|
142
|
+
def state_dict(self):
|
143
|
+
"""
|
144
|
+
获取状态
|
145
|
+
"""
|
146
|
+
return ndl.copy_(var=self._state, b_deepcopy=True, b_keep_internal_references=True)
|
147
|
+
|
148
|
+
|
149
|
+
if __name__ == '__main__':
|
150
|
+
"""
|
151
|
+
模拟场景
|
152
|
+
在训练模型时,要求比较 val_acc_1(maximize) 和 val_error_2(minimize),
|
153
|
+
要求保存其帕累托最优时的模型。
|
154
|
+
"""
|
155
|
+
import torch
|
156
|
+
import matplotlib.pyplot as plt
|
157
|
+
|
158
|
+
# 一个打乱的圆的采样点序列
|
159
|
+
metrics = torch.tensor([(-4.045084971874739, -2.9389262614623632),
|
160
|
+
(-3.1871199487434474, -3.852566213878947),
|
161
|
+
(-2.1288964578253635, 4.524135262330097),
|
162
|
+
(-4.648882429441257, -1.8406227634233896),
|
163
|
+
(-4.648882429441256, 1.8406227634233907),
|
164
|
+
(-0.936906572928623, 4.911436253643443),
|
165
|
+
(0.31395259764656414, -4.990133642141358),
|
166
|
+
(-4.960573506572389, 0.6266661678215226),
|
167
|
+
(-3.1871199487434487, 3.852566213878946),
|
168
|
+
(4.381533400219316, -2.4087683705085805),
|
169
|
+
(0.31395259764656763, 4.990133642141358),
|
170
|
+
(2.6791339748949827, 4.221639627510076),
|
171
|
+
(4.8429158056431545, -1.2434494358242767),
|
172
|
+
(1.5450849718747361, -4.755282581475768),
|
173
|
+
(4.842915805643155, 1.243449435824274),
|
174
|
+
(3.644843137107056, -3.422735529643445),
|
175
|
+
(5.0, 0.0),
|
176
|
+
(-2.128896457825361, -4.524135262330099),
|
177
|
+
(2.6791339748949836, -4.221639627510075),
|
178
|
+
(-4.9605735065723895, -0.6266661678215214),
|
179
|
+
(3.644843137107058, 3.422735529643443),
|
180
|
+
(4.381533400219318, 2.4087683705085765),
|
181
|
+
(-0.9369065729286231, -4.911436253643443),
|
182
|
+
(-4.045084971874736, 2.9389262614623664),
|
183
|
+
(1.5450849718747373, 4.755282581475767)])
|
184
|
+
# 右下角的点是帕累托最优
|
185
|
+
best_idx_ls = [6, 9, 12, 13, 15, 16, 18]
|
186
|
+
|
187
|
+
# 将x和y坐标分别存储在两个列表中
|
188
|
+
x_coords = metrics[:, 0].numpy().tolist()
|
189
|
+
y_coords = metrics[:, 1].numpy().tolist()
|
190
|
+
# 按顺序绘制点
|
191
|
+
plt.plot(x_coords, y_coords, marker='o')
|
192
|
+
# 添加顺序标签
|
193
|
+
for i, txt in enumerate(range(len(metrics))):
|
194
|
+
plt.annotate(txt, (x_coords[i], y_coords[i]), textcoords="offset points", xytext=(0, 5), ha='center')
|
195
|
+
plt.show()
|
196
|
+
import os
|
197
|
+
from kevin_toolbox.data_flow.file import json_
|
198
|
+
from kevin_toolbox.patches.for_os import remove
|
199
|
+
|
200
|
+
temp_dir = os.path.join(os.path.dirname(__file__), "temp")
|
201
|
+
remove(temp_dir, ignore_errors=True)
|
202
|
+
|
203
|
+
opt_picker = Optimum_Picker(
|
204
|
+
warmup_steps=9, pick_per_steps=5,
|
205
|
+
trigger_for_new=Executor(
|
206
|
+
func=lambda metrics, step: json_.write(metrics.tolist(), os.path.join(temp_dir, f'{step}.json'))),
|
207
|
+
trigger_for_out=Executor(func=lambda step, **kwargs: remove(os.path.join(temp_dir, f'{step}.json'))),
|
208
|
+
directions=["maximize", "minimize"]
|
209
|
+
)
|
210
|
+
for s, v in enumerate(metrics):
|
211
|
+
opt_picker.add(metrics=v)
|
212
|
+
print()
|
213
|
+
print(s, v)
|
214
|
+
print(opt_picker.get()[1])
|
215
|
+
print([i["step"] for i in opt_picker.get()[0]])
|
216
|
+
|
217
|
+
for i in best_idx_ls:
|
218
|
+
assert os.path.isfile(os.path.join(temp_dir, f'{i}.json'))
|
@@ -71,7 +71,7 @@ class Accumulator_Base(object):
|
|
71
71
|
|
72
72
|
def add_sequence(self, var_ls, **kwargs):
|
73
73
|
# for var in var_ls:
|
74
|
-
# self.add(var)
|
74
|
+
# self.add(var, **kwargs)
|
75
75
|
raise NotImplementedError
|
76
76
|
|
77
77
|
def add(self, var, **kwargs):
|
@@ -112,7 +112,7 @@ class Accumulator_Base(object):
|
|
112
112
|
if like is not None:
|
113
113
|
var = init_var.by_like(var=like)
|
114
114
|
elif data_format is not None:
|
115
|
-
var = init_var.by_data_format(**
|
115
|
+
var = init_var.by_data_format(**data_format)
|
116
116
|
else:
|
117
117
|
var = None
|
118
118
|
return var
|
kevin-toolbox-dev-1.3.6/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
import torch
|
2
|
+
import kevin_toolbox.nested_dict_list as ndl
|
3
|
+
from kevin_toolbox.computer_science.algorithm.statistician import Accumulator_Base
|
4
|
+
|
5
|
+
|
6
|
+
class Accumulator_for_Ndl:
|
7
|
+
"""
|
8
|
+
适用于 ndl 结构的统计器
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(self, accumulator_builder):
|
12
|
+
"""
|
13
|
+
参数:
|
14
|
+
accumulator_builder: ndl叶节点统计器的构造函数
|
15
|
+
"""
|
16
|
+
assert callable(accumulator_builder) or isinstance(accumulator_builder, Accumulator_Base)
|
17
|
+
self.accumulator_builder = accumulator_builder
|
18
|
+
|
19
|
+
self.var = None
|
20
|
+
|
21
|
+
def add(self, var, **kwargs):
|
22
|
+
if self.var is None and isinstance(var, (dict, list)):
|
23
|
+
self.var = type(var)()
|
24
|
+
for name, value in ndl.get_nodes(var=var, level=-1, b_strict=True):
|
25
|
+
accumulator = ndl.get_value(var=self.var, name=name, default=None)
|
26
|
+
if accumulator is None:
|
27
|
+
accumulator = self.accumulator_builder()
|
28
|
+
self.var = ndl.set_value(var=self.var, name=name, value=accumulator, b_force=True)
|
29
|
+
value = value.detach().cpu().numpy() if torch.is_tensor(value) else value
|
30
|
+
accumulator.add(value, **kwargs)
|
31
|
+
|
32
|
+
def add_sequence(self, var_ls, **kwargs):
|
33
|
+
for var in var_ls:
|
34
|
+
self.add(var, **kwargs)
|
35
|
+
|
36
|
+
def get(self, **kwargs):
|
37
|
+
return ndl.traverse(
|
38
|
+
var=ndl.copy_(var=self.var, b_deepcopy=False),
|
39
|
+
match_cond=lambda _, __, v: not isinstance(v, (dict, list)) and hasattr(v, "get"), action_mode="replace",
|
40
|
+
converter=lambda _, v: v.get(**kwargs)
|
41
|
+
)
|
42
|
+
|
43
|
+
|
44
|
+
if __name__ == '__main__':
|
45
|
+
from kevin_toolbox.data_flow.file import markdown
|
46
|
+
import numpy as np
|
47
|
+
from kevin_toolbox.computer_science.algorithm.statistician import Average_Accumulator
|
48
|
+
|
49
|
+
worker = Accumulator_for_Ndl(accumulator_builder=Average_Accumulator)
|
50
|
+
|
51
|
+
worker.add({
|
52
|
+
1: 2.1,
|
53
|
+
"233": torch.ones(10),
|
54
|
+
"543": [
|
55
|
+
np.array([1, 2, 3]),
|
56
|
+
np.array([4, 5, 6]),
|
57
|
+
]
|
58
|
+
}, weight=0.8)
|
59
|
+
|
60
|
+
worker.add({
|
61
|
+
1: 3.1,
|
62
|
+
"233": torch.zeros(10),
|
63
|
+
"543": [
|
64
|
+
np.array([0, 2, 3]),
|
65
|
+
np.array([0, 5, 6]),
|
66
|
+
]
|
67
|
+
}, weight=1.4)
|
68
|
+
|
69
|
+
print(markdown.generate_list(var=worker.get()))
|
@@ -31,20 +31,22 @@ class Average_Accumulator(Accumulator_Base):
|
|
31
31
|
|
32
32
|
def add_sequence(self, var_ls, **kwargs):
|
33
33
|
for var in var_ls:
|
34
|
-
self.add(var)
|
34
|
+
self.add(var, **kwargs)
|
35
35
|
|
36
|
-
def add(self, var, **kwargs):
|
36
|
+
def add(self, var, weight=1, **kwargs):
|
37
37
|
"""
|
38
38
|
添加单个数据
|
39
39
|
|
40
40
|
参数:
|
41
41
|
var: 数据
|
42
|
+
weight: 权重
|
42
43
|
"""
|
43
44
|
if self.var is None:
|
44
45
|
self.var = self._init_var(like=var)
|
45
46
|
# 累积
|
46
|
-
self.var
|
47
|
+
self.var = self.var + var * weight
|
47
48
|
self.state["total_nums"] += 1
|
49
|
+
self.state["total_weights"] += weight
|
48
50
|
|
49
51
|
def get(self, **kwargs):
|
50
52
|
"""
|
@@ -53,7 +55,17 @@ class Average_Accumulator(Accumulator_Base):
|
|
53
55
|
"""
|
54
56
|
if len(self) == 0:
|
55
57
|
return None
|
56
|
-
return self.var /
|
58
|
+
return self.var / self.state["total_weights"]
|
59
|
+
|
60
|
+
@staticmethod
|
61
|
+
def _init_state():
|
62
|
+
"""
|
63
|
+
初始化状态
|
64
|
+
"""
|
65
|
+
return dict(
|
66
|
+
total_nums=0,
|
67
|
+
total_weights=0,
|
68
|
+
)
|
57
69
|
|
58
70
|
|
59
71
|
if __name__ == '__main__':
|
@@ -58,18 +58,11 @@ class Exponential_Moving_Average(Accumulator_Base):
|
|
58
58
|
#
|
59
59
|
super(Exponential_Moving_Average, self).__init__(**paras)
|
60
60
|
|
61
|
-
def add_sequence(self, var_ls,
|
62
|
-
|
63
|
-
|
64
|
-
weight_ls = [weight_ls] * len(var_ls)
|
65
|
-
assert len(weight_ls) == len(var_ls)
|
66
|
-
for var, weight in enumerate(var_ls, weight_ls):
|
67
|
-
self.add(var, weight)
|
68
|
-
else:
|
69
|
-
for var in var_ls:
|
70
|
-
self.add(var)
|
61
|
+
def add_sequence(self, var_ls, **kwargs):
|
62
|
+
for var in var_ls:
|
63
|
+
self.add(var, **kwargs)
|
71
64
|
|
72
|
-
def add(self, var, weight=1):
|
65
|
+
def add(self, var, weight=1, **kwargs):
|
73
66
|
"""
|
74
67
|
添加单个数据
|
75
68
|
|
@@ -88,7 +81,7 @@ class Exponential_Moving_Average(Accumulator_Base):
|
|
88
81
|
self.state["total_nums"] += 1
|
89
82
|
self.state["bias_fix"] *= keep_ratio
|
90
83
|
|
91
|
-
def get(self, bias_correction=None):
|
84
|
+
def get(self, bias_correction=None, **kwargs):
|
92
85
|
"""
|
93
86
|
获取当前累加值
|
94
87
|
当未初始化时,返回 None
|
@@ -313,6 +313,9 @@ class Kevin_Notation_Writer:
|
|
313
313
|
try:
|
314
314
|
# 解释为多行
|
315
315
|
assert paras.get("b_single_line", None) in (None, False)
|
316
|
+
temp = [len(paras["column_dict"][k]) for k in self.metadata["column_name"]]
|
317
|
+
if temp:
|
318
|
+
assert max(temp) == min(temp), f"Error: the length of each column is not equal!"
|
316
319
|
row_ls = list(zip(*[paras["column_dict"][k] for k in self.metadata["column_name"]]))
|
317
320
|
except:
|
318
321
|
# 解释为单行
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import pytest
|
2
|
+
from kevin_toolbox.patches.for_test import check_consistency
|
3
|
+
|
4
|
+
import os
|
5
|
+
import numpy as np
|
6
|
+
|
7
|
+
from kevin_toolbox.data_flow.file import kevin_notation
|
8
|
+
from kevin_toolbox.data_flow.file.kevin_notation.test.test_data.data_all import metadata_ls, content_ls, file_path_ls
|
9
|
+
|
10
|
+
|
11
|
+
@pytest.mark.parametrize("expected_metadata, expected_content, file_path",
|
12
|
+
zip(metadata_ls, content_ls, file_path_ls))
|
13
|
+
def test_write(expected_metadata, expected_content, file_path):
|
14
|
+
print("test write()")
|
15
|
+
|
16
|
+
"""
|
17
|
+
当写入的列的元素不一致时,是否能正常报错
|
18
|
+
"""
|
19
|
+
|
20
|
+
# 新建
|
21
|
+
file_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "test_data/temp", os.path.basename(file_path))
|
22
|
+
|
23
|
+
# 字典方式写入
|
24
|
+
if len(expected_content) > 1:
|
25
|
+
with pytest.raises(AssertionError):
|
26
|
+
list(expected_content.values())[0].clear()
|
27
|
+
kevin_notation.write(metadata=expected_metadata, content=expected_content, file_path=file_path)
|
@@ -5,6 +5,9 @@ def write(metadata, content, file_path):
|
|
5
5
|
"""
|
6
6
|
写入整个文件的快捷接口
|
7
7
|
"""
|
8
|
+
if "column_num" in metadata:
|
9
|
+
metadata=metadata.copy()
|
10
|
+
metadata.pop("column_num")
|
8
11
|
with kevin_notation.Writer(file_path=file_path, mode="w", sep=metadata.get("sep", "\t")) as writer:
|
9
12
|
writer.write_metadata(metadata=metadata)
|
10
13
|
if isinstance(content, (dict,)):
|