kevin-toolbox-dev 1.4.5__tar.gz → 1.4.7__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.7/PKG-INFO +64 -0
- kevin-toolbox-dev-1.4.7/README.md +43 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/__init__.py +2 -2
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/cache_manager.py +6 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +2 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_process_execute.py +109 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +105 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/utils/__init__.py +15 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/utils/wrapper_with_timeout_1.py +69 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/utils/wrapper_with_timeout_2.py +76 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/data_structure/executor.py +2 -2
- kevin-toolbox-dev-1.4.7/kevin_toolbox/data_flow/file/excel/__init__.py +1 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/data_flow/file/excel/write_excel_with_matrix.py +105 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/read_json.py +1 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/write_json.py +36 -3
- kevin-toolbox-dev-1.4.7/kevin_toolbox/env_info/__init__.py +2 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/env_info/check_validity_and_uninstall.py +49 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/env_info/check_version_and_update.py +72 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/env_info/test/test_check_.py +52 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_json_.py +2 -2
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_lines.py +5 -1
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_os/find_files_in_dir.py +35 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_os/organize/__init__.py +1 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox/patches/for_os/organize/group_files_by_timestamp.py +90 -0
- kevin-toolbox-dev-1.4.7/kevin_toolbox_dev.egg-info/PKG-INFO +64 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox_dev.egg-info/SOURCES.txt +9 -0
- kevin-toolbox-dev-1.4.5/PKG-INFO +0 -68
- kevin-toolbox-dev-1.4.5/README.md +0 -47
- kevin-toolbox-dev-1.4.5/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/__init__.py +0 -1
- kevin-toolbox-dev-1.4.5/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/multi_thread_execute.py +0 -84
- kevin-toolbox-dev-1.4.5/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -29
- kevin-toolbox-dev-1.4.5/kevin_toolbox/env_info/check_version_and_update.py +0 -51
- kevin-toolbox-dev-1.4.5/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -1
- kevin-toolbox-dev-1.4.5/kevin_toolbox/patches/for_os/find_files_in_dir.py +0 -30
- kevin-toolbox-dev-1.4.5/kevin_toolbox_dev.egg-info/PKG-INFO +0 -68
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/cache_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/cache/memo_cache.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/fifo_strategy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lfu_strategy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lru_strategy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/lst_strategy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/strategy/strategy_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_builder.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_manager.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/test/test_cache_strategy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/cache_manager/variable.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/execution_graph/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/execution_graph/jump_node.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/execution_graph/random_node.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/execution_graph/simple_node.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/for_seq/chunk_generator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/parallel_and_concurrent/async_executor.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/pareto_front/optimum_picker.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/accumulator_for_ndl.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/init_var/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_data_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/statistician/init_var/init_by_like.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/dangerous/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/cache/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/cache/test/test_cache_manager_for_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/escape_non_str_dict_key.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/escape_tuple_and_set.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/unescape_non_str_dict_key.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/converter/unescape_tuple_and_set.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_1.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation_debug.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/generate_list.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/link/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/link/find_links.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/link/generate_link.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/convert/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/convert/complete_to_matrix.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/convert/matrix_to_complete.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/convert_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/find_tables.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/generate_table.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/get_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/padding_misaligned_values.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/table/variable.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/markdown/utils/save_images_in_ndl.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/decorator/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/temperate/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/developing/test.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/test/test_variable_.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/test/test_version.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/variable_/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/variable_/env_vars_parser.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/version/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/version/compare_version.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/version/parse_version.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5/kevin_toolbox/env_info → kevin-toolbox-dev-1.4.7/kevin_toolbox/machine_learning/dataset}/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5/kevin_toolbox/machine_learning/dataset → kevin-toolbox-dev-1.4.7/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices}/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/cache.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/transform/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/math/utils/split_integer_most_evenly.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/copy_.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/count_leaf_node_nums.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/get_hash.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/get_nodes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/get_value.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/name_handler/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/name_handler/build_name.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/name_handler/escape_node.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/name_handler/parse_name.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_ndl.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_bin.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_numpy_npy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_pickle_.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_all.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_skip_simple.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_all.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/_torch_tensor.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/backends/backend_base.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/enum_variable.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/read.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/saved_node_name_builder.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/variable.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/serializer/write.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/set_default.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/set_value.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/traverse.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/value_parser/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/value_parser/eval_references.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/value_parser/parse_and_eval_references.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/value_parser/parse_references.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/nested_dict_list/value_parser/replace_identical_with_reference.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_logging/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_logging/build_logger.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/clear_border_of_axes.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/color/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/color/color_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/color/convert_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/color/generate_color_list.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/color/get_format.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_bars.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_confusion_matrix.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_distribution.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_matplotlib/common_charts/plot_scatters_matrix.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/linalg/entropy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/get_rng.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/get_rng_state.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/set_rng_state.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/truncated_multivariate_normal.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/truncated_normal.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_numpy/random/variable.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/build_sampler.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/build_storage.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/build_study.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/copy_study.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/for_study/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/for_study/dump.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/for_study/load.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/for_trial/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/for_trial/dump.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_optuna/serialize/for_trial/load.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/copy.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/pack.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/path/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/path/find_illegal_chars.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/path/replace_illegal_chars.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/remove.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/unpack.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_os/walk.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_streamlit/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_streamlit/markdown/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_streamlit/markdown/show.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_streamlit/markdown/show_image.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_streamlit/markdown/show_table.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_test/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/utils/variable.py +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/pyproject.toml +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/setup.cfg +0 -0
- {kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/setup.py +0 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: kevin-toolbox-dev
|
3
|
+
Version: 1.4.7
|
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.7 (2025-02-19)【new feature】【bug fix】【incompatible change】
|
50
|
+
|
51
|
+
- data_flow.file
|
52
|
+
- 【new feature】【incompatible change】modify json_.write(),支持使用参数 output_format 设置更复杂的输出格式。同时废弃原来的sort_keys参数。
|
53
|
+
- output_format 支持以下输入:
|
54
|
+
- "pretty_printed": 通过添加大量的空格和换行符来格式化输出,使输出更易读
|
55
|
+
- "minified": 删除所有空格和换行符,使输出更紧凑
|
56
|
+
- `<dict/tuple>`: 更加细致的格式设定,比如 `{"indent": 2, ensure_ascii=True}`,如果需要基于已有格式进行微调可以使用以下方式:`("pretty_printed", {"indent": 2, ensure_ascii=True})`
|
57
|
+
- computer_science.algorithm.parallel_and_concurrent
|
58
|
+
- 【bug fix】【incompatible change】fix bug in multi_thread_execute(),修正了参数timeout无法对每个任务起效的bug,将参数thread_nums更名为worker_nums。
|
59
|
+
- 【new feature】add multi_process_execute(),用于多进程执行任务。同样支持timeout设定和进度条显示。
|
60
|
+
- patches.for_matplotlib.common_charts
|
61
|
+
- modify plot_lines(),添加了 x_ticklabels_name 参数用于自定义x轴的坐标值
|
62
|
+
- 以上修改,均已添加了对应的测试用例。
|
63
|
+
|
64
|
+
|
@@ -0,0 +1,43 @@
|
|
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.7 (2025-02-19)【new feature】【bug fix】【incompatible change】
|
31
|
+
|
32
|
+
- data_flow.file
|
33
|
+
- 【new feature】【incompatible change】modify json_.write(),支持使用参数 output_format 设置更复杂的输出格式。同时废弃原来的sort_keys参数。
|
34
|
+
- output_format 支持以下输入:
|
35
|
+
- "pretty_printed": 通过添加大量的空格和换行符来格式化输出,使输出更易读
|
36
|
+
- "minified": 删除所有空格和换行符,使输出更紧凑
|
37
|
+
- `<dict/tuple>`: 更加细致的格式设定,比如 `{"indent": 2, ensure_ascii=True}`,如果需要基于已有格式进行微调可以使用以下方式:`("pretty_printed", {"indent": 2, ensure_ascii=True})`
|
38
|
+
- computer_science.algorithm.parallel_and_concurrent
|
39
|
+
- 【bug fix】【incompatible change】fix bug in multi_thread_execute(),修正了参数timeout无法对每个任务起效的bug,将参数thread_nums更名为worker_nums。
|
40
|
+
- 【new feature】add multi_process_execute(),用于多进程执行任务。同样支持timeout设定和进度条显示。
|
41
|
+
- patches.for_matplotlib.common_charts
|
42
|
+
- modify plot_lines(),添加了 x_ticklabels_name 参数用于自定义x轴的坐标值
|
43
|
+
- 以上修改,均已添加了对应的测试用例。
|
@@ -1,4 +1,4 @@
|
|
1
|
-
__version__ = "1.4.
|
1
|
+
__version__ = "1.4.7"
|
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 1755525740 --verbose 0'
|
16
16
|
)
|
@@ -44,6 +44,12 @@ class Cache_Manager:
|
|
44
44
|
当设置为 float 时表示占 upper_bound 的比例
|
45
45
|
默认为 0.5
|
46
46
|
strategy: <str/dict/Strategy_Base> 管理策略
|
47
|
+
目前支持以下策略:
|
48
|
+
- ":by_initial_time:FIFO" 删除最后一次访问时间最久远的部分
|
49
|
+
- ":by_counts:LFU" 删除访问频率最低的部分
|
50
|
+
- ":by_last_time:LRU" 删除最后一次访问时间最久远的部分
|
51
|
+
- ":by_survival_time:LST" 删除访问频率最低的部分
|
52
|
+
默认使用 LRU 策略
|
47
53
|
cache: <str/dict/Cache_Base> 缓存种类
|
48
54
|
"""
|
49
55
|
# 默认参数
|
@@ -0,0 +1,109 @@
|
|
1
|
+
import pickle
|
2
|
+
import concurrent.futures
|
3
|
+
from multiprocessing import Manager
|
4
|
+
from kevin_toolbox.computer_science.data_structure import Executor
|
5
|
+
from kevin_toolbox.computer_science.algorithm.parallel_and_concurrent.utils import wrapper_for_mp as wrapper
|
6
|
+
from kevin_toolbox.computer_science.algorithm.parallel_and_concurrent.utils import DEFAULT_PROCESS_NUMS
|
7
|
+
|
8
|
+
|
9
|
+
def multi_process_execute(executors, worker_nums=DEFAULT_PROCESS_NUMS, b_display_progress=True, timeout=None,
|
10
|
+
_hook_for_debug=None):
|
11
|
+
"""
|
12
|
+
多进程执行
|
13
|
+
|
14
|
+
参数:
|
15
|
+
executors: <list/generator/iterator of Executor> 执行器序列
|
16
|
+
worker_nums: <int> 进程数
|
17
|
+
b_display_progress: <boolean> 是否显示进度条
|
18
|
+
timeout: <int/float> 每个进程的最大等待时间,单位是s
|
19
|
+
默认为 None,表示允许等待无限长的时间
|
20
|
+
_hook_for_debug: <dict/None> 当设置为非 None 值时,将保存中间的执行信息。
|
21
|
+
包括:
|
22
|
+
- "execution_orders": 执行顺序
|
23
|
+
- "completion_orders": 完成顺序
|
24
|
+
这些信息与最终结果无关,仅面向更底层的调试需求,任何人都不应依赖该特性
|
25
|
+
返回:
|
26
|
+
res_ls, failed_idx_ls
|
27
|
+
执行结果列表,以及执行失败的执行器索引列表
|
28
|
+
"""
|
29
|
+
executor_ls = []
|
30
|
+
for i in executors:
|
31
|
+
assert isinstance(i, (Executor,))
|
32
|
+
try:
|
33
|
+
pickle.dumps(i)
|
34
|
+
except:
|
35
|
+
raise AttributeError(
|
36
|
+
f'非法任务。因为进程池中的任务必须要能被pickle化。\n对象 {i} 无法被 pickle,请检查其中是否使用了闭包内定义的函数')
|
37
|
+
executor_ls.append(i)
|
38
|
+
if b_display_progress:
|
39
|
+
from tqdm import tqdm
|
40
|
+
p_bar = tqdm(total=len(executor_ls))
|
41
|
+
else:
|
42
|
+
p_bar = None
|
43
|
+
|
44
|
+
if isinstance(_hook_for_debug, dict):
|
45
|
+
_execution_orders, _completion_orders = Manager().list(), Manager().list()
|
46
|
+
else:
|
47
|
+
_execution_orders, _completion_orders = None, None
|
48
|
+
|
49
|
+
res_ls = [None] * len(executor_ls)
|
50
|
+
failed_idx_ls = []
|
51
|
+
with concurrent.futures.ProcessPoolExecutor(max_workers=worker_nums) as process_pool:
|
52
|
+
# 提交任务并添加进度回调
|
53
|
+
futures = []
|
54
|
+
for i, executor in enumerate(executor_ls):
|
55
|
+
future = process_pool.submit(wrapper, executor, timeout, i, _execution_orders, _completion_orders)
|
56
|
+
if b_display_progress:
|
57
|
+
future.add_done_callback(lambda _: p_bar.update())
|
58
|
+
futures.append(future)
|
59
|
+
|
60
|
+
# 收集结果
|
61
|
+
for i, future in enumerate(futures):
|
62
|
+
try:
|
63
|
+
res, b_success = future.result()
|
64
|
+
except:
|
65
|
+
b_success = False
|
66
|
+
if b_success:
|
67
|
+
res_ls[i] = res
|
68
|
+
else:
|
69
|
+
failed_idx_ls.append(i)
|
70
|
+
|
71
|
+
if b_display_progress:
|
72
|
+
p_bar.close()
|
73
|
+
|
74
|
+
if isinstance(_hook_for_debug, (dict,)):
|
75
|
+
_hook_for_debug.update({
|
76
|
+
"execution_orders": list(_execution_orders),
|
77
|
+
"completion_orders": list(_completion_orders)
|
78
|
+
})
|
79
|
+
|
80
|
+
return res_ls, failed_idx_ls
|
81
|
+
|
82
|
+
|
83
|
+
if __name__ == '__main__':
|
84
|
+
import time
|
85
|
+
|
86
|
+
|
87
|
+
def func_(i):
|
88
|
+
# 模拟部分任务长时间运行,部分任务正常结束
|
89
|
+
if i in [2, 3, 7]:
|
90
|
+
time.sleep(100)
|
91
|
+
else:
|
92
|
+
time.sleep(0.01)
|
93
|
+
print(f"任务 {i} 执行完成")
|
94
|
+
return i * 2
|
95
|
+
|
96
|
+
|
97
|
+
hook_for_debug = dict()
|
98
|
+
a = time.time()
|
99
|
+
results, failed = multi_process_execute(
|
100
|
+
executors=[Executor(func=func_, args=(i,)) for i in range(10)],
|
101
|
+
worker_nums=10,
|
102
|
+
timeout=0.2,
|
103
|
+
_hook_for_debug=hook_for_debug
|
104
|
+
)
|
105
|
+
gap = time.time() - a
|
106
|
+
print("执行结果:", results)
|
107
|
+
print("超时失败的任务索引:", failed)
|
108
|
+
print("调试信息:", hook_for_debug)
|
109
|
+
print("总耗时:", gap)
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import concurrent.futures
|
2
|
+
from multiprocessing import Manager
|
3
|
+
from kevin_toolbox.computer_science.data_structure import Executor
|
4
|
+
from kevin_toolbox.computer_science.algorithm.parallel_and_concurrent.utils import wrapper_for_mt as wrapper
|
5
|
+
from kevin_toolbox.computer_science.algorithm.parallel_and_concurrent.utils import DEFAULT_THREAD_NUMS
|
6
|
+
|
7
|
+
|
8
|
+
def multi_thread_execute(executors, worker_nums=DEFAULT_THREAD_NUMS, b_display_progress=True, timeout=None,
|
9
|
+
_hook_for_debug=None):
|
10
|
+
"""
|
11
|
+
多线程执行
|
12
|
+
|
13
|
+
参数:
|
14
|
+
executors: <list/generator/iterator of Executor> 执行器序列
|
15
|
+
worker_nums: <int> 线程数
|
16
|
+
b_display_progress: <boolean> 是否显示进度条
|
17
|
+
timeout: <int> 每个线程的最大等待时间,单位是s
|
18
|
+
默认为 None,表示允许等待无限长的时间
|
19
|
+
_hook_for_debug: <dict/None> 当设置为非 None 值时,将保存中间的执行信息。
|
20
|
+
包括:
|
21
|
+
- "execution_order": 执行顺序
|
22
|
+
- "completion_order": 完成顺序
|
23
|
+
这些信息与最终结果无关,仅面向更底层的调试需求,任何人都不应依赖该特性
|
24
|
+
返回:
|
25
|
+
res_ls, failed_idx_ls
|
26
|
+
执行结果列表,执行失败的执行器 idx
|
27
|
+
"""
|
28
|
+
executor_ls = []
|
29
|
+
for i in executors:
|
30
|
+
assert isinstance(i, (Executor,))
|
31
|
+
executor_ls.append(i)
|
32
|
+
if b_display_progress:
|
33
|
+
from tqdm import tqdm
|
34
|
+
p_bar = tqdm(total=len(executor_ls))
|
35
|
+
else:
|
36
|
+
p_bar = None
|
37
|
+
|
38
|
+
if isinstance(_hook_for_debug, dict):
|
39
|
+
_execution_orders, _completion_orders = Manager().list(), Manager().list()
|
40
|
+
else:
|
41
|
+
_execution_orders, _completion_orders = None, None
|
42
|
+
|
43
|
+
res_ls = [None] * len(executor_ls)
|
44
|
+
failed_idx_ls = []
|
45
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=worker_nums) as thread_pool:
|
46
|
+
# 提交任务
|
47
|
+
futures = []
|
48
|
+
for i, executor in enumerate(executor_ls):
|
49
|
+
future = thread_pool.submit(wrapper, executor, timeout, i, _execution_orders, _completion_orders)
|
50
|
+
if b_display_progress:
|
51
|
+
future.add_done_callback(lambda _: p_bar.update())
|
52
|
+
futures.append(future)
|
53
|
+
|
54
|
+
# 收集结果
|
55
|
+
for i, future in enumerate(futures):
|
56
|
+
try:
|
57
|
+
res, b_success = future.result()
|
58
|
+
except:
|
59
|
+
b_success = False
|
60
|
+
if b_success:
|
61
|
+
res_ls[i] = res
|
62
|
+
else:
|
63
|
+
failed_idx_ls.append(i)
|
64
|
+
|
65
|
+
if b_display_progress:
|
66
|
+
p_bar.close()
|
67
|
+
|
68
|
+
if isinstance(_hook_for_debug, (dict,)):
|
69
|
+
_hook_for_debug.update({
|
70
|
+
"execution_orders": list(_execution_orders),
|
71
|
+
"completion_orders": list(_completion_orders)
|
72
|
+
})
|
73
|
+
|
74
|
+
return res_ls, failed_idx_ls
|
75
|
+
|
76
|
+
|
77
|
+
if __name__ == '__main__':
|
78
|
+
import time
|
79
|
+
|
80
|
+
|
81
|
+
def func_(i):
|
82
|
+
# 模拟部分任务长时间运行,部分任务正常结束
|
83
|
+
if i in [2, 3, 7]:
|
84
|
+
time.sleep(100)
|
85
|
+
elif i in [4, 5, 6]:
|
86
|
+
time.sleep(0.01)
|
87
|
+
else:
|
88
|
+
time.sleep(0.05)
|
89
|
+
print(f"任务 {i} 执行完成")
|
90
|
+
return i * 2
|
91
|
+
|
92
|
+
|
93
|
+
hook_for_debug = dict()
|
94
|
+
a = time.time()
|
95
|
+
results, failed = multi_thread_execute(
|
96
|
+
executors=[Executor(func=func_, args=(i,)) for i in range(10)],
|
97
|
+
worker_nums=5,
|
98
|
+
timeout=0.2,
|
99
|
+
_hook_for_debug=hook_for_debug
|
100
|
+
)
|
101
|
+
gap = time.time() - a
|
102
|
+
print("执行结果:", results)
|
103
|
+
print("超时失败的任务索引:", failed)
|
104
|
+
print("调试信息:", hook_for_debug)
|
105
|
+
print("总耗时:", gap)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from .wrapper_with_timeout_1 import wrapper_with_timeout_1
|
2
|
+
from .wrapper_with_timeout_2 import wrapper_with_timeout_2
|
3
|
+
|
4
|
+
import signal
|
5
|
+
import multiprocessing
|
6
|
+
|
7
|
+
if callable(getattr(signal, "setitimer", None)):
|
8
|
+
wrapper_for_mp = wrapper_with_timeout_1 # 效率更高,优先选择
|
9
|
+
else:
|
10
|
+
wrapper_for_mp = wrapper_with_timeout_2
|
11
|
+
|
12
|
+
wrapper_for_mt = wrapper_with_timeout_2
|
13
|
+
|
14
|
+
DEFAULT_PROCESS_NUMS = multiprocessing.cpu_count() + 2
|
15
|
+
DEFAULT_THREAD_NUMS = DEFAULT_PROCESS_NUMS * 2
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import signal
|
2
|
+
|
3
|
+
|
4
|
+
# 定义超时异常
|
5
|
+
class TimeoutException(Exception):
|
6
|
+
pass
|
7
|
+
|
8
|
+
|
9
|
+
# 定时器信号处理函数
|
10
|
+
def __alarm_handler(*args, **kwargs):
|
11
|
+
raise TimeoutException("任务超时")
|
12
|
+
|
13
|
+
|
14
|
+
def wrapper_with_timeout_1(executor, timeout=None, idx=-1, _execution_orders=None, _completion_orders=None):
|
15
|
+
"""
|
16
|
+
限制执行时间,使用 multiprocessing.Process 强制终止超时任务
|
17
|
+
该函数仅适用于多进程以及 unix 操作系统
|
18
|
+
|
19
|
+
参数:
|
20
|
+
executor: <Executor>执行器,需实现 run() 方法
|
21
|
+
idx: <int> 任务索引(用于调试)
|
22
|
+
timeout: <int/float>最大等待时间(单位:秒,支持 float)
|
23
|
+
_execution_orders, _completion_orders: 用于记录调试信息的 Manager.list
|
24
|
+
返回:
|
25
|
+
(result, b_success) 若超时或异常则 b_success 为 False
|
26
|
+
"""
|
27
|
+
if _execution_orders is not None:
|
28
|
+
_execution_orders.append(idx)
|
29
|
+
|
30
|
+
# 定时器
|
31
|
+
if timeout is not None:
|
32
|
+
signal.signal(signal.SIGALRM, __alarm_handler)
|
33
|
+
signal.setitimer(signal.ITIMER_REAL, timeout)
|
34
|
+
|
35
|
+
# 执行
|
36
|
+
res, b_success = None, True
|
37
|
+
try:
|
38
|
+
res = executor.run()
|
39
|
+
if _completion_orders is not None:
|
40
|
+
_completion_orders.append(idx)
|
41
|
+
except TimeoutException:
|
42
|
+
b_success = False
|
43
|
+
finally:
|
44
|
+
signal.alarm(0) # 取消定时器
|
45
|
+
return res, b_success
|
46
|
+
|
47
|
+
|
48
|
+
if __name__ == '__main__':
|
49
|
+
import time
|
50
|
+
|
51
|
+
|
52
|
+
def func_(i):
|
53
|
+
if i in [2, 3, 7]:
|
54
|
+
time.sleep(300)
|
55
|
+
else:
|
56
|
+
time.sleep(0.5)
|
57
|
+
return i * 2
|
58
|
+
|
59
|
+
|
60
|
+
from kevin_toolbox.computer_science.data_structure import Executor
|
61
|
+
|
62
|
+
print(wrapper_with_timeout_1(Executor(func=func_, args=(2,)), timeout=1))
|
63
|
+
print(wrapper_with_timeout_1(Executor(func=func_, args=(1,)), timeout=1))
|
64
|
+
|
65
|
+
execution_orders = []
|
66
|
+
completion_orders = []
|
67
|
+
print(wrapper_with_timeout_1(Executor(func=func_, args=(2,)), timeout=1, _execution_orders=execution_orders,
|
68
|
+
_completion_orders=completion_orders))
|
69
|
+
print(execution_orders, completion_orders)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
from multiprocessing import Process, Queue
|
2
|
+
|
3
|
+
|
4
|
+
def __inner_wrapper(q, executor):
|
5
|
+
try:
|
6
|
+
res = executor.run()
|
7
|
+
q.put((res, True))
|
8
|
+
except:
|
9
|
+
q.put((None, False))
|
10
|
+
|
11
|
+
|
12
|
+
def wrapper_with_timeout_2(executor, timeout=None, idx=-1, _execution_orders=None, _completion_orders=None):
|
13
|
+
"""
|
14
|
+
限制执行时间,使用 multiprocessing.Process 强制终止超时任务
|
15
|
+
该函数适用于多线程、多进程以及所有操作系统,但是效率相较于 wrapper_with_timeout_1 较差
|
16
|
+
|
17
|
+
参数:
|
18
|
+
executor: <Executor>执行器,需实现 run() 方法
|
19
|
+
idx: <int> 任务索引(用于调试)
|
20
|
+
timeout: <int/float>最大等待时间(单位:秒,支持 float)
|
21
|
+
_execution_orders, _completion_orders: 用于记录调试信息的 Manager.list
|
22
|
+
返回:
|
23
|
+
(result, b_success) 若超时或异常则 b_success 为 False
|
24
|
+
"""
|
25
|
+
if _execution_orders is not None:
|
26
|
+
_execution_orders.append(idx)
|
27
|
+
|
28
|
+
res, b_success = None, False
|
29
|
+
if timeout is not None:
|
30
|
+
q = Queue()
|
31
|
+
p = Process(target=__inner_wrapper, args=(q, executor))
|
32
|
+
p.start()
|
33
|
+
p.join(timeout) # 最多等待 timeout 秒
|
34
|
+
|
35
|
+
if q.qsize():
|
36
|
+
try:
|
37
|
+
res, b_success = q.get_nowait()
|
38
|
+
except:
|
39
|
+
pass
|
40
|
+
if p.is_alive():
|
41
|
+
p.terminate()
|
42
|
+
p.join()
|
43
|
+
else:
|
44
|
+
try:
|
45
|
+
res, b_success = executor.run(), True
|
46
|
+
except:
|
47
|
+
pass
|
48
|
+
|
49
|
+
if b_success:
|
50
|
+
if _completion_orders is not None:
|
51
|
+
_completion_orders.append(idx)
|
52
|
+
return res, b_success
|
53
|
+
|
54
|
+
|
55
|
+
if __name__ == '__main__':
|
56
|
+
import time
|
57
|
+
|
58
|
+
|
59
|
+
def func_(i):
|
60
|
+
if i in [2, 3, 7]:
|
61
|
+
time.sleep(300)
|
62
|
+
else:
|
63
|
+
time.sleep(0.5)
|
64
|
+
return i * 2
|
65
|
+
|
66
|
+
|
67
|
+
from kevin_toolbox.computer_science.data_structure import Executor
|
68
|
+
|
69
|
+
print(wrapper_with_timeout_2(Executor(func=func_, args=(2,)), timeout=1))
|
70
|
+
print(wrapper_with_timeout_2(Executor(func=func_, args=(1,)), timeout=1))
|
71
|
+
|
72
|
+
execution_orders = []
|
73
|
+
completion_orders = []
|
74
|
+
print(wrapper_with_timeout_2(Executor(func=func_, args=(2,)), timeout=1, _execution_orders=execution_orders,
|
75
|
+
_completion_orders=completion_orders))
|
76
|
+
print(execution_orders, completion_orders)
|
@@ -83,7 +83,7 @@ class Executor:
|
|
83
83
|
# 校验参数
|
84
84
|
# func
|
85
85
|
assert paras["func"] is None or callable(paras["func"]), \
|
86
|
-
f
|
86
|
+
f'func should be callable, but get a {type(paras["func"])}'
|
87
87
|
# args
|
88
88
|
assert isinstance(paras["args"], (list, tuple,)) and isinstance(paras["f_args"], (list, tuple,))
|
89
89
|
for i, f in enumerate(paras["f_args"]):
|
@@ -93,7 +93,7 @@ class Executor:
|
|
93
93
|
assert isinstance(paras["kwargs"], (dict,)) and isinstance(paras["f_kwargs"], (dict,))
|
94
94
|
for k, v in paras["f_kwargs"].items():
|
95
95
|
assert callable(v) and isinstance(k, (str,)), \
|
96
|
-
f"item {
|
96
|
+
f"item {k} in f_kwargs should be (str, callable) pairs, but get a ({type(k)}, {type(v)})"
|
97
97
|
|
98
98
|
# update paras
|
99
99
|
self.paras = paras
|
@@ -0,0 +1 @@
|
|
1
|
+
from .write_excel_with_matrix import write_excel_with_matrix as write_with_matrix
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import os
|
2
|
+
import openpyxl
|
3
|
+
from openpyxl.styles import Alignment, Font, PatternFill
|
4
|
+
from kevin_toolbox.patches.for_os import remove
|
5
|
+
|
6
|
+
|
7
|
+
# excel
|
8
|
+
def write_excel_with_matrix(matrix, file_path=None, file_obj=None, sheet_name="matrix",
|
9
|
+
column_label_ls=None, row_label_ls=None, column_title="", row_title="", main_title=""):
|
10
|
+
"""
|
11
|
+
将矩阵写入到 excel 文件中
|
12
|
+
|
13
|
+
参数:
|
14
|
+
file_path: 要写入到哪个文件
|
15
|
+
file_obj: <openpyxl.Workbook> 文件对象
|
16
|
+
注意!!以上两个参数指定其一即可,同时指定时候,以后者为准。
|
17
|
+
sheet_name: 要写入到哪个sheet页面
|
18
|
+
matrix: <np.array or np.matrix> 矩阵
|
19
|
+
column_label_ls, row_label_ls: 行列标签
|
20
|
+
column_title, row_title: 行列标题
|
21
|
+
main_title: 总标题
|
22
|
+
"""
|
23
|
+
assert file_path is not None or file_obj is not None
|
24
|
+
|
25
|
+
if file_obj is None:
|
26
|
+
file_path = os.path.abspath(os.path.expanduser(file_path))
|
27
|
+
os.makedirs(os.path.dirname(file_path), exist_ok=True)
|
28
|
+
# 判断文件是否存在,不存在则新建,否则读取文件
|
29
|
+
if not os.path.isfile(file_path):
|
30
|
+
wb = openpyxl.Workbook() # 创建文件对象
|
31
|
+
# wb对象创建后,默认含有一个默认的名为 Sheet 的 页面,将其删除
|
32
|
+
ws_ = wb.active
|
33
|
+
wb.remove(ws_)
|
34
|
+
else:
|
35
|
+
wb = openpyxl.load_workbook(file_path)
|
36
|
+
else:
|
37
|
+
assert isinstance(file_obj, openpyxl.Workbook)
|
38
|
+
wb = file_obj
|
39
|
+
# 判断sheet是否存在,不存在则建立,否则先删除再建立
|
40
|
+
if sheet_name in wb.sheetnames:
|
41
|
+
ws = wb[sheet_name]
|
42
|
+
wb.remove(ws)
|
43
|
+
ws = wb.create_sheet(sheet_name)
|
44
|
+
|
45
|
+
# 开始写
|
46
|
+
matrix_r_offset, matrix_c_offset = 1, 1 # 矩阵的起始位置
|
47
|
+
r_offset, c_offset = 1, 1 # 目前的写入位置
|
48
|
+
for i in [main_title, column_title, column_label_ls]:
|
49
|
+
if i:
|
50
|
+
matrix_r_offset += 1
|
51
|
+
for j in [row_title, row_label_ls]:
|
52
|
+
if j:
|
53
|
+
matrix_c_offset += 1
|
54
|
+
# print(matrix)
|
55
|
+
matrix_row_num, matrix_column_num = matrix.shape[0], matrix.shape[1]
|
56
|
+
# 标题
|
57
|
+
alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
58
|
+
if main_title:
|
59
|
+
ws.merge_cells(start_row=r_offset, start_column=1, end_row=r_offset,
|
60
|
+
end_column=matrix_c_offset + matrix_column_num - 1)
|
61
|
+
ws.cell(row=r_offset, column=1).value = main_title
|
62
|
+
ws.cell(row=r_offset, column=1).alignment = alignment
|
63
|
+
ws.cell(row=r_offset, column=1).font = Font(size=10, bold=True, name='微软雅黑', color="000000")
|
64
|
+
r_offset += 1
|
65
|
+
if column_title:
|
66
|
+
ws.merge_cells(start_row=r_offset, start_column=matrix_c_offset, end_row=r_offset,
|
67
|
+
end_column=matrix_c_offset + matrix_column_num - 1)
|
68
|
+
ws.cell(row=r_offset, column=matrix_c_offset).value = column_title
|
69
|
+
ws.cell(row=r_offset, column=matrix_c_offset).alignment = alignment
|
70
|
+
ws.cell(row=r_offset, column=matrix_c_offset).font = Font(size=10, bold=True, name='微软雅黑', color="000000")
|
71
|
+
r_offset += 1
|
72
|
+
if row_title:
|
73
|
+
ws.merge_cells(start_row=matrix_r_offset, start_column=1, end_row=matrix_r_offset + matrix_row_num - 1,
|
74
|
+
end_column=1)
|
75
|
+
ws.cell(row=matrix_r_offset, column=1).value = row_title
|
76
|
+
ws.cell(row=matrix_r_offset, column=1).alignment = alignment
|
77
|
+
ws.cell(row=matrix_r_offset, column=1).font = Font(size=10, bold=True, name='微软雅黑', color="000000")
|
78
|
+
c_offset += 1
|
79
|
+
# 标签
|
80
|
+
if column_label_ls:
|
81
|
+
for i in range(matrix_column_num):
|
82
|
+
ws.cell(row=r_offset, column=matrix_c_offset + i).value = column_label_ls[i]
|
83
|
+
ws.cell(row=r_offset, column=matrix_c_offset + i).alignment = alignment
|
84
|
+
ws.cell(row=r_offset, column=matrix_c_offset + i).fill = PatternFill(patternType="solid",
|
85
|
+
start_color="33CCFF")
|
86
|
+
r_offset += 1
|
87
|
+
if row_label_ls:
|
88
|
+
for i in range(matrix_row_num):
|
89
|
+
ws.cell(row=matrix_r_offset + i, column=c_offset).value = row_label_ls[i]
|
90
|
+
ws.cell(row=matrix_r_offset + i, column=c_offset).alignment = alignment
|
91
|
+
ws.cell(row=matrix_r_offset + i, column=c_offset).fill = PatternFill(patternType="solid",
|
92
|
+
start_color="33CCFF")
|
93
|
+
c_offset += 1
|
94
|
+
# 校验,可省略
|
95
|
+
if not (c_offset == matrix_c_offset and r_offset == matrix_r_offset):
|
96
|
+
print("wrong here")
|
97
|
+
for r_ in range(matrix_row_num):
|
98
|
+
for c_ in range(matrix_column_num):
|
99
|
+
ws.cell(row=matrix_r_offset + r_, column=matrix_c_offset + c_).value = matrix[r_][c_]
|
100
|
+
|
101
|
+
if file_path is not None:
|
102
|
+
remove(file_path, ignore_errors=True)
|
103
|
+
wb.save(file_path)
|
104
|
+
|
105
|
+
return wb
|
{kevin-toolbox-dev-1.4.5 → kevin-toolbox-dev-1.4.7}/kevin_toolbox/data_flow/file/json_/read_json.py
RENAMED
@@ -23,6 +23,7 @@ def read_json(file_path=None, file_obj=None, converters=None, b_use_suggested_co
|
|
23
23
|
"""
|
24
24
|
assert file_path is not None or file_obj is not None
|
25
25
|
if file_path is not None:
|
26
|
+
file_path = os.path.abspath(os.path.expanduser(file_path))
|
26
27
|
assert os.path.isfile(file_path), f'file {file_path} not found'
|
27
28
|
file_obj = open(file_path, 'r')
|
28
29
|
elif isinstance(file_obj, (BytesIO,)):
|