pyglove 0.5.0.dev202510200810__tar.gz → 0.5.0.dev202510210811__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.

Files changed (230) hide show
  1. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/PKG-INFO +1 -1
  2. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/base.py +6 -4
  3. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/dict.py +18 -7
  4. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/dict_test.py +23 -0
  5. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/class_schema.py +4 -1
  6. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/json_conversion.py +1 -1
  7. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove.egg-info/PKG-INFO +1 -1
  8. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/LICENSE +0 -0
  9. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/README.md +0 -0
  10. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/__init__.py +0 -0
  11. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/__init__.py +0 -0
  12. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/__init__.py +0 -0
  13. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/errors.py +0 -0
  14. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/errors_test.py +0 -0
  15. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/execution.py +0 -0
  16. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/execution_test.py +0 -0
  17. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/function_generation.py +0 -0
  18. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/function_generation_test.py +0 -0
  19. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/parsing.py +0 -0
  20. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/parsing_test.py +0 -0
  21. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/permissions.py +0 -0
  22. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/coding/permissions_test.py +0 -0
  23. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/detouring/__init__.py +0 -0
  24. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/detouring/class_detour.py +0 -0
  25. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/detouring/class_detour_test.py +0 -0
  26. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/__init__.py +0 -0
  27. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/base.py +0 -0
  28. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/base_test.py +0 -0
  29. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/categorical.py +0 -0
  30. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/categorical_test.py +0 -0
  31. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/custom.py +0 -0
  32. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/custom_test.py +0 -0
  33. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/deduping.py +0 -0
  34. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/deduping_test.py +0 -0
  35. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/dna_generator.py +0 -0
  36. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/dna_generator_test.py +0 -0
  37. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/numerical.py +0 -0
  38. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/numerical_test.py +0 -0
  39. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/random.py +0 -0
  40. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/random_test.py +0 -0
  41. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/space.py +0 -0
  42. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/space_test.py +0 -0
  43. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/sweeping.py +0 -0
  44. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/geno/sweeping_test.py +0 -0
  45. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/__init__.py +0 -0
  46. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/base.py +0 -0
  47. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/categorical.py +0 -0
  48. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/categorical_test.py +0 -0
  49. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/custom.py +0 -0
  50. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/custom_test.py +0 -0
  51. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/derived.py +0 -0
  52. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/derived_test.py +0 -0
  53. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/dynamic_evaluation.py +0 -0
  54. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/dynamic_evaluation_test.py +0 -0
  55. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/evolvable.py +0 -0
  56. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/evolvable_test.py +0 -0
  57. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/iter.py +0 -0
  58. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/iter_test.py +0 -0
  59. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/numerical.py +0 -0
  60. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/numerical_test.py +0 -0
  61. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/object_template.py +0 -0
  62. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/hyper/object_template_test.py +0 -0
  63. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/io/__init__.py +0 -0
  64. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/io/file_system.py +0 -0
  65. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/io/file_system_test.py +0 -0
  66. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/io/sequence.py +0 -0
  67. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/io/sequence_test.py +0 -0
  68. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/logging.py +0 -0
  69. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/logging_test.py +0 -0
  70. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/monitoring.py +0 -0
  71. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/monitoring_test.py +0 -0
  72. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/__init__.py +0 -0
  73. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/object_factory.py +0 -0
  74. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/object_factory_test.py +0 -0
  75. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/pattern_based.py +0 -0
  76. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/pattern_based_test.py +0 -0
  77. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/rule_based.py +0 -0
  78. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/patching/rule_based_test.py +0 -0
  79. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/__init__.py +0 -0
  80. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/base_test.py +0 -0
  81. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/boilerplate.py +0 -0
  82. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/boilerplate_test.py +0 -0
  83. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/class_wrapper.py +0 -0
  84. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/class_wrapper_test.py +0 -0
  85. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/compounding.py +0 -0
  86. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/compounding_test.py +0 -0
  87. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/contextual_object.py +0 -0
  88. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/contextual_object_test.py +0 -0
  89. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/diff.py +0 -0
  90. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/diff_test.py +0 -0
  91. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/error_info.py +0 -0
  92. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/error_info_test.py +0 -0
  93. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/flags.py +0 -0
  94. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/flags_test.py +0 -0
  95. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/functor.py +0 -0
  96. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/functor_test.py +0 -0
  97. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/inferred.py +0 -0
  98. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/inferred_test.py +0 -0
  99. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/list.py +0 -0
  100. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/list_test.py +0 -0
  101. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/object.py +0 -0
  102. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/object_test.py +0 -0
  103. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/origin.py +0 -0
  104. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/origin_test.py +0 -0
  105. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/pure_symbolic.py +0 -0
  106. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/ref.py +0 -0
  107. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/ref_test.py +0 -0
  108. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/symbolize.py +0 -0
  109. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/symbolic/symbolize_test.py +0 -0
  110. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/__init__.py +0 -0
  111. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/backend.py +0 -0
  112. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/backend_test.py +0 -0
  113. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/early_stopping.py +0 -0
  114. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/local_backend.py +0 -0
  115. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/protocols.py +0 -0
  116. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/protocols_test.py +0 -0
  117. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/sample.py +0 -0
  118. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/tuning/sample_test.py +0 -0
  119. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/__init__.py +0 -0
  120. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/annotated.py +0 -0
  121. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/annotated_test.py +0 -0
  122. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/annotation_conversion.py +0 -0
  123. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/annotation_conversion_test.py +0 -0
  124. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/annotation_future_test.py +0 -0
  125. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/callable_ext.py +0 -0
  126. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/callable_ext_test.py +0 -0
  127. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/callable_signature.py +0 -0
  128. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/callable_signature_test.py +0 -0
  129. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/class_schema_test.py +0 -0
  130. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/custom_typing.py +0 -0
  131. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/inspect.py +0 -0
  132. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/inspect_test.py +0 -0
  133. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/json_schema.py +0 -0
  134. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/json_schema_test.py +0 -0
  135. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/key_specs.py +0 -0
  136. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/key_specs_test.py +0 -0
  137. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/pytype_support.py +0 -0
  138. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/type_conversion.py +0 -0
  139. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/type_conversion_test.py +0 -0
  140. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/typed_missing.py +0 -0
  141. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/typed_missing_test.py +0 -0
  142. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/value_specs.py +0 -0
  143. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/typing/value_specs_test.py +0 -0
  144. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/__init__.py +0 -0
  145. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/common_traits.py +0 -0
  146. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/common_traits_test.py +0 -0
  147. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/contextual.py +0 -0
  148. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/contextual_test.py +0 -0
  149. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/docstr_utils.py +0 -0
  150. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/docstr_utils_test.py +0 -0
  151. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/error_utils.py +0 -0
  152. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/error_utils_test.py +0 -0
  153. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/formatting.py +0 -0
  154. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/formatting_test.py +0 -0
  155. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/hierarchical.py +0 -0
  156. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/hierarchical_test.py +0 -0
  157. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/json_conversion_test.py +0 -0
  158. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/missing.py +0 -0
  159. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/missing_test.py +0 -0
  160. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/text_color.py +0 -0
  161. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/text_color_test.py +0 -0
  162. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/thread_local.py +0 -0
  163. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/thread_local_test.py +0 -0
  164. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/timing.py +0 -0
  165. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/timing_test.py +0 -0
  166. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/value_location.py +0 -0
  167. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/utils/value_location_test.py +0 -0
  168. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/__init__.py +0 -0
  169. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/base.py +0 -0
  170. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/base_test.py +0 -0
  171. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/__init__.py +0 -0
  172. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/base.py +0 -0
  173. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/base_test.py +0 -0
  174. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/__init__.py +0 -0
  175. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/base.py +0 -0
  176. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/label.py +0 -0
  177. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/label_test.py +0 -0
  178. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/progress_bar.py +0 -0
  179. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/progress_bar_test.py +0 -0
  180. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/tab.py +0 -0
  181. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/tab_test.py +0 -0
  182. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/tooltip.py +0 -0
  183. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/controls/tooltip_test.py +0 -0
  184. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/tree_view.py +0 -0
  185. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/core/views/html/tree_view_test.py +0 -0
  186. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/__init__.py +0 -0
  187. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/early_stopping/__init__.py +0 -0
  188. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/early_stopping/base.py +0 -0
  189. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/early_stopping/base_test.py +0 -0
  190. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/early_stopping/step_wise.py +0 -0
  191. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/early_stopping/step_wise_test.py +0 -0
  192. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/__init__.py +0 -0
  193. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/base.py +0 -0
  194. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/base_test.py +0 -0
  195. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/hill_climb.py +0 -0
  196. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/hill_climb_test.py +0 -0
  197. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/mutators.py +0 -0
  198. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/mutators_test.py +0 -0
  199. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/neat.py +0 -0
  200. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/neat_test.py +0 -0
  201. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/nsga2.py +0 -0
  202. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/nsga2_test.py +0 -0
  203. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/recombinators.py +0 -0
  204. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/recombinators_test.py +0 -0
  205. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/regularized_evolution.py +0 -0
  206. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/regularized_evolution_test.py +0 -0
  207. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/selectors.py +0 -0
  208. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/selectors_test.py +0 -0
  209. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/where.py +0 -0
  210. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/evolution/where_test.py +0 -0
  211. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/mutfun/__init__.py +0 -0
  212. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/mutfun/base.py +0 -0
  213. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/mutfun/base_test.py +0 -0
  214. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/mutfun/basic_ops.py +0 -0
  215. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/mutfun/basic_ops_test.py +0 -0
  216. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/__init__.py +0 -0
  217. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/base.py +0 -0
  218. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/base_test.py +0 -0
  219. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/maths.py +0 -0
  220. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/maths_test.py +0 -0
  221. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/randoms.py +0 -0
  222. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/randoms_test.py +0 -0
  223. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/step_wise.py +0 -0
  224. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove/ext/scalars/step_wise_test.py +0 -0
  225. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove.egg-info/SOURCES.txt +0 -0
  226. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove.egg-info/dependency_links.txt +0 -0
  227. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove.egg-info/requires.txt +0 -0
  228. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/pyglove.egg-info/top_level.txt +0 -0
  229. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/setup.cfg +0 -0
  230. {pyglove-0.5.0.dev202510200810 → pyglove-0.5.0.dev202510210811}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyglove
