kevin-toolbox-dev 1.0.2__tar.gz → 1.0.11__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.0.11/PKG-INFO +61 -0
- kevin-toolbox-dev-1.0.11/README.md +43 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/__init__.py +2 -2
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +1 -1
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +1 -1
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/__init__.py +6 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/count_leaf_node_nums.py +21 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_hash.py +38 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_leaf_nodes.py +22 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_value_by_name.py +44 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/set_value_by_name.py +55 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/traverse.py +56 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils → kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm}/for_seq/flatten_list.py +2 -2
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/locks/__init__.py +1 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +74 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +2 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +244 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +42 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +1 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/statistician/_init_var.py +27 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +93 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +9 -30
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +1 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +19 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +1 -1
- kevin-toolbox-dev-1.0.11/kevin_toolbox/data_flow/file/json_/write_json.py +19 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +10 -3
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/test/test_version.py +4 -2
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/version/compare_version.py +4 -2
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/version/parse_version.py +5 -10
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +3 -5
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/utils/__init__.py +1 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/math/utils/spilt_integer_most_evenly.py +13 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_numpy/linalg/__init__.py +3 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +12 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_numpy/linalg/normalize.py +20 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_numpy/linalg/softmax.py +11 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_optuna/__init__.py +1 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +78 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_os/remove.py +2 -1
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_torch/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/concat.py +1 -1
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +1 -1
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +1 -1
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +1 -1
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/tile.py +1 -1
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/where.py +2 -2
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_torch/nn/__init__.py +1 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +11 -0
- kevin-toolbox-dev-1.0.11/kevin_toolbox_dev.egg-info/PKG-INFO +61 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox_dev.egg-info/SOURCES.txt +30 -9
- kevin-toolbox-dev-1.0.2/PKG-INFO +0 -82
- kevin-toolbox-dev-1.0.2/README.md +0 -64
- kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -1
- kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils/get_hash.py +0 -31
- kevin-toolbox-dev-1.0.2/kevin_toolbox/data_flow/file/json_/write_json.py +0 -10
- kevin-toolbox-dev-1.0.2/kevin_toolbox/developing/visualization/multiple_axis.py +0 -53
- kevin-toolbox-dev-1.0.2/kevin_toolbox/env_info/of_torch.py +0 -6
- kevin-toolbox-dev-1.0.2/kevin_toolbox_dev.egg-info/PKG-INFO +0 -82
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils → kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm}/for_dict/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils → kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm}/for_dict/deep_update.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils → kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm}/for_seq/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/computer_science/algorithm/utils → kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm}/for_seq/get_subsets.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/data_flow → kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/utils}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/dangerous/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/data_flow/core → kevin-toolbox-dev-1.0.11/kevin_toolbox/data_flow}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/data_flow/file/kevin_notation/test → kevin-toolbox-dev-1.0.11/kevin_toolbox/data_flow/core}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/data_flow/file/kevin_notation/test/test_data → kevin-toolbox-dev-1.0.11/kevin_toolbox/data_flow/file/kevin_notation/test}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/developing/numerical_characteristics → kevin-toolbox-dev-1.0.11/kevin_toolbox/data_flow/file/kevin_notation/test/test_data}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/decorator/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/developing/visualization → kevin-toolbox-dev-1.0.11/kevin_toolbox/developing/numerical_characteristics}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/temperate/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/developing/test.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/version/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/cache.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/transform/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
- {kevin-toolbox-dev-1.0.2/kevin_toolbox/patches/for_torch → kevin-toolbox-dev-1.0.11/kevin_toolbox/patches/for_numpy}/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_os/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_test/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/pyproject.toml +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/setup.cfg +0 -0
- {kevin-toolbox-dev-1.0.2 → kevin-toolbox-dev-1.0.11}/setup.py +0 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: kevin-toolbox-dev
|
3
|
+
Version: 1.0.11
|
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
|
+
Classifier: License :: OSI Approved :: MIT License
|
12
|
+
Classifier: Programming Language :: Python
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
14
|
+
Requires-Python: >=3.6
|
15
|
+
Description-Content-Type: text/markdown
|
16
|
+
Provides-Extra: plot
|
17
|
+
Provides-Extra: rest
|
18
|
+
|
19
|
+
# kevin_toolbox
|
20
|
+
|
21
|
+
一个通用的工具代码包集合
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
环境要求
|
26
|
+
|
27
|
+
```shell
|
28
|
+
numpy>=1.19
|
29
|
+
pytorch>=1.2
|
30
|
+
```
|
31
|
+
|
32
|
+
安装方法:
|
33
|
+
|
34
|
+
```shell
|
35
|
+
pip install kevin-toolbox --no-dependencies
|
36
|
+
```
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
[项目地址 Repo](https://github.com/cantbeblank96/kevin_toolbox)
|
41
|
+
|
42
|
+
[使用指南 User_Guide](./notes/User_Guide.md)
|
43
|
+
|
44
|
+
[免责声明 Disclaimer](./notes/Disclaimer.md)
|
45
|
+
|
46
|
+
[版本更新记录](./notes/Release_Record.md):
|
47
|
+
|
48
|
+
- v 1.0.11(2023-6-11)
|
49
|
+
- kevin_toolbox.data_flow.file
|
50
|
+
- 让 kevin_notation 中的 column_dict 方式支持单行写入
|
51
|
+
- 将原来 computer_science.algorithm.utils 下的 for_dict 和 for_seq 移动到 computer_science.algorithm 下。
|
52
|
+
- computer_science.algorithm.for_nested_dict_list
|
53
|
+
- 将原来 utils 下面向 嵌套字典列表 类型数据的算法移动至到 utils.for_nested_dict_list 下,包括:get_hash()、get_value_by_name()、set_value_by_name()、traverse()
|
54
|
+
- 改进 set_value_by_name(),增加强制赋值模式,相应参数为 b_force
|
55
|
+
- 改进 traverse() 增加了 b_use_name_as_idx 参数以控制传入 match_cond/converter 中 idx 参数的类型(传入整体的 name 还是父节点的 index 或 key)
|
56
|
+
- add count_leaf_node_nums(),用于获取嵌套字典列表 var 中所有叶节点的数量。
|
57
|
+
- add get_leaf_nodes(),用于获取嵌套字典列表 var 中所有叶节点。该函数基于新版的 traverse() 来实现。
|
58
|
+
- 添加了单元测试
|
59
|
+
|
60
|
+
|
61
|
+
|
@@ -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.0.11(2023-6-11)
|
31
|
+
- kevin_toolbox.data_flow.file
|
32
|
+
- 让 kevin_notation 中的 column_dict 方式支持单行写入
|
33
|
+
- 将原来 computer_science.algorithm.utils 下的 for_dict 和 for_seq 移动到 computer_science.algorithm 下。
|
34
|
+
- computer_science.algorithm.for_nested_dict_list
|
35
|
+
- 将原来 utils 下面向 嵌套字典列表 类型数据的算法移动至到 utils.for_nested_dict_list 下,包括:get_hash()、get_value_by_name()、set_value_by_name()、traverse()
|
36
|
+
- 改进 set_value_by_name(),增加强制赋值模式,相应参数为 b_force
|
37
|
+
- 改进 traverse() 增加了 b_use_name_as_idx 参数以控制传入 match_cond/converter 中 idx 参数的类型(传入整体的 name 还是父节点的 index 或 key)
|
38
|
+
- add count_leaf_node_nums(),用于获取嵌套字典列表 var 中所有叶节点的数量。
|
39
|
+
- add get_leaf_nodes(),用于获取嵌套字典列表 var 中所有叶节点。该函数基于新版的 traverse() 来实现。
|
40
|
+
- 添加了单元测试
|
41
|
+
|
42
|
+
|
43
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
__version__ = "1.0.
|
1
|
+
__version__ = "1.0.11"
|
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 1702102643 --verbose 0'
|
16
16
|
)
|
@@ -2,7 +2,7 @@ import pytest
|
|
2
2
|
import numpy as np
|
3
3
|
from kevin_toolbox.patches.for_test import check_consistency
|
4
4
|
from kevin_toolbox.computer_science.algorithm.combinatorial_optimization import get_subset_with_largest_product
|
5
|
-
from kevin_toolbox.computer_science.algorithm.
|
5
|
+
from kevin_toolbox.computer_science.algorithm.for_seq import get_subsets
|
6
6
|
|
7
7
|
|
8
8
|
def test_get_subset_with_largest_product():
|
@@ -2,7 +2,7 @@ import pytest
|
|
2
2
|
import numpy as np
|
3
3
|
from kevin_toolbox.patches.for_test import check_consistency
|
4
4
|
from kevin_toolbox.computer_science.algorithm.combinatorial_optimization import zero_one_knapsack_problem
|
5
|
-
from kevin_toolbox.computer_science.algorithm.
|
5
|
+
from kevin_toolbox.computer_science.algorithm.for_seq import get_subsets
|
6
6
|
|
7
7
|
|
8
8
|
def test_zero_one_knapsack_problem():
|
@@ -0,0 +1,21 @@
|
|
1
|
+
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list import traverse
|
2
|
+
|
3
|
+
|
4
|
+
def count_leaf_node_nums(var):
|
5
|
+
"""
|
6
|
+
获取嵌套字典列表 var 中所有叶节点的数量
|
7
|
+
|
8
|
+
参数:
|
9
|
+
var: 待处理数据
|
10
|
+
当 var 不是 dict 或者 list 时,直接将 var 视为根节点,叶节点数量视为 0
|
11
|
+
"""
|
12
|
+
nums = 0
|
13
|
+
|
14
|
+
def count(_, __, v):
|
15
|
+
nonlocal nums
|
16
|
+
if not isinstance(v, (list, dict,)):
|
17
|
+
nums += 1
|
18
|
+
return False
|
19
|
+
|
20
|
+
traverse(var=var, match_cond=count, action_mode="skip", b_use_name_as_idx=False)
|
21
|
+
return nums
|
kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_hash.py
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
import hashlib
|
2
|
+
import json
|
3
|
+
import warnings
|
4
|
+
|
5
|
+
|
6
|
+
def get_hash(item, length=None, mode="md5"):
|
7
|
+
"""
|
8
|
+
将输入 item 序列化,再计算出 hash 值
|
9
|
+
本函数对于无序的字典能够提供唯一的 hash 值
|
10
|
+
|
11
|
+
参数:
|
12
|
+
item:
|
13
|
+
length: <int> 返回 hash 字符串的前多少位
|
14
|
+
默认为 None,返回所有结果
|
15
|
+
mode: <str> 支持 hashlib 中提供的 hash 方法
|
16
|
+
当设置为 None 时候表示不使用 hash 处理而直接返回序列化后的字符串
|
17
|
+
"""
|
18
|
+
assert mode is None or mode in hashlib.__all__
|
19
|
+
|
20
|
+
try:
|
21
|
+
hash_ = json.dumps(item, sort_keys=True).encode('utf-8')
|
22
|
+
except:
|
23
|
+
warnings.warn(
|
24
|
+
f"the item {type(item)} unable to be serialized by json, reproducibility is no longer guaranteed!",
|
25
|
+
UserWarning
|
26
|
+
)
|
27
|
+
hash_ = f"{item}".encode('utf-8')
|
28
|
+
if mode is not None:
|
29
|
+
worker = eval(f'hashlib.{mode}()')
|
30
|
+
worker.update(hash_)
|
31
|
+
hash_ = worker.hexdigest()
|
32
|
+
hash_ = hash_ if length is None else hash_[:length]
|
33
|
+
return hash_
|
34
|
+
|
35
|
+
|
36
|
+
if __name__ == '__main__':
|
37
|
+
print(get_hash(item={2, 4}, mode="sha512"))
|
38
|
+
print(get_hash(item=[2, 4], mode="sha512"))
|
@@ -0,0 +1,22 @@
|
|
1
|
+
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list import traverse
|
2
|
+
|
3
|
+
|
4
|
+
def get_leaf_nodes(var):
|
5
|
+
"""
|
6
|
+
获取嵌套字典列表 var 中所有叶节点
|
7
|
+
以列表 [(name,value), ...] 形式返回,其中名字 name 的解释方式参考 get_value_by_name() 介绍
|
8
|
+
|
9
|
+
参数:
|
10
|
+
var: 待处理数据
|
11
|
+
当 var 不是 dict 或者 list 时,返回空列表
|
12
|
+
"""
|
13
|
+
res = []
|
14
|
+
|
15
|
+
def func(_, idx, v):
|
16
|
+
nonlocal res
|
17
|
+
if not isinstance(v, (list, dict,)):
|
18
|
+
res.append((idx, v))
|
19
|
+
return False
|
20
|
+
|
21
|
+
traverse(var=var, match_cond=func, action_mode="skip", b_use_name_as_idx=True)
|
22
|
+
return res
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import re
|
2
|
+
|
3
|
+
|
4
|
+
def get_value_by_name(var, name):
|
5
|
+
"""
|
6
|
+
通过解释名字得到取值方式,然后到 var 中获取对应部分的值。
|
7
|
+
|
8
|
+
参数:
|
9
|
+
var: 任意支持索引取值的变量
|
10
|
+
name: <string> 取值方式。
|
11
|
+
由多组 "<解释方式><键>" 组成。
|
12
|
+
解释方式支持以下几种:
|
13
|
+
"@" 使用 eval() 读取键
|
14
|
+
":" 使用 str() 读取键
|
15
|
+
"|" 依次尝试 str() 和 eval() 两种方式
|
16
|
+
示例:
|
17
|
+
"@100" 表示读取 var[eval("100")]
|
18
|
+
":epoch" 表示读取 var["epoch"]
|
19
|
+
"|1+1" 表示首先尝试读取 var["1+1"],若不成功则尝试读取 var[eval("1+1")]
|
20
|
+
假设 var=dict(acc=[0.66,0.78,0.99]),如果你想读取 var["acc"][1] => 0.78,那么可以将 name 写成:
|
21
|
+
":acc@1" 或者 "|acc|1" 等。
|
22
|
+
注意,在 name 的开头也可以添加任意非解释方式的字符,本函数将直接忽略它们,比如下面的:
|
23
|
+
"var:acc@1" 和 "xxxx|acc|1" 也能正常读取。
|
24
|
+
"""
|
25
|
+
assert isinstance(name, (str,))
|
26
|
+
|
27
|
+
key_ls = re.split('[:@|]', name)
|
28
|
+
# assert len(key_ls) > 0
|
29
|
+
flag_idx = len(key_ls[0])
|
30
|
+
for key in key_ls[1:]:
|
31
|
+
flag = name[flag_idx]
|
32
|
+
flag_idx += len(key) + 1
|
33
|
+
#
|
34
|
+
if flag == "@":
|
35
|
+
var = var[eval(key)]
|
36
|
+
elif flag == "|":
|
37
|
+
try:
|
38
|
+
var = var[key]
|
39
|
+
except:
|
40
|
+
var = var[eval(key)]
|
41
|
+
else: # ":"
|
42
|
+
var = var[key]
|
43
|
+
|
44
|
+
return var
|
@@ -0,0 +1,55 @@
|
|
1
|
+
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list import get_value_by_name
|
2
|
+
|
3
|
+
|
4
|
+
def set_value_by_name(var, name, value, b_force=False):
|
5
|
+
"""
|
6
|
+
通过解释名字得到取值方式,然后到 var 中将对应部分的值修改为 value。
|
7
|
+
|
8
|
+
参数:
|
9
|
+
var: 任意支持索引赋值的变量
|
10
|
+
name: <string> 取值方式
|
11
|
+
由多组 "<解释方式><键>" 组成。
|
12
|
+
解释方式支持以下几种:
|
13
|
+
"@" 使用 eval() 读取键
|
14
|
+
":" 使用 str() 读取键
|
15
|
+
"|" 依次尝试 str() 和 eval() 两种方式
|
16
|
+
示例:
|
17
|
+
"@100" 表示指向 var[eval("100")]
|
18
|
+
":epoch" 表示指向 var["epoch"]
|
19
|
+
"|1+1" 表示首先尝试指向 var["1+1"],若不成功则尝试指向 var[eval("1+1")]
|
20
|
+
假设 var=dict(acc=[0.66,0.78,0.99]),如果你想将 var["acc"][1] 设置为 100,那么可以将 name 写成:
|
21
|
+
":acc@1" 或者 "|acc|1" 等。
|
22
|
+
注意,在 name 的开头也可以添加任意非解释方式的字符,本函数将直接忽略它们,比如下面的:
|
23
|
+
"var:acc@1" 和 "xxxx|acc|1" 也能正常写入。
|
24
|
+
value: 待赋给的值
|
25
|
+
b_force: <boolean> 当无法设置时,是否尝试创建或者修改节点
|
26
|
+
默认为 False,
|
27
|
+
当设置为 True,可能会对 var 的结构产生不可逆的改变,请谨慎使用。新创建或者修改的节点的类型是 dict。
|
28
|
+
"""
|
29
|
+
assert isinstance(name, (str,))
|
30
|
+
key = name
|
31
|
+
for char in ":@|":
|
32
|
+
key = key.rsplit(char, 1)[-1]
|
33
|
+
assert len(key) < len(name), f'invalid name: {name}'
|
34
|
+
|
35
|
+
try:
|
36
|
+
item = get_value_by_name(var=var, name=name[:-1 - len(key)])
|
37
|
+
|
38
|
+
flag = name[-1 - len(key)]
|
39
|
+
key_t = key
|
40
|
+
if flag == "@":
|
41
|
+
key_t = eval(key)
|
42
|
+
elif flag == "|":
|
43
|
+
try:
|
44
|
+
_ = item[key]
|
45
|
+
except:
|
46
|
+
key_t = eval(key)
|
47
|
+
|
48
|
+
item[key_t] = value
|
49
|
+
except:
|
50
|
+
if not b_force:
|
51
|
+
raise ValueError(f'The location pointed to by name {name} does not exist in var')
|
52
|
+
else:
|
53
|
+
var = set_value_by_name(var=var, name=name[:-1 - len(key)], value={key: value}, b_force=b_force)
|
54
|
+
|
55
|
+
return var
|
kevin-toolbox-dev-1.0.11/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/traverse.py
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
def traverse(var, match_cond, action_mode="remove", converter=None, b_use_name_as_idx=False):
|
2
|
+
"""
|
3
|
+
遍历 var 找到符合 match_cond 的元素,将其按照 action_mode 指定的操作进行处理
|
4
|
+
|
5
|
+
参数:
|
6
|
+
var: 待处理数据
|
7
|
+
当 var 不是 dict 或者 list 时,将直接返回 var 而不做处理
|
8
|
+
match_cond: <func> 元素的匹配条件
|
9
|
+
函数类型为 def(parent_type, idx, value): xxxx
|
10
|
+
其中:
|
11
|
+
parent_type 该元素源自哪种结构体,有两个可能传入的值: list,dict
|
12
|
+
idx 该元素在结构体中的位置
|
13
|
+
当 b_use_name_as_idx=False 时,
|
14
|
+
对于列表是 index,对于字典是 key
|
15
|
+
当为 True 时,传入的是元素在整体结构中的 name 位置,name的格式和含义参考
|
16
|
+
get_value_by_name() 中的介绍
|
17
|
+
value 元素的值
|
18
|
+
action_mode: <str> 如何对匹配上的元素进行处理
|
19
|
+
目前支持:
|
20
|
+
"remove" 将该元素移除
|
21
|
+
"replace" 将该元素替换为 converter() 处理后的结果
|
22
|
+
"skip": 不进行任何操作
|
23
|
+
converter: <func> 参见 action_mode 中的 "replace" 模式
|
24
|
+
函数类型为 def(idx, value): xxxx
|
25
|
+
其中 idx 和 value 的含义参见参数 match_cond 介绍
|
26
|
+
b_use_name_as_idx <boolean> 对于 match_cond/converter 中的 idx 参数,是传入整体的 name 还是父节点的 index 或 key。
|
27
|
+
默认为 False
|
28
|
+
"""
|
29
|
+
assert callable(match_cond)
|
30
|
+
assert action_mode in {"replace", "remove", "skip"}
|
31
|
+
if action_mode == "replace":
|
32
|
+
assert callable(converter)
|
33
|
+
|
34
|
+
return recursive_(var, match_cond, action_mode, converter, b_use_name_as_idx, "")
|
35
|
+
|
36
|
+
|
37
|
+
def recursive_(var, match_cond, action_mode, converter, b_use_name_as_idx, pre_name):
|
38
|
+
if isinstance(var, (list, dict)):
|
39
|
+
items = reversed(list(enumerate(var))) if isinstance(var, list) else list(var.items())
|
40
|
+
for k, v in items:
|
41
|
+
if b_use_name_as_idx:
|
42
|
+
idx = f'{pre_name}@{k}' if isinstance(var, list) else f'{pre_name}:{k}'
|
43
|
+
else:
|
44
|
+
idx = k
|
45
|
+
if match_cond(type(var), idx, v):
|
46
|
+
if action_mode == "remove":
|
47
|
+
var.pop(k)
|
48
|
+
elif action_mode == "replace":
|
49
|
+
var[k] = converter(idx, v)
|
50
|
+
else:
|
51
|
+
pass
|
52
|
+
else:
|
53
|
+
var[k] = recursive_(v, match_cond, action_mode, converter, b_use_name_as_idx, idx)
|
54
|
+
else:
|
55
|
+
pass
|
56
|
+
return var
|
@@ -22,7 +22,7 @@ def _recursion(ls, depth):
|
|
22
22
|
res = []
|
23
23
|
for i in ls:
|
24
24
|
if isinstance(i, (list, tuple,)):
|
25
|
-
res.extend(_recursion(i, depth=depth - 1))
|
25
|
+
res.extend(_recursion(i, depth=depth if depth is None else depth - 1))
|
26
26
|
else:
|
27
27
|
res.append(i)
|
28
28
|
return res
|
@@ -30,4 +30,4 @@ def _recursion(ls, depth):
|
|
30
30
|
|
31
31
|
if __name__ == '__main__':
|
32
32
|
a = [[1, 2, (3, 4)], [(5,)], 6]
|
33
|
-
print(flatten_list(ls=a, depth=
|
33
|
+
print(flatten_list(ls=a, depth=None))
|
@@ -0,0 +1 @@
|
|
1
|
+
from .mutex_lock import Mutex_Lock
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import fcntl
|
2
|
+
import os
|
3
|
+
import time
|
4
|
+
from kevin_toolbox.patches import for_os
|
5
|
+
|
6
|
+
|
7
|
+
class Mutex_Lock:
|
8
|
+
"""
|
9
|
+
互斥锁
|
10
|
+
基于非阻塞锁实现,可以避免死锁
|
11
|
+
"""
|
12
|
+
|
13
|
+
def __init__(self, **kwargs):
|
14
|
+
"""
|
15
|
+
参数:
|
16
|
+
lock_name: <str> string or file_path
|
17
|
+
当为单纯的字符串时,将在当前文件夹下创建锁文件
|
18
|
+
wait_interval: <int/float> 处于阻塞状态时,获取锁的每次尝试之间的时间间隔,单位为 second。
|
19
|
+
默认为 1e-1
|
20
|
+
|
21
|
+
"""
|
22
|
+
# 默认参数
|
23
|
+
paras = {
|
24
|
+
# 必要参数
|
25
|
+
"lock_name": ".233",
|
26
|
+
"wait_interval": 1e-1,
|
27
|
+
}
|
28
|
+
|
29
|
+
# 获取参数
|
30
|
+
paras.update(kwargs)
|
31
|
+
|
32
|
+
# 校验参数
|
33
|
+
self.paras = paras
|
34
|
+
|
35
|
+
if os.path.dirname(self.paras["lock_name"]):
|
36
|
+
os.makedirs(os.path.dirname(self.paras["lock_name"]), exist_ok=True)
|
37
|
+
self.fd = open(self.paras["lock_name"], 'a')
|
38
|
+
self.state = dict(acquired=False)
|
39
|
+
|
40
|
+
def acquire(self, b_block_if_fail=True, time_out=None):
|
41
|
+
start_time = time.time()
|
42
|
+
while True:
|
43
|
+
try:
|
44
|
+
# 尝试获取文件锁
|
45
|
+
fcntl.flock(self.fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
46
|
+
self.state["acquired"] = True
|
47
|
+
break
|
48
|
+
except IOError:
|
49
|
+
# 获取锁失败
|
50
|
+
if not b_block_if_fail or (time_out is not None and time.time() - start_time > time_out):
|
51
|
+
# 超时或者设置了不阻塞
|
52
|
+
self.state["acquired"] = False
|
53
|
+
break
|
54
|
+
else:
|
55
|
+
# 未超时,等待一段时间后重试
|
56
|
+
time.sleep(self.paras["wait_interval"])
|
57
|
+
return self.state["acquired"]
|
58
|
+
|
59
|
+
def release(self, b_cool_down=True):
|
60
|
+
assert self.state["acquired"], \
|
61
|
+
f'Please use acquire() to acquire the lock before calling release()'
|
62
|
+
fcntl.flock(self.fd, fcntl.LOCK_UN)
|
63
|
+
if b_cool_down:
|
64
|
+
time.sleep(self.paras["wait_interval"] * 2) # 冷却当前锁,让其他排队中的锁有机会获取资源,避免当前锁对资源的长期占用
|
65
|
+
|
66
|
+
@property
|
67
|
+
def acquired(self):
|
68
|
+
return self.state["acquired"]
|
69
|
+
|
70
|
+
def __del__(self):
|
71
|
+
try:
|
72
|
+
self.fd.close()
|
73
|
+
except:
|
74
|
+
pass
|