pyglove 0.4.5.dev202504040809__tar.gz → 0.5.0.dev202601100810__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.
Potentially problematic release.
This version of pyglove might be problematic. Click here for more details.
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/PKG-INFO +8 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/__init__.py +1 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/__init__.py +11 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/errors.py +2 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/execution.py +6 -5
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/execution_test.py +4 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/permissions.py +17 -16
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/base.py +7 -3
- pyglove-0.5.0.dev202601100810/pyglove/core/io/file_system.py +957 -0
- pyglove-0.5.0.dev202601100810/pyglove/core/io/file_system_test.py +695 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/logging.py +74 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/logging_test.py +12 -21
- pyglove-0.5.0.dev202601100810/pyglove/core/monitoring.py +657 -0
- pyglove-0.5.0.dev202601100810/pyglove/core/monitoring_test.py +289 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/__init__.py +8 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/base.py +95 -37
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/base_test.py +3 -3
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/dict.py +33 -14
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/dict_test.py +49 -0
- pyglove-0.5.0.dev202601100810/pyglove/core/symbolic/error_info.py +127 -0
- pyglove-0.5.0.dev202601100810/pyglove/core/symbolic/error_info_test.py +92 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/functor.py +3 -4
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/list.py +17 -3
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/list_test.py +24 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/object.py +20 -3
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/object_test.py +41 -10
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/ref.py +19 -7
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/ref_test.py +94 -7
- pyglove-0.5.0.dev202601100810/pyglove/core/symbolic/unknown_symbols.py +147 -0
- pyglove-0.5.0.dev202601100810/pyglove/core/symbolic/unknown_symbols_test.py +100 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/__init__.py +3 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/annotation_conversion.py +9 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/annotation_conversion_test.py +19 -24
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/annotation_future_test.py +15 -5
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/class_schema.py +51 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/class_schema_test.py +16 -5
- pyglove-0.5.0.dev202601100810/pyglove/core/typing/json_schema.py +553 -0
- pyglove-0.5.0.dev202601100810/pyglove/core/typing/json_schema_test.py +973 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/type_conversion.py +17 -3
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/type_conversion_test.py +7 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/value_specs.py +52 -15
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/value_specs_test.py +99 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/__init__.py +2 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/contextual.py +9 -4
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/contextual_test.py +10 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/docstr_utils_test.py +0 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/error_utils.py +81 -65
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/error_utils_test.py +0 -56
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/formatting.py +20 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/formatting_test.py +26 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/json_conversion.py +377 -68
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/json_conversion_test.py +146 -13
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/text_color_test.py +5 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/timing_test.py +2 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/base.py +7 -4
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/base_test.py +7 -5
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/label.py +18 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/label_test.py +1 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/tab.py +77 -1
- pyglove-0.5.0.dev202601100810/pyglove/core/views/html/controls/tab_test.py +196 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/tree_view.py +1 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/base_test.py +1 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove.egg-info/PKG-INFO +8 -1
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove.egg-info/SOURCES.txt +8 -0
- pyglove-0.5.0.dev202601100810/pyglove.egg-info/requires.txt +10 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/setup.py +36 -14
- pyglove-0.4.5.dev202504040809/pyglove/core/io/file_system.py +0 -507
- pyglove-0.4.5.dev202504040809/pyglove/core/io/file_system_test.py +0 -253
- pyglove-0.4.5.dev202504040809/pyglove/core/views/html/controls/tab_test.py +0 -87
- pyglove-0.4.5.dev202504040809/pyglove.egg-info/requires.txt +0 -2
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/LICENSE +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/README.md +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/errors_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/function_generation.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/function_generation_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/parsing.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/parsing_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/permissions_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/detouring/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/detouring/class_detour.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/detouring/class_detour_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/base_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/categorical.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/categorical_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/custom.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/custom_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/deduping.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/deduping_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/dna_generator.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/dna_generator_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/numerical.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/numerical_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/random.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/random_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/space.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/space_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/sweeping.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/geno/sweeping_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/categorical.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/categorical_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/custom.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/custom_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/derived.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/derived_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/dynamic_evaluation.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/dynamic_evaluation_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/evolvable.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/evolvable_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/iter.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/iter_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/numerical.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/numerical_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/object_template.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/hyper/object_template_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/io/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/io/sequence.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/io/sequence_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/object_factory.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/object_factory_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/pattern_based.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/pattern_based_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/rule_based.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/patching/rule_based_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/boilerplate.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/boilerplate_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/class_wrapper.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/class_wrapper_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/compounding.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/compounding_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/contextual_object.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/contextual_object_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/diff.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/diff_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/flags.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/flags_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/functor_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/inferred.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/inferred_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/origin.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/origin_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/pure_symbolic.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/symbolize.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/symbolic/symbolize_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/backend.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/backend_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/early_stopping.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/local_backend.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/protocols.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/protocols_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/sample.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/tuning/sample_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/annotated.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/annotated_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/callable_ext.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/callable_ext_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/callable_signature.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/callable_signature_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/custom_typing.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/inspect.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/inspect_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/key_specs.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/key_specs_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/pytype_support.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/typed_missing.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/typing/typed_missing_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/common_traits.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/common_traits_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/docstr_utils.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/hierarchical.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/hierarchical_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/missing.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/missing_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/text_color.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/thread_local.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/thread_local_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/timing.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/value_location.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/utils/value_location_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/base_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/progress_bar.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/progress_bar_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/tooltip.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/controls/tooltip_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/views/html/tree_view_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/early_stopping/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/early_stopping/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/early_stopping/base_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/early_stopping/step_wise.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/early_stopping/step_wise_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/hill_climb.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/hill_climb_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/mutators.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/mutators_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/neat.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/neat_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/nsga2.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/nsga2_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/recombinators.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/recombinators_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/regularized_evolution.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/regularized_evolution_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/selectors.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/selectors_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/where.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/evolution/where_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/mutfun/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/mutfun/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/mutfun/base_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/mutfun/basic_ops.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/mutfun/basic_ops_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/__init__.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/base.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/base_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/maths.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/maths_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/randoms.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/randoms_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/step_wise.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/ext/scalars/step_wise_test.py +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove.egg-info/dependency_links.txt +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove.egg-info/top_level.txt +0 -0
- {pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyglove
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0.dev202601100810
|
|
4
4
|
Summary: PyGlove: A library for manipulating Python objects.
|
|
5
5
|
Home-page: https://github.com/google/pyglove
|
|
6
6
|
Author: PyGlove Authors
|
|
@@ -23,6 +23,12 @@ Description-Content-Type: text/markdown
|
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
Requires-Dist: docstring-parser>=0.12
|
|
25
25
|
Requires-Dist: termcolor>=1.1.0
|
|
26
|
+
Provides-Extra: all
|
|
27
|
+
Requires-Dist: docstring-parser>=0.12; extra == "all"
|
|
28
|
+
Requires-Dist: termcolor>=1.1.0; extra == "all"
|
|
29
|
+
Requires-Dist: fsspec>=2023.3.0; extra == "all"
|
|
30
|
+
Provides-Extra: io
|
|
31
|
+
Requires-Dist: fsspec>=2023.3.0; extra == "io"
|
|
26
32
|
Dynamic: author
|
|
27
33
|
Dynamic: author-email
|
|
28
34
|
Dynamic: classifier
|
|
@@ -32,6 +38,7 @@ Dynamic: home-page
|
|
|
32
38
|
Dynamic: keywords
|
|
33
39
|
Dynamic: license
|
|
34
40
|
Dynamic: license-file
|
|
41
|
+
Dynamic: provides-extra
|
|
35
42
|
Dynamic: requires-dist
|
|
36
43
|
Dynamic: summary
|
|
37
44
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2025 The PyGlove Authors
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -91,6 +91,9 @@ InferredValue = symbolic.InferredValue
|
|
|
91
91
|
Ref = symbolic.Ref
|
|
92
92
|
maybe_ref = symbolic.maybe_ref
|
|
93
93
|
|
|
94
|
+
# Symbolic error info
|
|
95
|
+
ErrorInfo = symbolic.ErrorInfo
|
|
96
|
+
|
|
94
97
|
# Decorator for declaring symbolic. members for `pg.Object`.
|
|
95
98
|
members = symbolic.members
|
|
96
99
|
|
|
@@ -303,6 +306,7 @@ format = utils.format # pylint: disable=redefined-builtin
|
|
|
303
306
|
print = utils.print # pylint: disable=redefined-builtin
|
|
304
307
|
docstr = utils.docstr
|
|
305
308
|
catch_errors = utils.catch_errors
|
|
309
|
+
match_error = utils.match_error
|
|
306
310
|
timeit = utils.timeit
|
|
307
311
|
|
|
308
312
|
contextual_override = utils.contextual_override
|
|
@@ -349,6 +353,12 @@ from pyglove.core import coding
|
|
|
349
353
|
|
|
350
354
|
from pyglove.core import logging
|
|
351
355
|
|
|
356
|
+
#
|
|
357
|
+
# Symbols from `monitoring.py`.
|
|
358
|
+
#
|
|
359
|
+
|
|
360
|
+
from pyglove.core import monitoring
|
|
361
|
+
|
|
352
362
|
# pylint: enable=g-import-not-at-top
|
|
353
363
|
# pylint: enable=reimported
|
|
354
364
|
# pylint: enable=unused-import
|
{pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/errors.py
RENAMED
|
@@ -28,7 +28,7 @@ class CodeError(RuntimeError):
|
|
|
28
28
|
def __init__(
|
|
29
29
|
self,
|
|
30
30
|
code: str,
|
|
31
|
-
cause:
|
|
31
|
+
cause: BaseException,
|
|
32
32
|
):
|
|
33
33
|
self.code = code
|
|
34
34
|
self.cause = cause
|
|
@@ -93,7 +93,7 @@ class CodeError(RuntimeError):
|
|
|
93
93
|
class SerializationError(RuntimeError):
|
|
94
94
|
"""Object serialization error."""
|
|
95
95
|
|
|
96
|
-
def __init__(self, message: Optional[str], cause:
|
|
96
|
+
def __init__(self, message: Optional[str], cause: BaseException):
|
|
97
97
|
self.message = message
|
|
98
98
|
self.cause = cause
|
|
99
99
|
|
{pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/execution.py
RENAMED
|
@@ -131,7 +131,7 @@ def evaluate(
|
|
|
131
131
|
result = eval( # pylint: disable=eval-used
|
|
132
132
|
compile(last_expr, '', mode='eval'), global_vars
|
|
133
133
|
)
|
|
134
|
-
except
|
|
134
|
+
except BaseException as e:
|
|
135
135
|
raise errors.CodeError(code, e) from e
|
|
136
136
|
|
|
137
137
|
for result_var in result_vars:
|
|
@@ -139,7 +139,7 @@ def evaluate(
|
|
|
139
139
|
else:
|
|
140
140
|
try:
|
|
141
141
|
exec(compile(code_block, '', mode='exec'), global_vars) # pylint: disable=exec-used
|
|
142
|
-
except
|
|
142
|
+
except BaseException as e:
|
|
143
143
|
raise errors.CodeError(code, e) from e
|
|
144
144
|
global_vars[RESULT_KEY] = list(global_vars.values())[-1]
|
|
145
145
|
|
|
@@ -188,7 +188,7 @@ def sandbox_call(
|
|
|
188
188
|
r = func(*args, **kwargs)
|
|
189
189
|
try:
|
|
190
190
|
return pickle.dumps(r)
|
|
191
|
-
except
|
|
191
|
+
except BaseException as e:
|
|
192
192
|
raise errors.SerializationError(
|
|
193
193
|
f'Cannot serialize sandbox result: {r}', e
|
|
194
194
|
) from e
|
|
@@ -198,8 +198,9 @@ def sandbox_call(
|
|
|
198
198
|
except Exception as e: # pylint: disable=broad-exception-caught
|
|
199
199
|
q.put(e)
|
|
200
200
|
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
ctx = multiprocessing.get_context('fork')
|
|
202
|
+
q = ctx.Queue()
|
|
203
|
+
p = ctx.Process(
|
|
203
204
|
target=_call, args=tuple([q] + list(args)), kwargs=kwargs
|
|
204
205
|
)
|
|
205
206
|
try:
|
|
@@ -217,6 +217,10 @@ class EvaluateTest(unittest.TestCase):
|
|
|
217
217
|
execution.evaluate(
|
|
218
218
|
'raise ValueError()', permission=permissions.CodePermission.ALL
|
|
219
219
|
)
|
|
220
|
+
with self.assertRaisesRegex(errors.CodeError, 'SystemExit'):
|
|
221
|
+
execution.evaluate(
|
|
222
|
+
'raise SystemExit()', permission=permissions.CodePermission.ALL
|
|
223
|
+
)
|
|
220
224
|
|
|
221
225
|
|
|
222
226
|
@dataclasses.dataclass
|
{pyglove-0.4.5.dev202504040809 → pyglove-0.5.0.dev202601100810}/pyglove/core/coding/permissions.py
RENAMED
|
@@ -20,7 +20,23 @@ from typing import Optional
|
|
|
20
20
|
from pyglove.core import utils
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class
|
|
23
|
+
class CodePermissionMeta(enum.EnumMeta):
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def BASIC(cls) -> 'CodePermission': # pylint: disable=invalid-name
|
|
27
|
+
"""Returns basic permissions."""
|
|
28
|
+
return cls.ASSIGN | cls.CALL # pytype: disable=attribute-error
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def ALL(cls) -> 'CodePermission': # pylint: disable=invalid-name
|
|
32
|
+
"""Returns all permissions."""
|
|
33
|
+
return (
|
|
34
|
+
cls.BASIC | cls.CONDITION | cls.LOOP | cls.EXCEPTION | # pytype: disable=attribute-error
|
|
35
|
+
cls.CLASS_DEFINITION | cls.FUNCTION_DEFINITION | cls.IMPORT # pytype: disable=attribute-error
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class CodePermission(enum.Flag, metaclass=CodePermissionMeta):
|
|
24
40
|
"""Permissions for code execution."""
|
|
25
41
|
|
|
26
42
|
# Allows assignment.
|
|
@@ -47,21 +63,6 @@ class CodePermission(enum.Flag):
|
|
|
47
63
|
# Allows import.
|
|
48
64
|
IMPORT = enum.auto()
|
|
49
65
|
|
|
50
|
-
@classmethod
|
|
51
|
-
@property
|
|
52
|
-
def BASIC(cls) -> 'CodePermission': # pylint: disable=invalid-name
|
|
53
|
-
"""Returns basic permissions."""
|
|
54
|
-
return CodePermission.ASSIGN | CodePermission.CALL
|
|
55
|
-
|
|
56
|
-
@classmethod
|
|
57
|
-
@property
|
|
58
|
-
def ALL(cls) -> 'CodePermission': # pylint: disable=invalid-name
|
|
59
|
-
"""Returns all permissions."""
|
|
60
|
-
return (
|
|
61
|
-
CodePermission.BASIC | CodePermission.CONDITION | CodePermission.LOOP |
|
|
62
|
-
CodePermission.EXCEPTION | CodePermission.CLASS_DEFINITION |
|
|
63
|
-
CodePermission.FUNCTION_DEFINITION | CodePermission.IMPORT)
|
|
64
|
-
|
|
65
66
|
|
|
66
67
|
_TLS_CODE_RUN_PERMISSION = '__code_run_permission__'
|
|
67
68
|
|
|
@@ -1447,6 +1447,7 @@ class DNA(symbolic.Object):
|
|
|
1447
1447
|
*,
|
|
1448
1448
|
allow_partial: bool = False,
|
|
1449
1449
|
root_path: Optional[utils.KeyPath] = None,
|
|
1450
|
+
**kwargs,
|
|
1450
1451
|
) -> 'DNA':
|
|
1451
1452
|
"""Class method that load a DNA from a JSON value.
|
|
1452
1453
|
|
|
@@ -1454,6 +1455,7 @@ class DNA(symbolic.Object):
|
|
|
1454
1455
|
json_value: Input JSON value, only JSON dict is acceptable.
|
|
1455
1456
|
allow_partial: Whether to allow elements of the list to be partial.
|
|
1456
1457
|
root_path: KeyPath of loaded object in its object tree.
|
|
1458
|
+
**kwargs: Keyword arguments that will be passed to symbolic.from_json.
|
|
1457
1459
|
|
|
1458
1460
|
Returns:
|
|
1459
1461
|
A DNA object.
|
|
@@ -1463,16 +1465,18 @@ class DNA(symbolic.Object):
|
|
|
1463
1465
|
# NOTE(daiyip): DNA.parse will validate the input. Therefore, we can
|
|
1464
1466
|
# disable runtime type check during constructing the DNA objects.
|
|
1465
1467
|
with symbolic.enable_type_check(False):
|
|
1466
|
-
dna = DNA.parse(symbolic.from_json(json_value.get('value')))
|
|
1468
|
+
dna = DNA.parse(symbolic.from_json(json_value.get('value'), **kwargs))
|
|
1467
1469
|
if 'metadata' in json_value:
|
|
1468
1470
|
dna.rebind(
|
|
1469
|
-
metadata=symbolic.from_json(json_value.get('metadata')),
|
|
1471
|
+
metadata=symbolic.from_json(json_value.get('metadata'), **kwargs),
|
|
1470
1472
|
raise_on_no_change=False, skip_notification=True)
|
|
1471
1473
|
else:
|
|
1472
1474
|
dna = super(DNA, cls).from_json(
|
|
1473
1475
|
json_value,
|
|
1474
1476
|
allow_partial=allow_partial,
|
|
1475
|
-
root_path=root_path
|
|
1477
|
+
root_path=root_path,
|
|
1478
|
+
**kwargs,
|
|
1479
|
+
) # pytype: disable=bad-return-type
|
|
1476
1480
|
assert isinstance(dna, DNA)
|
|
1477
1481
|
if cloneable_metadata_keys:
|
|
1478
1482
|
dna._cloneable_metadata_keys = set(cloneable_metadata_keys) # pylint: disable=protected-access
|