3
- Version: 0.5.0.dev202510200810
3
+ Version: 0.5.0.dev202510210811
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors
@@ -503,10 +503,12 @@ class Symbolic(
503
503
  return default
504
504
 
505
505
  def _sym_inferred(self, key: Union[str, int], **kwargs) -> Any:
506
- v = self.sym_getattr(key)
507
- if isinstance(v, Inferential):
508
- v = v.infer(**kwargs)
509
- return v
506
+ return self._infer_if_applicable(self.sym_getattr(key), **kwargs)
507
+
508
+ def _infer_if_applicable(self, value: Any, **kwargs) -> Any:
509
+ if isinstance(value, Inferential):
510
+ return value.infer(**kwargs)
511
+ return value
510
512
 
511
513
  @abc.abstractmethod
512
514
  def sym_keys(self) -> Iterator[Union[str, int]]:
@@ -236,7 +236,8 @@ class Dict(dict, base.Symbolic, pg_typing.CustomTyping):
236
236
  accessor_writable=True,
237
237
  # We delay seal operation until members are filled.
238
238
  sealed=False,
239
- root_path=root_path)
239
+ root_path=root_path
240
+ )
240
241
 
241
242
  dict.__init__(self)
242
243
  self._value_spec = None
@@ -247,9 +248,10 @@ class Dict(dict, base.Symbolic, pg_typing.CustomTyping):
247
248
  for k, v in kwargs.items():
