pyglove 0.5.0.dev202508140811__tar.gz → 0.5.0.dev202511030811__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.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/PKG-INFO +1 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/__init__.py +8 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/base.py +7 -3
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/logging.py +45 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/logging_test.py +12 -21
- pyglove-0.5.0.dev202511030811/pyglove/core/monitoring.py +657 -0
- pyglove-0.5.0.dev202511030811/pyglove/core/monitoring_test.py +289 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/base.py +70 -31
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/base_test.py +3 -3
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/dict.py +31 -12
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/dict_test.py +49 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/list.py +17 -3
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/list_test.py +24 -2
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/object.py +1 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/ref.py +19 -7
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/ref_test.py +94 -7
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/annotation_conversion.py +8 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/annotation_conversion_test.py +14 -19
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/class_schema.py +24 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/json_schema.py +221 -8
- pyglove-0.5.0.dev202511030811/pyglove/core/typing/json_schema_test.py +973 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/type_conversion.py +17 -3
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/type_conversion_test.py +1 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/__init__.py +2 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/contextual.py +9 -4
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/contextual_test.py +10 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/error_utils.py +59 -25
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/json_conversion.py +255 -16
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/json_conversion_test.py +63 -4
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/tab.py +33 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/tab_test.py +37 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/base_test.py +1 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove.egg-info/PKG-INFO +1 -1
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove.egg-info/SOURCES.txt +2 -0
- pyglove-0.5.0.dev202508140811/pyglove/core/typing/json_schema_test.py +0 -477
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/LICENSE +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/README.md +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/errors.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/errors_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/execution.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/execution_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/function_generation.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/function_generation_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/parsing.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/parsing_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/permissions.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/coding/permissions_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/detouring/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/detouring/class_detour.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/detouring/class_detour_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/base_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/categorical.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/categorical_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/custom.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/custom_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/deduping.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/deduping_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/dna_generator.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/dna_generator_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/numerical.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/numerical_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/random.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/random_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/space.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/space_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/sweeping.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/geno/sweeping_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/categorical.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/categorical_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/custom.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/custom_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/derived.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/derived_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/dynamic_evaluation.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/dynamic_evaluation_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/evolvable.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/evolvable_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/iter.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/iter_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/numerical.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/numerical_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/object_template.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/hyper/object_template_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/io/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/io/file_system.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/io/file_system_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/io/sequence.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/io/sequence_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/object_factory.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/object_factory_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/pattern_based.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/pattern_based_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/rule_based.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/patching/rule_based_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/boilerplate.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/boilerplate_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/class_wrapper.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/class_wrapper_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/compounding.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/compounding_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/contextual_object.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/contextual_object_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/diff.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/diff_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/error_info.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/error_info_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/flags.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/flags_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/functor.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/functor_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/inferred.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/inferred_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/object_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/origin.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/origin_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/pure_symbolic.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/symbolize.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/symbolic/symbolize_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/backend.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/backend_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/early_stopping.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/local_backend.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/protocols.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/protocols_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/sample.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/tuning/sample_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/annotated.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/annotated_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/annotation_future_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/callable_ext.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/callable_ext_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/callable_signature.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/callable_signature_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/class_schema_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/custom_typing.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/inspect.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/inspect_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/key_specs.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/key_specs_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/pytype_support.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/typed_missing.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/typed_missing_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/value_specs.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/typing/value_specs_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/common_traits.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/common_traits_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/docstr_utils.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/docstr_utils_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/error_utils_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/formatting.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/formatting_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/hierarchical.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/hierarchical_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/missing.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/missing_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/text_color.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/text_color_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/thread_local.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/thread_local_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/timing.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/timing_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/value_location.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/utils/value_location_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/base_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/base_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/label.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/label_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/progress_bar.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/progress_bar_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/tooltip.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/controls/tooltip_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/tree_view.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/views/html/tree_view_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/early_stopping/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/early_stopping/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/early_stopping/base_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/early_stopping/step_wise.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/early_stopping/step_wise_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/hill_climb.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/hill_climb_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/mutators.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/mutators_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/neat.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/neat_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/nsga2.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/nsga2_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/recombinators.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/recombinators_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/regularized_evolution.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/regularized_evolution_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/selectors.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/selectors_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/where.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/evolution/where_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/mutfun/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/mutfun/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/mutfun/base_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/mutfun/basic_ops.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/mutfun/basic_ops_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/__init__.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/base.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/base_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/maths.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/maths_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/randoms.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/randoms_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/step_wise.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/ext/scalars/step_wise_test.py +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove.egg-info/dependency_links.txt +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove.egg-info/requires.txt +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove.egg-info/top_level.txt +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/setup.cfg +0 -0
- {pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/setup.py +0 -0
|
@@ -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.
|
|
@@ -306,6 +306,7 @@ format = utils.format # pylint: disable=redefined-builtin
|
|
|
306
306
|
print = utils.print # pylint: disable=redefined-builtin
|
|
307
307
|
docstr = utils.docstr
|
|
308
308
|
catch_errors = utils.catch_errors
|
|
309
|
+
match_error = utils.match_error
|
|
309
310
|
timeit = utils.timeit
|
|
310
311
|
|
|
311
312
|
contextual_override = utils.contextual_override
|
|
@@ -352,6 +353,12 @@ from pyglove.core import coding
|
|
|
352
353
|
|
|
353
354
|
from pyglove.core import logging
|
|
354
355
|
|
|
356
|
+
#
|
|
357
|
+
# Symbols from `monitoring.py`.
|
|
358
|
+
#
|
|
359
|
+
|
|
360
|
+
from pyglove.core import monitoring
|
|
361
|
+
|
|
355
362
|
# pylint: enable=g-import-not-at-top
|
|
356
363
|
# pylint: enable=reimported
|
|
357
364
|
# pylint: enable=unused-import
|
|
@@ -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
|
|
@@ -17,9 +17,11 @@ This module allows PyGlove to use external created logger for logging PyGlove
|
|
|
17
17
|
events without introducing library dependencies in PyGlove.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
+
import contextlib
|
|
20
21
|
import inspect
|
|
21
22
|
import logging
|
|
22
|
-
|
|
23
|
+
import sys
|
|
24
|
+
from typing import Any, Callable, Iterator, List, Union
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
_DEFAULT_LOGGER = logging.getLogger()
|
|
@@ -117,3 +119,45 @@ def critical(msg: str, *args, **kwargs) -> None:
|
|
|
117
119
|
**kwargs: Keyword arguments for the logger.
|
|
118
120
|
"""
|
|
119
121
|
_DEFAULT_LOGGER.critical(msg, *args, **kwargs)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def use_stream(
|
|
125
|
+
stream: Any,
|
|
126
|
+
level: int = logging.INFO,
|
|
127
|
+
name: str = 'custom',
|
|
128
|
+
fmt: str = '{levelname:8} | {asctime} | {message}',
|
|
129
|
+
datefmt: str = '%Y-%m-%d %H:%M:%S') -> logging.Logger:
|
|
130
|
+
"""Use stdout for logging."""
|
|
131
|
+
logger = logging.getLogger(name)
|
|
132
|
+
logger.setLevel(level)
|
|
133
|
+
stdout_handler = logging.StreamHandler(stream=stream)
|
|
134
|
+
stdout_handler.setLevel(level)
|
|
135
|
+
stdout_handler.setFormatter(
|
|
136
|
+
logging.Formatter(fmt=fmt, datefmt=datefmt, style='{'))
|
|
137
|
+
logger.addHandler(stdout_handler)
|
|
138
|
+
set_logger(logger)
|
|
139
|
+
return logger
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def use_stdout(
|
|
143
|
+
level: int = logging.INFO,
|
|
144
|
+
fmt: str = '{levelname:8} | {asctime} | {message}',
|
|
145
|
+
datefmt: str = '%Y-%m-%d %H:%M:%S') -> logging.Logger:
|
|
146
|
+
"""Use stdout for logging."""
|
|
147
|
+
return use_stream(sys.stdout, level, 'stdout', fmt, datefmt)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@contextlib.contextmanager
|
|
151
|
+
def redirect_stream(
|
|
152
|
+
stream: Any,
|
|
153
|
+
level: int = logging.INFO,
|
|
154
|
+
name: str = 'custom',
|
|
155
|
+
fmt: str = '{levelname:8} | {asctime} | {message}',
|
|
156
|
+
datefmt: str = '%Y-%m-%d %H:%M:%S') -> Iterator[logging.Logger]:
|
|
157
|
+
"""Redirect the stream to the given logger."""
|
|
158
|
+
previous_logger = get_logger()
|
|
159
|
+
try:
|
|
160
|
+
logger = use_stream(stream, level, name, fmt, datefmt)
|
|
161
|
+
yield logger
|
|
162
|
+
finally:
|
|
163
|
+
set_logger(previous_logger)
|
{pyglove-0.5.0.dev202508140811 → pyglove-0.5.0.dev202511030811}/pyglove/core/logging_test.py
RENAMED
|
@@ -21,15 +21,9 @@ class LoggingTest(unittest.TestCase):
|
|
|
21
21
|
"""Tests for pg.logging."""
|
|
22
22
|
|
|
23
23
|
def testLogging(self):
|
|
24
|
-
string_io = io.StringIO()
|
|
25
|
-
logger = logging.getLogger('logger1')
|
|
26
|
-
logger.setLevel(logging.INFO)
|
|
27
|
-
console_handler = logging.StreamHandler(stream=string_io)
|
|
28
|
-
console_handler.setLevel(logging.INFO)
|
|
29
|
-
logger.addHandler(console_handler)
|
|
30
|
-
|
|
31
24
|
self.assertIs(pg_logging.get_logger(), logging.getLogger())
|
|
32
|
-
|
|
25
|
+
string_io = io.StringIO()
|
|
26
|
+
logger = pg_logging.use_stream(string_io, name='logger1', fmt='')
|
|
33
27
|
self.assertIs(pg_logging.get_logger(), logger)
|
|
34
28
|
|
|
35
29
|
pg_logging.debug('x=%s', 1)
|
|
@@ -46,19 +40,16 @@ class LoggingTest(unittest.TestCase):
|
|
|
46
40
|
]) + '\n')
|
|
47
41
|
|
|
48
42
|
string_io = io.StringIO()
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
pg_logging.
|
|
58
|
-
|
|
59
|
-
'x=6',
|
|
60
|
-
]) + '\n')
|
|
61
|
-
|
|
43
|
+
with pg_logging.redirect_stream(
|
|
44
|
+
string_io, level=logging.DEBUG, name='logger2', fmt=''
|
|
45
|
+
):
|
|
46
|
+
pg_logging.debug('x=%s', 6)
|
|
47
|
+
self.assertEqual(string_io.getvalue(), '\n'.join([
|
|
48
|
+
'x=6',
|
|
49
|
+
]) + '\n')
|
|
50
|
+
|
|
51
|
+
pg_logging.use_stdout()
|
|
52
|
+
pg_logging.info('y=%s', 7)
|
|
62
53
|
|
|
63
54
|
if __name__ == '__main__':
|
|
64
55
|
unittest.main()
|