kevin-toolbox-dev 1.1.2__tar.gz → 1.1.3__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.1.3/PKG-INFO +58 -0
- kevin-toolbox-dev-1.1.3/README.md +40 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/__init__.py +2 -2
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/copy_.py +2 -1
- kevin-toolbox-dev-1.1.3/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/traverse.py +148 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/value_parser/eval_references.py +15 -6
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/scheduler/strategy_manager.py +30 -14
- kevin-toolbox-dev-1.1.3/kevin_toolbox_dev.egg-info/PKG-INFO +58 -0
- kevin-toolbox-dev-1.1.2/PKG-INFO +0 -70
- kevin-toolbox-dev-1.1.2/README.md +0 -52
- kevin-toolbox-dev-1.1.2/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/traverse.py +0 -69
- kevin-toolbox-dev-1.1.2/kevin_toolbox_dev.egg-info/PKG-INFO +0 -70
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_get_subset_with_largest_product.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/test/test_zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/combinatorial_optimization/zero_one_knapsack_problem.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_dict/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_dict/deep_update.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/count_leaf_node_nums.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_hash.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_nodes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/get_value_by_name.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/name_handler/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/name_handler/build_name.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/name_handler/escape_node.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/name_handler/parse_name.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/set_value_by_name.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/value_parser/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/value_parser/cal_relation_between_references.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/value_parser/parse_references.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_seq/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_seq/flatten_list.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/for_seq/get_subsets.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/locks/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/locks/mutex_lock.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/pareto_front/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/pareto_front/get_pareto_points_idx.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/registration/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/registration/registry.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/scheduler/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/scheduler/trigger.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/search/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/search/binary_search.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/statistician/_init_var.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/statistician/average_accumulator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/statistician/exponential_moving_average.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/algorithm/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/data_structure/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/computer_science/data_structure/executor.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/dangerous/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/dangerous/dump_into_pickle_with_executor_attached.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/cache/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/cache/cache_manager_for_iterator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/reader/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/reader/file_iterative_reader.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/reader/unified_reader.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/core/reader/unified_reader_base.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/converter/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/converter/convert_dict_key_to_number.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/converter/convert_ndarray_to_list.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/converter/integrate.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/read_json.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/json_/write_json.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/converter.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_reader.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/kevin_notation_writer.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/read.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_0.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/test/test_data/data_all.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/test/test_kevin_notation.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/data_flow/file/kevin_notation/write.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/decorator/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/decorator/restore_original_work_path.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/consumer.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/for_cvf.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/getter.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/graph.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/node.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/producer.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/producer_consumer/sender.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/singleton/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/design_pattern/singleton/singleton_for_uid.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/general_matrix_multiplication.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/numerical_characteristics/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/numerical_characteristics/iou.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/temperate/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/temperate/iterator_base.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/temperate/my_iterator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/temperate/my_iterator_base.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/temperate/sequence_map_base.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/developing/test.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/check_validity_and_uninstall.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/check_version_and_update.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/test/test_version.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/version/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/version/compare_version.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/version/parse_version.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/env_info/version/sort_version_ls.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/__old_version/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/__old_version/cal_iou_between_box.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/boolean_algebra_for_boxes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/cal_area_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/cal_iou_between_boxes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/convert_boxes_from_coord_to_grid_index.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/detect_collision.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/detect_collision_among_boxes_ls.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/detect_collision_inside_boxes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/detect_overlap.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/geometry/for_boxes/get_ticks_of_boxes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/analysis/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/analysis/get_fail_case_from_iterator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/dummy/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/dummy/dummy_data.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/build_generator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/build_iterator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/factory.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_axis.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/along_diagonal.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_all.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__by_block/of_triangle.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_block.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/get_executor_ls/by_samples.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/dataset/face/verification/merge.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/accumulator_for_cfm.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_cfm_iteratively_by_chunk.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/cal_tpr_and_fpr.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/convert.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/machine_learning/statistician/binary_classification/confusion_matrices/merge_cfm_ls.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/concat_and_split/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/concat_and_split/computational_tree.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/concat_and_split/concat_crops_into_whole.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/concat_and_split/split_whole_into_crops.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/convert/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/convert/convert_format.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/generate/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/generate/generate_integrated_api.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/generate/generate_shuffled_index_ls.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/generate/generate_z_pattern_indices_ls.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/coordinates/generate/normal_indices_generator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/reshape/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/reshape/flatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/reshape/merge_blocks.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/reshape/split_blocks.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/reshape/unflatten_along_pattern.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/transpose/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/transpose/get_inverse_of_transpose_index_ls.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/dimension/transpose/transpose_inside_axis.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/cache.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/get_primes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/test/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/test/test_get_greatest_common_divisor.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/test/test_get_primes.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/number_theory/test/test_prime_factorization.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/transform/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/transform/dct/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/transform/dct/dct_calculator.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/transform/dct/generate_dct_trans_matrix.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/transform/scaling_and_shift/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/transform/scaling_and_shift/scaling.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/utils/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/utils/convert_dtype.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/utils/get_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/utils/get_function_table_for_array_and_tensor.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/utils/set_crop_by_box.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/math/utils/spilt_integer_most_evenly.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_matplotlib/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_matplotlib/add_trajectory_2d.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_matplotlib/add_trajectory_3d.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_matplotlib/arrow3d.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_numpy/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_numpy/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_numpy/linalg/cos_similar.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_numpy/linalg/normalize.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_numpy/linalg/softmax.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_optuna/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_optuna/sample_from_feasible_domain.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_os/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_os/remove.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_test/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_test/check_consistency.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/concat.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/linalg/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/linalg/norm.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/linalg/svd.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/nn/sequential.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/tile.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/compatible/where.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/math/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/math/get_y_at_x.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/math/my_around.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/nn/__init__.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox/patches/for_torch/nn/lambda_layer.py +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox_dev.egg-info/SOURCES.txt +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox_dev.egg-info/dependency_links.txt +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox_dev.egg-info/requires.txt +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/kevin_toolbox_dev.egg-info/top_level.txt +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/pyproject.toml +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/setup.cfg +0 -0
- {kevin-toolbox-dev-1.1.2 → kevin-toolbox-dev-1.1.3}/setup.py +0 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: kevin-toolbox-dev
|
3
|
+
Version: 1.1.3
|
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.1.3(2023-06-30)
|
49
|
+
- computer_science.algorithm.for_nested_dict_list
|
50
|
+
- 在 traverse() 中新增了traversal_mode 参数用于控制遍历的顺序,目前支持三种模式: "dfs_pre_order" 深度优先-先序遍历、"dfs_post_order" 深度优先-后序遍历、以及 "bfs" 宽度优先。
|
51
|
+
- 在单元测试中新增了对 traverse() 中 traversal_mode 参数的测试项目。
|
52
|
+
- value_parser
|
53
|
+
- 修改 eval_references() 中 converter_for_ref 参数的行为,从原来只是作为计算结果前对算式中引用节点值的预处理,变成直接改变被引用节点的值。亦即原来不会修改原被引用节点的值,现在变为会修改原节点的值了。
|
54
|
+
- computer_science.algorithm.scheduler
|
55
|
+
- 改进 Strategy_Manager
|
56
|
+
- 使用 `<eval>` 来标记需要使用 eval() 函数读取的字符串。相对于旧版通过 `<eval>` 来标记需要被读取为函数的字符串,使用 `<eval>` 不仅可以读取函数,也可以读取更多的数据结构。
|
57
|
+
- 在通过 add() 添加策略时即对 strategy 中被 `<eval>` 标记的键值进行解释,而非等到后续每次 cal() 时再进行解释,提高了效率。
|
58
|
+
- 修改了对应的单元测试。
|
@@ -0,0 +1,40 @@
|
|
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.1.3(2023-06-30)
|
31
|
+
- computer_science.algorithm.for_nested_dict_list
|
32
|
+
- 在 traverse() 中新增了traversal_mode 参数用于控制遍历的顺序,目前支持三种模式: "dfs_pre_order" 深度优先-先序遍历、"dfs_post_order" 深度优先-后序遍历、以及 "bfs" 宽度优先。
|
33
|
+
- 在单元测试中新增了对 traverse() 中 traversal_mode 参数的测试项目。
|
34
|
+
- value_parser
|
35
|
+
- 修改 eval_references() 中 converter_for_ref 参数的行为,从原来只是作为计算结果前对算式中引用节点值的预处理,变成直接改变被引用节点的值。亦即原来不会修改原被引用节点的值,现在变为会修改原节点的值了。
|
36
|
+
- computer_science.algorithm.scheduler
|
37
|
+
- 改进 Strategy_Manager
|
38
|
+
- 使用 `<eval>` 来标记需要使用 eval() 函数读取的字符串。相对于旧版通过 `<eval>` 来标记需要被读取为函数的字符串,使用 `<eval>` 不仅可以读取函数,也可以读取更多的数据结构。
|
39
|
+
- 在通过 add() 添加策略时即对 strategy 中被 `<eval>` 标记的键值进行解释,而非等到后续每次 cal() 时再进行解释,提高了效率。
|
40
|
+
- 修改了对应的单元测试。
|
@@ -1,4 +1,4 @@
|
|
1
|
-
__version__ = "1.1.
|
1
|
+
__version__ = "1.1.3"
|
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 1703667553 --verbose 0'
|
16
16
|
)
|
@@ -16,7 +16,8 @@ def copy_(var, b_deepcopy=False):
|
|
16
16
|
return copy.deepcopy(var)
|
17
17
|
|
18
18
|
return traverse(var=[var], match_cond=lambda _, __, value: isinstance(value, (list, dict,)),
|
19
|
-
action_mode="replace", converter=lambda _, value: value.copy(),
|
19
|
+
action_mode="replace", converter=lambda _, value: value.copy(),
|
20
|
+
traversal_mode="dfs_pre_order", b_traverse_matched_element=True)[0]
|
20
21
|
|
21
22
|
|
22
23
|
if __name__ == '__main__':
|
kevin-toolbox-dev-1.1.3/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/traverse.py
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list.name_handler import escape_node
|
3
|
+
|
4
|
+
|
5
|
+
class ACTION_MODE(Enum):
|
6
|
+
remove = 1
|
7
|
+
replace = 2
|
8
|
+
skip = 3
|
9
|
+
|
10
|
+
|
11
|
+
class TRAVERSAL_MODE(Enum):
|
12
|
+
dfs_pre_order = 1
|
13
|
+
dfs_post_order = 2
|
14
|
+
bfs = 3
|
15
|
+
|
16
|
+
|
17
|
+
def traverse(var, match_cond, action_mode="remove", converter=None,
|
18
|
+
b_use_name_as_idx=False, traversal_mode="dfs_pre_order", b_traverse_matched_element=False):
|
19
|
+
"""
|
20
|
+
遍历 var 找到符合 match_cond 的元素,将其按照 action_mode 指定的操作进行处理
|
21
|
+
|
22
|
+
参数:
|
23
|
+
var: 待处理数据
|
24
|
+
当 var 不是 dict 或者 list 时,将直接返回 var 而不做处理
|
25
|
+
match_cond: <func> 元素的匹配条件
|
26
|
+
函数类型为 def(parent_type, idx, value): ...
|
27
|
+
其中:
|
28
|
+
parent_type 该元素源自哪种结构体,有两个可能传入的值: list,dict
|
29
|
+
idx 该元素在结构体中的位置
|
30
|
+
当 b_use_name_as_idx=False 时,
|
31
|
+
对于列表是 index,对于字典是 key
|
32
|
+
当为 True 时,传入的是元素在整体结构中的 name 位置,name的格式和含义参考
|
33
|
+
name_handler.parse_name() 中的介绍
|
34
|
+
value 元素的值
|
35
|
+
action_mode: <str> 如何对匹配上的元素进行处理
|
36
|
+
目前支持:
|
37
|
+
"remove" 将该元素移除
|
38
|
+
"replace" 将该元素替换为 converter() 处理后的结果
|
39
|
+
"skip": 不进行任何操作
|
40
|
+
converter: <func> 参见 action_mode 中的 "replace" 模式
|
41
|
+
函数类型为 def(idx, value): ...
|
42
|
+
其中 idx 和 value 的含义参见参数 match_cond 介绍
|
43
|
+
traversal_mode: <str> 遍历的模式、顺序
|
44
|
+
目前支持:
|
45
|
+
"dfs_pre_order" 深度优先、先序遍历
|
46
|
+
"dfs_post_order" 深度优先、后序遍历
|
47
|
+
"bfs" 宽度优先
|
48
|
+
默认为 "dfs_pre_order"
|
49
|
+
b_use_name_as_idx: <boolean> 对于 match_cond/converter 中的 idx 参数,是传入整体的 name 还是父节点的 index 或 key。
|
50
|
+
默认为 False
|
51
|
+
b_traverse_matched_element <boolean> 对于匹配上的元素,经过处理后,是否继续遍历该元素的内容
|
52
|
+
默认为 False
|
53
|
+
"""
|
54
|
+
assert callable(match_cond)
|
55
|
+
assert action_mode in ACTION_MODE.__members__.keys()
|
56
|
+
action_mode = ACTION_MODE.__members__[action_mode]
|
57
|
+
if action_mode is ACTION_MODE.replace:
|
58
|
+
assert callable(converter)
|
59
|
+
#
|
60
|
+
assert traversal_mode in TRAVERSAL_MODE.__members__.keys()
|
61
|
+
traversal_mode = TRAVERSAL_MODE.__members__[traversal_mode]
|
62
|
+
|
63
|
+
if traversal_mode is TRAVERSAL_MODE.bfs:
|
64
|
+
return _bfs(var, match_cond, action_mode, converter, b_use_name_as_idx, b_traverse_matched_element)
|
65
|
+
else:
|
66
|
+
return _dfs(var, match_cond, action_mode, converter, b_use_name_as_idx, traversal_mode,
|
67
|
+
b_traverse_matched_element, "")
|
68
|
+
|
69
|
+
|
70
|
+
def _bfs(var, match_cond, action_mode, converter, b_use_name_as_idx, b_traverse_matched_element):
|
71
|
+
temp = [("", var)]
|
72
|
+
|
73
|
+
while len(temp):
|
74
|
+
pre_name, i = temp.pop(0)
|
75
|
+
if isinstance(i, (list, dict)):
|
76
|
+
keys = list(range(len(i)) if isinstance(i, list) else i.keys())
|
77
|
+
keys.reverse() # 反过来便于 列表 弹出元素
|
78
|
+
idx_ls = _gen_idx(i, keys, b_use_name_as_idx, pre_name)
|
79
|
+
|
80
|
+
# 匹配&处理
|
81
|
+
for k, idx in zip(keys, idx_ls):
|
82
|
+
b_matched, b_popped = _deal(i, k, idx, match_cond, converter, action_mode)
|
83
|
+
if b_popped or (b_matched and not b_traverse_matched_element):
|
84
|
+
continue
|
85
|
+
# 添加到队尾
|
86
|
+
temp.append((idx, i[k]))
|
87
|
+
|
88
|
+
return var
|
89
|
+
|
90
|
+
|
91
|
+
def _dfs(var, match_cond, action_mode, converter,
|
92
|
+
b_use_name_as_idx, traversal_mode, b_traverse_matched_element, pre_name):
|
93
|
+
if isinstance(var, (list, dict)):
|
94
|
+
keys = list(range(len(var)) if isinstance(var, list) else var.keys())
|
95
|
+
keys.reverse() # 反过来便于 列表 弹出元素
|
96
|
+
idx_ls = _gen_idx(var, keys, b_use_name_as_idx, pre_name)
|
97
|
+
|
98
|
+
#
|
99
|
+
if traversal_mode is TRAVERSAL_MODE.dfs_pre_order:
|
100
|
+
# 先序
|
101
|
+
# 匹配&处理
|
102
|
+
deal_res_ls = []
|
103
|
+
for k, idx in zip(keys, idx_ls):
|
104
|
+
deal_res_ls.append(_deal(var, k, idx, match_cond, converter, action_mode))
|
105
|
+
# 递归遍历
|
106
|
+
for (b_matched, b_popped), k, idx in zip(deal_res_ls, keys, idx_ls):
|
107
|
+
if b_popped or (b_matched and not b_traverse_matched_element):
|
108
|
+
continue
|
109
|
+
var[k] = _dfs(var[k], match_cond, action_mode, converter, b_use_name_as_idx, traversal_mode,
|
110
|
+
b_traverse_matched_element, idx)
|
111
|
+
else:
|
112
|
+
# 后序
|
113
|
+
# 递归遍历
|
114
|
+
for k, idx in zip(keys, idx_ls):
|
115
|
+
var[k] = _dfs(var[k], match_cond, action_mode, converter, b_use_name_as_idx, traversal_mode,
|
116
|
+
b_traverse_matched_element, idx)
|
117
|
+
# 匹配&处理
|
118
|
+
for k, idx in zip(keys, idx_ls):
|
119
|
+
_deal(var, k, idx, match_cond, converter, action_mode)
|
120
|
+
else:
|
121
|
+
pass
|
122
|
+
return var
|
123
|
+
|
124
|
+
|
125
|
+
def _deal(var, k, idx, match_cond, converter, action_mode):
|
126
|
+
"""处理节点"""
|
127
|
+
# 匹配
|
128
|
+
b_matched = match_cond(type(var), idx, var[k])
|
129
|
+
b_popped = False
|
130
|
+
# 处理
|
131
|
+
if b_matched:
|
132
|
+
if action_mode is ACTION_MODE.remove:
|
133
|
+
var.pop(k)
|
134
|
+
b_popped = True
|
135
|
+
elif action_mode is ACTION_MODE.replace:
|
136
|
+
var[k] = converter(idx, var[k])
|
137
|
+
else:
|
138
|
+
pass
|
139
|
+
return b_matched, b_popped
|
140
|
+
|
141
|
+
|
142
|
+
def _gen_idx(var, keys, b_use_name_as_idx, pre_name):
|
143
|
+
if b_use_name_as_idx:
|
144
|
+
method = "@" if isinstance(var, list) else ":"
|
145
|
+
idx_ls = [f'{pre_name}{method}{escape_node(node=k, b_reversed=False, times=1)}' for k in keys]
|
146
|
+
else:
|
147
|
+
idx_ls = keys
|
148
|
+
return idx_ls
|
@@ -9,8 +9,12 @@ def eval_references(var, node_s, order, converter_for_ref=None, converter_for_re
|
|
9
9
|
var:
|
10
10
|
node_s: <dict> 引用节点,parse_references() 返回的结果
|
11
11
|
order: <list of name> 计算顺序,cal_relation_between_references() 返回的结果
|
12
|
-
converter_for_ref: <callable>
|
13
|
-
形如 def(idx, v): ... 的函数,其中 idx 是被引用节点的名字,v
|
12
|
+
converter_for_ref: <callable> 对被引用节点施加何种处理
|
13
|
+
形如 def(idx, v): ... 的函数,其中 idx 是被引用节点的名字,v是其值,
|
14
|
+
返回的结果将替换掉被引用节点中原来的值。
|
15
|
+
注意:
|
16
|
+
- 处理后得到的结果将替换掉原引用节点的值。(重要所以说两次)
|
17
|
+
- 当同一节点被多次引用时,仅会被处理、替换一次。
|
14
18
|
converter_for_res: <callable> 对计算结果施加何种处理
|
15
19
|
形如 def(idx, v): ... 的函数,其中 idx 是节点的名字,v是计算结果
|
16
20
|
"""
|
@@ -18,13 +22,18 @@ def eval_references(var, node_s, order, converter_for_ref=None, converter_for_re
|
|
18
22
|
assert converter_for_ref is None or callable(converter_for_ref)
|
19
23
|
assert converter_for_res is None or callable(converter_for_res)
|
20
24
|
|
25
|
+
processed_ref_nodes = set()
|
26
|
+
|
21
27
|
for name in order:
|
22
28
|
details = node_s[name]
|
23
29
|
# 获取依赖值
|
24
|
-
for k,
|
25
|
-
v_new = get_value_by_name(var=var, name=
|
26
|
-
if converter_for_ref is not None:
|
27
|
-
v_new = converter_for_ref(
|
30
|
+
for k, idx in details["paras"].items():
|
31
|
+
v_new = get_value_by_name(var=var, name=idx)
|
32
|
+
if converter_for_ref is not None and idx not in processed_ref_nodes:
|
33
|
+
v_new = converter_for_ref(idx, v_new)
|
34
|
+
# 赋值
|
35
|
+
set_value_by_name(var=var, name=idx, value=v_new, b_force=False)
|
36
|
+
processed_ref_nodes.add(idx)
|
28
37
|
details["paras"][k] = v_new
|
29
38
|
# 计算
|
30
39
|
res = eval(details["expression"], details["paras"])
|
@@ -2,7 +2,7 @@ import random
|
|
2
2
|
import torch
|
3
3
|
import numpy as np
|
4
4
|
import copy
|
5
|
-
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list import set_value_by_name, get_value_by_name
|
5
|
+
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list import set_value_by_name, get_value_by_name, traverse
|
6
6
|
|
7
7
|
|
8
8
|
class Strategy_Manager:
|
@@ -20,9 +20,9 @@ class Strategy_Manager:
|
|
20
20
|
":lr": {
|
21
21
|
# 当 key 满足 trigger_value 时,将 ":lr" 指向的部分替换为 value
|
22
22
|
0: 0.1,
|
23
|
-
# 如果是以 <
|
23
|
+
# 如果是以 <eval> 为开头的字符串,则视为函数并将 value 解释为函数执行后的结果
|
24
24
|
# 函数中 t, p 参数将被分别传入 trigger_value 和 para_value
|
25
|
-
"<
|
25
|
+
"<eval>lambda t: t%100==0": "<eval>lambda p, t: p*0.1",
|
26
26
|
},
|
27
27
|
},
|
28
28
|
override=False,
|
@@ -93,10 +93,11 @@ class Strategy_Manager:
|
|
93
93
|
300: {
|
94
94
|
":ratio_ls@1": 1e-5,
|
95
95
|
}, # 在 epoch=300 时,将 ratio_ls[1] 设置为 1e-5
|
96
|
-
"<
|
97
|
-
":lr": "<
|
98
|
-
}, # 当键为 string 且 开头带有 <
|
99
|
-
#
|
96
|
+
"<eval>lambda t: t%100==0": {
|
97
|
+
":lr": "<eval>lambda p, t: p*0.1",
|
98
|
+
}, # 当键为 string 且 开头带有 <eval> 标记时候,将使用 eval() 函数读取该字符串,
|
99
|
+
# 当键为 callable 的函数时,在匹配过程中向该函数输入触发值 t 和当前元素的值 p,
|
100
|
+
# 当函数返回True视为匹配成功。
|
100
101
|
# 比如上式表示的是:每经过 100 epoch,也就是当 epoch%100==0 时,lr 在原来的基础上乘上0.1。
|
101
102
|
# 函数匹配的的优先级低于直接的值匹配。
|
102
103
|
...
|
@@ -109,7 +110,7 @@ class Strategy_Manager:
|
|
109
110
|
"__trigger_name": "epoch",
|
110
111
|
":lr": {
|
111
112
|
0: 0.1,
|
112
|
-
"<
|
113
|
+
"<eval>lambda t: t%100==0": "<eval>lambda p, t: p*0.1",
|
113
114
|
},
|
114
115
|
":ratio_ls": {
|
115
116
|
0: [1e-3, 1e-2],
|
@@ -146,6 +147,21 @@ class Strategy_Manager:
|
|
146
147
|
temp[t_key][p_key] = strategy[p_key][t_key]
|
147
148
|
strategy = temp
|
148
149
|
|
150
|
+
def deal_eval_str(x):
|
151
|
+
return eval(x[6:]) if isinstance(x, (str,)) and x.startswith("<eval>") else x
|
152
|
+
|
153
|
+
# 使用 eval() 读取带 "<eval>" 标签的键or值
|
154
|
+
def converter(_, value):
|
155
|
+
if isinstance(value, (dict,)):
|
156
|
+
res = {deal_eval_str(k): deal_eval_str(v) for k, v in value.items()}
|
157
|
+
else:
|
158
|
+
res = deal_eval_str(value)
|
159
|
+
return res
|
160
|
+
|
161
|
+
strategy = traverse(var=[strategy], match_cond=lambda _, __, value: isinstance(value, (dict, str,)),
|
162
|
+
action_mode="replace", converter=converter, traversal_mode="dfs_post_order",
|
163
|
+
b_use_name_as_idx=False, b_traverse_matched_element=True)[0]
|
164
|
+
|
149
165
|
# 将策略添加到 database
|
150
166
|
old_strategy = self.database.get(_trigger_name, dict())
|
151
167
|
for t_key, item in strategy.items():
|
@@ -187,7 +203,7 @@ class Strategy_Manager:
|
|
187
203
|
action_s = dict() # {p_name: p_value, ...}
|
188
204
|
# 使用匹配函数
|
189
205
|
for key, p_s in strategy.items():
|
190
|
-
if
|
206
|
+
if callable(key) and key(t_value):
|
191
207
|
action_s.update({i: j for i, j in p_s.items() if i not in action_s})
|
192
208
|
# 直接匹配
|
193
209
|
if t_value in strategy:
|
@@ -200,9 +216,9 @@ class Strategy_Manager:
|
|
200
216
|
for t_name, action_s in sorted(action_s_all.items(), key=lambda x: x[0]):
|
201
217
|
t_value = trigger_state[t_name]
|
202
218
|
for name, p_value in copy.deepcopy(action_s):
|
203
|
-
if
|
219
|
+
if callable(p_value):
|
204
220
|
raw_value = get_value_by_name(var=var, name=name)
|
205
|
-
p_value =
|
221
|
+
p_value = p_value(raw_value, t_value)
|
206
222
|
set_value_by_name(var=var, name=name, value=p_value)
|
207
223
|
|
208
224
|
return var, action_s_all
|
@@ -217,7 +233,7 @@ if __name__ == '__main__':
|
|
217
233
|
"__trigger_name": "epoch",
|
218
234
|
":lr": {
|
219
235
|
# 0: 0.1,
|
220
|
-
"<
|
236
|
+
"<eval>lambda t: t%100==0": "<eval>lambda p, t: p*0.1",
|
221
237
|
},
|
222
238
|
})
|
223
239
|
sm.add(strategy={
|
@@ -230,8 +246,8 @@ if __name__ == '__main__':
|
|
230
246
|
300: {
|
231
247
|
":ratio_ls@1": 1e-5,
|
232
248
|
},
|
233
|
-
# "<
|
234
|
-
# ":lr": "<
|
249
|
+
# "<eval>lambda t: t%100==0": {
|
250
|
+
# ":lr": "<eval>lambda p, t: p*0.1",
|
235
251
|
# },
|
236
252
|
}, override=False)
|
237
253
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: kevin-toolbox-dev
|
3
|
+
Version: 1.1.3
|
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.1.3(2023-06-30)
|
49
|
+
- computer_science.algorithm.for_nested_dict_list
|
50
|
+
- 在 traverse() 中新增了traversal_mode 参数用于控制遍历的顺序,目前支持三种模式: "dfs_pre_order" 深度优先-先序遍历、"dfs_post_order" 深度优先-后序遍历、以及 "bfs" 宽度优先。
|
51
|
+
- 在单元测试中新增了对 traverse() 中 traversal_mode 参数的测试项目。
|
52
|
+
- value_parser
|
53
|
+
- 修改 eval_references() 中 converter_for_ref 参数的行为,从原来只是作为计算结果前对算式中引用节点值的预处理,变成直接改变被引用节点的值。亦即原来不会修改原被引用节点的值,现在变为会修改原节点的值了。
|
54
|
+
- computer_science.algorithm.scheduler
|
55
|
+
- 改进 Strategy_Manager
|
56
|
+
- 使用 `<eval>` 来标记需要使用 eval() 函数读取的字符串。相对于旧版通过 `<eval>` 来标记需要被读取为函数的字符串,使用 `<eval>` 不仅可以读取函数,也可以读取更多的数据结构。
|
57
|
+
- 在通过 add() 添加策略时即对 strategy 中被 `<eval>` 标记的键值进行解释,而非等到后续每次 cal() 时再进行解释,提高了效率。
|
58
|
+
- 修改了对应的单元测试。
|
kevin-toolbox-dev-1.1.2/PKG-INFO
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: kevin-toolbox-dev
|
3
|
-
Version: 1.1.2
|
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.1.2(2023-06-27)【bug fix】
|
49
|
-
|
50
|
-
- computer_science.algorithm.for_nested_dict_list
|
51
|
-
- 改进 get_value_by_name()
|
52
|
-
- 新增了参数 b_pop 用于支持取值的同时将该值从 var 中移除
|
53
|
-
- 新增了参数 default 用于设置取值失败时是报错还是返回默认值
|
54
|
-
- computer_science.algorithm.registration
|
55
|
-
- Registry
|
56
|
-
- 【bug fix】修复了问题:当已有实例的 uid 为正整数 n,同时 cls.__counter 为 n 时,不指定 uid 再创建实例将错误地返回 uid=n 的已有实例而不是新建一个。
|
57
|
-
- 将 self.pop() 函数的功能合并到 self.get(... ,b_pop=...) 中
|
58
|
-
- computer_science.algorithm.scheduler
|
59
|
-
- 改进 Trigger
|
60
|
-
- 使用 Registry 来管理触发目标
|
61
|
-
- 新增 self.unbind() 函数来解除绑定
|
62
|
-
- 在 update_by_state() 中新增了 target_names 参数来决定调用哪些目标
|
63
|
-
- 新增 Trigger 的状态管理相关函数
|
64
|
-
- self.clear_state_dict(): 清除 Trigger 中保存的状态
|
65
|
-
- self.load_state_dict(): 加载
|
66
|
-
- self.state_dict(): 获取
|
67
|
-
- load_state_dict 和 state_dict 的接口名称是为了和 pytorch 中模型、优化器的状态加载、获取保持一致。
|
68
|
-
|
69
|
-
|
70
|
-
|
@@ -1,52 +0,0 @@
|
|
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.1.2(2023-06-27)【bug fix】
|
31
|
-
|
32
|
-
- computer_science.algorithm.for_nested_dict_list
|
33
|
-
- 改进 get_value_by_name()
|
34
|
-
- 新增了参数 b_pop 用于支持取值的同时将该值从 var 中移除
|
35
|
-
- 新增了参数 default 用于设置取值失败时是报错还是返回默认值
|
36
|
-
- computer_science.algorithm.registration
|
37
|
-
- Registry
|
38
|
-
- 【bug fix】修复了问题:当已有实例的 uid 为正整数 n,同时 cls.__counter 为 n 时,不指定 uid 再创建实例将错误地返回 uid=n 的已有实例而不是新建一个。
|
39
|
-
- 将 self.pop() 函数的功能合并到 self.get(... ,b_pop=...) 中
|
40
|
-
- computer_science.algorithm.scheduler
|
41
|
-
- 改进 Trigger
|
42
|
-
- 使用 Registry 来管理触发目标
|
43
|
-
- 新增 self.unbind() 函数来解除绑定
|
44
|
-
- 在 update_by_state() 中新增了 target_names 参数来决定调用哪些目标
|
45
|
-
- 新增 Trigger 的状态管理相关函数
|
46
|
-
- self.clear_state_dict(): 清除 Trigger 中保存的状态
|
47
|
-
- self.load_state_dict(): 加载
|
48
|
-
- self.state_dict(): 获取
|
49
|
-
- load_state_dict 和 state_dict 的接口名称是为了和 pytorch 中模型、优化器的状态加载、获取保持一致。
|
50
|
-
|
51
|
-
|
52
|
-
|
kevin-toolbox-dev-1.1.2/kevin_toolbox/computer_science/algorithm/for_nested_dict_list/traverse.py
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
from kevin_toolbox.computer_science.algorithm.for_nested_dict_list.name_handler import escape_node
|
2
|
-
|
3
|
-
|
4
|
-
def traverse(var, match_cond, action_mode="remove", converter=None,
|
5
|
-
b_use_name_as_idx=False, b_traverse_matched_element=False):
|
6
|
-
"""
|
7
|
-
遍历 var 找到符合 match_cond 的元素,将其按照 action_mode 指定的操作进行处理
|
8
|
-
|
9
|
-
参数:
|
10
|
-
var: 待处理数据
|
11
|
-
当 var 不是 dict 或者 list 时,将直接返回 var 而不做处理
|
12
|
-
match_cond: <func> 元素的匹配条件
|
13
|
-
函数类型为 def(parent_type, idx, value): ...
|
14
|
-
其中:
|
15
|
-
parent_type 该元素源自哪种结构体,有两个可能传入的值: list,dict
|
16
|
-
idx 该元素在结构体中的位置
|
17
|
-
当 b_use_name_as_idx=False 时,
|
18
|
-
对于列表是 index,对于字典是 key
|
19
|
-
当为 True 时,传入的是元素在整体结构中的 name 位置,name的格式和含义参考
|
20
|
-
name_handler.parse_name() 中的介绍
|
21
|
-
value 元素的值
|
22
|
-
action_mode: <str> 如何对匹配上的元素进行处理
|
23
|
-
目前支持:
|
24
|
-
"remove" 将该元素移除
|
25
|
-
"replace" 将该元素替换为 converter() 处理后的结果
|
26
|
-
"skip": 不进行任何操作
|
27
|
-
converter: <func> 参见 action_mode 中的 "replace" 模式
|
28
|
-
函数类型为 def(idx, value): ...
|
29
|
-
其中 idx 和 value 的含义参见参数 match_cond 介绍
|
30
|
-
b_use_name_as_idx: <boolean> 对于 match_cond/converter 中的 idx 参数,是传入整体的 name 还是父节点的 index 或 key。
|
31
|
-
默认为 False
|
32
|
-
b_traverse_matched_element <boolean> 对于匹配上的元素,经过处理后,是否继续遍历该元素的内容
|
33
|
-
默认为 False
|
34
|
-
"""
|
35
|
-
assert callable(match_cond)
|
36
|
-
assert action_mode in {"replace", "remove", "skip"}
|
37
|
-
if action_mode == "replace":
|
38
|
-
assert callable(converter)
|
39
|
-
|
40
|
-
return recursive_(var, match_cond, action_mode, converter, b_use_name_as_idx, b_traverse_matched_element, "")
|
41
|
-
|
42
|
-
|
43
|
-
def recursive_(var, match_cond, action_mode, converter, b_use_name_as_idx, b_traverse_matched_element, pre_name):
|
44
|
-
if isinstance(var, (list, dict)):
|
45
|
-
items = reversed(list(enumerate(var))) if isinstance(var, list) else list(var.items())
|
46
|
-
for k, v in items:
|
47
|
-
if b_use_name_as_idx:
|
48
|
-
method = "@" if isinstance(var, list) else ":"
|
49
|
-
idx = f'{pre_name}{method}{escape_node(node=k, b_reversed=False, times=1)}'
|
50
|
-
else:
|
51
|
-
idx = k
|
52
|
-
# 匹配
|
53
|
-
b_matched = match_cond(type(var), idx, v)
|
54
|
-
# 处理
|
55
|
-
if b_matched:
|
56
|
-
if action_mode == "remove":
|
57
|
-
var.pop(k)
|
58
|
-
elif action_mode == "replace":
|
59
|
-
var[k] = converter(idx, v)
|
60
|
-
else:
|
61
|
-
pass
|
62
|
-
# 递归遍历
|
63
|
-
if b_matched and not b_traverse_matched_element:
|
64
|
-
continue
|
65
|
-
var[k] = recursive_(var[k], match_cond, action_mode, converter, b_use_name_as_idx,
|
66
|
-
b_traverse_matched_element, idx)
|
67
|
-
else:
|
68
|
-
pass
|
69
|
-
return var
|