248
249
  dict_obj[k] = v
249
250
 
251
+ iter_items = getattr(dict_obj, 'sym_items', dict_obj.items)
250
252
  if value_spec:
251
253
  if pass_through:
252
- for k, v in dict_obj.items():
254
+ for k, v in iter_items():
253
255
  super().__setitem__(k, self._relocate_if_symbolic(k, v))
254
256
 
255
257
  # NOTE(daiyip): when pass_through is on, we simply trust input
@@ -258,11 +260,11 @@ class Dict(dict, base.Symbolic, pg_typing.CustomTyping):
258
260
  # repeated validation and transformation.
259
261
  self._value_spec = value_spec
260
262
  else:
261
- for k, v in dict_obj.items():
263
+ for k, v in iter_items():
262
264
  super().__setitem__(k, self._formalized_value(k, None, v))
263
265
  self.use_value_spec(value_spec, allow_partial)
264
266
  else:
265
- for k, v in dict_obj.items():
267
+ for k, v in iter_items():
266
268
  self._set_item_without_permission_check(k, v)
267
269
 
268
270
  # NOTE(daiyip): We set onchange callback at the end of init to avoid
@@ -537,7 +539,7 @@ class Dict(dict, base.Symbolic, pg_typing.CustomTyping):
537
539
  raise KeyError(self._error_message(
538
540
  f'Key must be string or int type. Encountered {key!r}.'))
539
541
 
540
- old_value = self.get(key, pg_typing.MISSING_VALUE)
542
+ old_value = self.sym_getattr(key, pg_typing.MISSING_VALUE)
541
543
  if old_value is value:
542
544
  return None
543
545
 
@@ -644,6 +646,13 @@ class Dict(dict, base.Symbolic, pg_typing.CustomTyping):
644
646
  except AttributeError as e:
645
647
  raise KeyError(key) from e
646
648
 
649
+ def get(self, key: Union[str, int], default: Any = None) -> Any:
650
+ """Get item in this Dict."""
651
+ try:
652
+ return self.sym_inferred(key)
653
+ except AttributeError:
654
+ return default
655
+
647
656
  def __setitem__(self, key: Union[str, int], value: Any) -> None:
648
657
  """Set item in this Dict.
649
658
 
@@ -751,11 +760,13 @@ class Dict(dict, base.Symbolic, pg_typing.CustomTyping):
751
760
 
752
761
  def items(self) -> Iterator[Tuple[Union[str, int], Any]]: # pytype: disable=signature-mismatch
753
762
  """Returns an iterator of (key, value) items in current dict."""
754
- return self.sym_items()
763
+ for k, v in self.sym_items():
764
+ yield k, self._infer_if_applicable(v)
755
765
 
756
766
  def values(self) -> Iterator[Any]: # pytype: disable=signature-mismatch
757
767
  """Returns an iterator of values in current dict.."""
758
- return self.sym_values()
768
+ for v in self.sym_values():
769
+ yield self._infer_if_applicable(v)
759
770
 
760
771
  def copy(self) -> 'Dict':
761
772
  """Overridden copy using symbolic copy."""
@@ -415,6 +415,19 @@ class DictTest(unittest.TestCase):
415
415
  with self.assertRaisesRegex(KeyError, 'Key \'y1\' is not allowed'):
416
416
  sd.y1 = 4
417
417
 
418
+ def test_get(self):
419
+ sd = Dict(a=1)
420
+ self.assertEqual(sd.get('a'), 1)
421
+ self.assertIsNone(sd.get('x'))
422
+ self.assertEqual(sd.get('x', 2), 2)
423
+
424
+ # Test inferred values.
425
+ sd = Dict(x=inferred.ValueFromParentChain())
426
+ self.assertIsNone(sd.get('x'))
427
+
428
+ _ = Dict(sd=sd, x=1)
429
+ self.assertEqual(sd.get('x'), 1)
430
+
418
431
  def test_getattr(self):
419
432
  sd = Dict(a=1)
420
433
  self.assertEqual(sd.a, 1)
@@ -713,6 +726,11 @@ class DictTest(unittest.TestCase):
713
726
  ]))
714
727
  self.assertEqual(list(sd.values()), [2, 1, 3])
715
728
 
729
+ # Test values with inferred values.
730
+ sd = Dict(x=1, y=inferred.ValueFromParentChain())
731
+ _ = Dict(sd=sd, y=2)
732
+ self.assertEqual(list(sd.values()), [1, 2])
733
+
716
734
  def test_items(self):
717
735
  sd = Dict(b={'c': True, 'd': []}, a=0)
718
736
  self.assertEqual(list(sd.items()), [('b', {'c': True, 'd': []}), ('a', 0)])
@@ -725,6 +743,11 @@ class DictTest(unittest.TestCase):
725
743
  ]))
726
744
  self.assertEqual(list(sd.items()), [('b', 2), ('a', 1), ('c', 3)])
727
745
 
746
+ # Test items with inferred values.
747
+ sd = Dict(x=1, y=inferred.ValueFromParentChain())
748
+ _ = Dict(sd=sd, y=2)
749
+ self.assertEqual(list(sd.items()), [('x', 1), ('y', 2)])
750
+
728
751
  def test_non_default(self):
729
752
  sd = Dict(a=1)
730
753
  self.assertEqual(len(sd.non_default_values()), 1)
@@ -1229,6 +1229,9 @@ class Schema(utils.Formattable, utils.JSONConvertible):
1229
1229
  f'(parent=\'{root_path}\')'
1230
1230
  )
1231
1231
 
1232
+ # Symbolic.Dict uses `sym_getattr` to support getting symbolic attributes.
1233
+ get_value = getattr(dict_obj, 'sym_getattr', dict_obj.get)
1234
+
1232
1235
  for key_spec, keys in matched_keys.items():
1233
1236
  field = self._fields[key_spec]
1234
1237
  # For missing const keys, we add to keys collection to add missing value.
@@ -1236,7 +1239,7 @@ class Schema(utils.Formattable, utils.JSONConvertible):
1236
1239
  keys.append(str(key_spec))
1237
1240
  for key in keys:
1238
1241
  if dict_obj:
1239
- value = dict_obj.get(key, utils.MISSING_VALUE)
1242
+ value = get_value(key, utils.MISSING_VALUE)
1240
1243
  else:
1241
1244
  value = utils.MISSING_VALUE
1242
1245
  # NOTE(daiyip): field.default_value may be MISSING_VALUE too
@@ -569,7 +569,7 @@ def resolve_typenames(
569
569
  if _resolve_typename(v):
570
570
  # Only resolve children when _types in this tree is not resolved
571
571
  # previously
572
- for x in v.values():
572
+ for x in getattr(v, 'sym_values', v.values)():
573
573
  _visit(x)
574
574
 
575
575
  _visit(json_value)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyglove
3
- Version: 0.5.0.dev202510200810
3
+ Version: 0.5.0.dev202510210811
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors