pyglove 0.4.5.dev202502050809__tar.gz → 0.4.5.dev202502060809__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.
Files changed (224) hide show
  1. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/PKG-INFO +1 -1
  2. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/annotation_conversion.py +53 -13
  3. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/annotation_conversion_test.py +39 -1
  4. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/class_schema.py +8 -12
  5. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove.egg-info/PKG-INFO +1 -1
  6. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/LICENSE +0 -0
  7. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/README.md +0 -0
  8. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/__init__.py +0 -0
  9. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/__init__.py +0 -0
  10. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/__init__.py +0 -0
  11. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/errors.py +0 -0
  12. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/errors_test.py +0 -0
  13. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/execution.py +0 -0
  14. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/execution_test.py +0 -0
  15. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/function_generation.py +0 -0
  16. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/function_generation_test.py +0 -0
  17. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/parsing.py +0 -0
  18. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/parsing_test.py +0 -0
  19. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/permissions.py +0 -0
  20. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/coding/permissions_test.py +0 -0
  21. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/detouring/__init__.py +0 -0
  22. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/detouring/class_detour.py +0 -0
  23. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/detouring/class_detour_test.py +0 -0
  24. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/__init__.py +0 -0
  25. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/base.py +0 -0
  26. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/base_test.py +0 -0
  27. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/categorical.py +0 -0
  28. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/categorical_test.py +0 -0
  29. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/custom.py +0 -0
  30. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/custom_test.py +0 -0
  31. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/deduping.py +0 -0
  32. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/deduping_test.py +0 -0
  33. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/dna_generator.py +0 -0
  34. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/dna_generator_test.py +0 -0
  35. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/numerical.py +0 -0
  36. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/numerical_test.py +0 -0
  37. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/random.py +0 -0
  38. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/random_test.py +0 -0
  39. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/space.py +0 -0
  40. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/space_test.py +0 -0
  41. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/sweeping.py +0 -0
  42. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/geno/sweeping_test.py +0 -0
  43. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/__init__.py +0 -0
  44. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/base.py +0 -0
  45. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/categorical.py +0 -0
  46. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/categorical_test.py +0 -0
  47. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/custom.py +0 -0
  48. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/custom_test.py +0 -0
  49. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/derived.py +0 -0
  50. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/derived_test.py +0 -0
  51. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/dynamic_evaluation.py +0 -0
  52. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/dynamic_evaluation_test.py +0 -0
  53. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/evolvable.py +0 -0
  54. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/evolvable_test.py +0 -0
  55. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/iter.py +0 -0
  56. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/iter_test.py +0 -0
  57. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/numerical.py +0 -0
  58. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/numerical_test.py +0 -0
  59. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/object_template.py +0 -0
  60. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/hyper/object_template_test.py +0 -0
  61. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/io/__init__.py +0 -0
  62. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/io/file_system.py +0 -0
  63. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/io/file_system_test.py +0 -0
  64. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/io/sequence.py +0 -0
  65. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/io/sequence_test.py +0 -0
  66. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/logging.py +0 -0
  67. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/logging_test.py +0 -0
  68. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/__init__.py +0 -0
  69. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/object_factory.py +0 -0
  70. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/object_factory_test.py +0 -0
  71. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/pattern_based.py +0 -0
  72. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/pattern_based_test.py +0 -0
  73. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/rule_based.py +0 -0
  74. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/patching/rule_based_test.py +0 -0
  75. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/__init__.py +0 -0
  76. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/base.py +0 -0
  77. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/base_test.py +0 -0
  78. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/boilerplate.py +0 -0
  79. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/boilerplate_test.py +0 -0
  80. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/class_wrapper.py +0 -0
  81. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/class_wrapper_test.py +0 -0
  82. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/compounding.py +0 -0
  83. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/compounding_test.py +0 -0
  84. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/contextual_object.py +0 -0
  85. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/contextual_object_test.py +0 -0
  86. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/dict.py +0 -0
  87. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/dict_test.py +0 -0
  88. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/diff.py +0 -0
  89. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/diff_test.py +0 -0
  90. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/flags.py +0 -0
  91. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/flags_test.py +0 -0
  92. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/functor.py +0 -0
  93. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/functor_test.py +0 -0
  94. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/inferred.py +0 -0
  95. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/inferred_test.py +0 -0
  96. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/list.py +0 -0
  97. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/list_test.py +0 -0
  98. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/object.py +0 -0
  99. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/object_test.py +0 -0
  100. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/origin.py +0 -0
  101. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/origin_test.py +0 -0
  102. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/pure_symbolic.py +0 -0
  103. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/ref.py +0 -0
  104. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/ref_test.py +0 -0
  105. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/symbolize.py +0 -0
  106. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/symbolic/symbolize_test.py +0 -0
  107. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/__init__.py +0 -0
  108. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/backend.py +0 -0
  109. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/backend_test.py +0 -0
  110. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/early_stopping.py +0 -0
  111. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/local_backend.py +0 -0
  112. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/protocols.py +0 -0
  113. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/protocols_test.py +0 -0
  114. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/sample.py +0 -0
  115. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/tuning/sample_test.py +0 -0
  116. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/__init__.py +0 -0
  117. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/annotated.py +0 -0
  118. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/annotated_test.py +0 -0
  119. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/annotation_future_test.py +0 -0
  120. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/callable_ext.py +0 -0
  121. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/callable_ext_test.py +0 -0
  122. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/callable_signature.py +0 -0
  123. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/callable_signature_test.py +0 -0
  124. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/class_schema_test.py +0 -0
  125. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/custom_typing.py +0 -0
  126. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/inspect.py +0 -0
  127. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/inspect_test.py +0 -0
  128. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/key_specs.py +0 -0
  129. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/key_specs_test.py +0 -0
  130. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/pytype_support.py +0 -0
  131. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/type_conversion.py +0 -0
  132. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/type_conversion_test.py +0 -0
  133. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/typed_missing.py +0 -0
  134. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/typed_missing_test.py +0 -0
  135. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/value_specs.py +0 -0
  136. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/typing/value_specs_test.py +0 -0
  137. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/__init__.py +0 -0
  138. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/common_traits.py +0 -0
  139. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/common_traits_test.py +0 -0
  140. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/contextual.py +0 -0
  141. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/contextual_test.py +0 -0
  142. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/docstr_utils.py +0 -0
  143. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/docstr_utils_test.py +0 -0
  144. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/error_utils.py +0 -0
  145. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/error_utils_test.py +0 -0
  146. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/formatting.py +0 -0
  147. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/formatting_test.py +0 -0
  148. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/hierarchical.py +0 -0
  149. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/hierarchical_test.py +0 -0
  150. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/json_conversion.py +0 -0
  151. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/json_conversion_test.py +0 -0
  152. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/missing.py +0 -0
  153. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/missing_test.py +0 -0
  154. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/text_color.py +0 -0
  155. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/text_color_test.py +0 -0
  156. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/thread_local.py +0 -0
  157. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/thread_local_test.py +0 -0
  158. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/timing.py +0 -0
  159. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/timing_test.py +0 -0
  160. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/value_location.py +0 -0
  161. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/utils/value_location_test.py +0 -0
  162. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/__init__.py +0 -0
  163. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/base.py +0 -0
  164. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/base_test.py +0 -0
  165. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/__init__.py +0 -0
  166. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/base.py +0 -0
  167. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/base_test.py +0 -0
  168. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/__init__.py +0 -0
  169. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/base.py +0 -0
  170. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/label.py +0 -0
  171. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/label_test.py +0 -0
  172. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/progress_bar.py +0 -0
  173. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/progress_bar_test.py +0 -0
  174. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/tab.py +0 -0
  175. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/tab_test.py +0 -0
  176. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/tooltip.py +0 -0
  177. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/controls/tooltip_test.py +0 -0
  178. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/tree_view.py +0 -0
  179. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/core/views/html/tree_view_test.py +0 -0
  180. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/__init__.py +0 -0
  181. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/early_stopping/__init__.py +0 -0
  182. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/early_stopping/base.py +0 -0
  183. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/early_stopping/base_test.py +0 -0
  184. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/early_stopping/step_wise.py +0 -0
  185. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/early_stopping/step_wise_test.py +0 -0
  186. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/__init__.py +0 -0
  187. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/base.py +0 -0
  188. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/base_test.py +0 -0
  189. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/hill_climb.py +0 -0
  190. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/hill_climb_test.py +0 -0
  191. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/mutators.py +0 -0
  192. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/mutators_test.py +0 -0
  193. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/neat.py +0 -0
  194. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/neat_test.py +0 -0
  195. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/nsga2.py +0 -0
  196. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/nsga2_test.py +0 -0
  197. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/recombinators.py +0 -0
  198. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/recombinators_test.py +0 -0
  199. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/regularized_evolution.py +0 -0
  200. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/regularized_evolution_test.py +0 -0
  201. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/selectors.py +0 -0
  202. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/selectors_test.py +0 -0
  203. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/where.py +0 -0
  204. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/evolution/where_test.py +0 -0
  205. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/mutfun/__init__.py +0 -0
  206. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/mutfun/base.py +0 -0
  207. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/mutfun/base_test.py +0 -0
  208. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/mutfun/basic_ops.py +0 -0
  209. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/mutfun/basic_ops_test.py +0 -0
  210. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/__init__.py +0 -0
  211. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/base.py +0 -0
  212. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/base_test.py +0 -0
  213. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/maths.py +0 -0
  214. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/maths_test.py +0 -0
  215. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/randoms.py +0 -0
  216. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/randoms_test.py +0 -0
  217. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/step_wise.py +0 -0
  218. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove/ext/scalars/step_wise_test.py +0 -0
  219. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove.egg-info/SOURCES.txt +0 -0
  220. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove.egg-info/dependency_links.txt +0 -0
  221. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove.egg-info/requires.txt +0 -0
  222. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/pyglove.egg-info/top_level.txt +0 -0
  223. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/setup.cfg +0 -0
  224. {pyglove-0.4.5.dev202502050809 → pyglove-0.4.5.dev202502060809}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyglove
3
- Version: 0.4.5.dev202502050809
3
+ Version: 0.4.5.dev202502060809
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors
@@ -195,24 +195,64 @@ def annotation_from_str(
195
195
  return t_id
196
196
 
197
197
  def _resolve(type_id: str):
198
+
199
+ def _as_forward_ref() -> typing.ForwardRef:
200
+ return typing.ForwardRef(type_id, False, parent_module) # pytype: disable=not-callable
201
+
198
202
  def _resolve_name(name: str, parent_obj: typing.Any):
199
203
  if name == 'None':
200
- return None
204
+ return None, True
201
205
  if parent_obj is not None and hasattr(parent_obj, name):
202
- return getattr(parent_obj, name)
206
+ return getattr(parent_obj, name), False
203
207
  if hasattr(builtins, name):
204
- return getattr(builtins, name)
208
+ return getattr(builtins, name), True
205
209
  if type_id == '...':
206
- return ...
207
- return utils.MISSING_VALUE
208
- parent_obj = parent_module
209
- for name in type_id.split('.'):
210
- parent_obj = _resolve_name(name, parent_obj)
211
- if parent_obj == utils.MISSING_VALUE:
212
- return typing.ForwardRef( # pytype: disable=not-callable
213
- type_id, False, parent_module
214
- )
215
- return parent_obj
210
+ return ..., True
211
+ return utils.MISSING_VALUE, False
212
+
213
+ names = type_id.split('.')
214
+ if len(names) == 1:
215
+ reference, is_builtin = _resolve_name(names[0], parent_module)
216
+ if is_builtin:
217
+ return reference
218
+ if not is_builtin and (
219
+ # When reference is not found, we should treat it as a forward
220
+ # reference.
221
+ reference == utils.MISSING_VALUE
222
+ # When module is being reloaded, we should treat all non-builtin
223
+ # references as forward references.
224
+ or getattr(parent_module, '__reloading__', False)
225
+ ):
226
+ return _as_forward_ref()
227
+ return reference
228
+
229
+ root_obj, _ = _resolve_name(names[0], parent_module)
230
+ # When root object is not found, we should treat it as a forward reference.
231
+ if root_obj == utils.MISSING_VALUE:
232
+ return _as_forward_ref()
233
+
234
+ parent_obj = root_obj
235
+ # When root object is a module, we should treat reference to its children
236
+ # as non-forward references.
237
+ if inspect.ismodule(root_obj):
238
+ for name in names[1:]:
239
+ parent_obj, _ = _resolve_name(name, parent_obj)
240
+ if parent_obj == utils.MISSING_VALUE:
241
+ raise TypeError(f'{type_id!r} does not exist.')
242
+ return parent_obj
243
+ # When root object is non-module variable of current module, and when the
244
+ # module is being reloaded, we should treat reference to its children as
245
+ # forward references.
246
+ elif getattr(parent_module, '__reloading__', False):
247
+ return _as_forward_ref()
248
+ # When root object is non-module variable of current module, we should treat
249
+ # unresolved reference to its children as forward references.
250
+ else:
251
+ for name in names[1:]:
252
+ parent_obj, _ = _resolve_name(name, parent_obj)
253
+ if parent_obj == utils.MISSING_VALUE:
254
+ return _as_forward_ref()
255
+ return parent_obj
216
256
 
217
257
  root = _maybe_union()
218
258
  if _pos() != len(s):
@@ -27,7 +27,8 @@ from pyglove.core.typing.class_schema import ValueSpec
27
27
 
28
28
 
29
29
  class Foo:
30
- pass
30
+ class Bar:
31
+ pass
31
32
 
32
33
 
33
34
  _MODULE = sys.modules[__name__]
@@ -58,6 +59,18 @@ class AnnotationFromStrTest(unittest.TestCase):
58
59
  annotation_conversion.annotation_from_str('tuple[int, str]'),
59
60
  tuple[int, str]
60
61
  )
62
+ self.assertEqual(
63
+ annotation_conversion.annotation_from_str('list[Foo]', _MODULE),
64
+ list[Foo]
65
+ )
66
+ self.assertEqual(
67
+ annotation_conversion.annotation_from_str('list[Foo.Bar]', _MODULE),
68
+ list[Foo.Bar]
69
+ )
70
+ self.assertEqual(
71
+ annotation_conversion.annotation_from_str('list[Foo.Baz]', _MODULE),
72
+ list[typing.ForwardRef('Foo.Baz', False, _MODULE)]
73
+ )
61
74
 
62
75
  def test_generic_types(self):
63
76
  self.assertEqual(
@@ -139,6 +152,28 @@ class AnnotationFromStrTest(unittest.TestCase):
139
152
  ]
140
153
  )
141
154
 
155
+ def test_reloading(self):
156
+ setattr(_MODULE, '__reloading__', True)
157
+ self.assertEqual(
158
+ annotation_conversion.annotation_from_str(
159
+ 'typing.List[Foo]', _MODULE),
160
+ typing.List[
161
+ typing.ForwardRef(
162
+ 'Foo', False, _MODULE
163
+ )
164
+ ]
165
+ )
166
+ self.assertEqual(
167
+ annotation_conversion.annotation_from_str(
168
+ 'typing.List[Foo.Bar]', _MODULE),
169
+ typing.List[
170
+ typing.ForwardRef(
171
+ 'Foo.Bar', False, _MODULE
172
+ )
173
+ ]
174
+ )
175
+ delattr(_MODULE, '__reloading__')
176
+
142
177
  def test_bad_annotation(self):
143
178
  with self.assertRaisesRegex(SyntaxError, 'Expected type identifier'):
144
179
  annotation_conversion.annotation_from_str('typing.List[]')
@@ -152,6 +187,9 @@ class AnnotationFromStrTest(unittest.TestCase):
152
187
  with self.assertRaisesRegex(SyntaxError, 'Expected "]"'):
153
188
  annotation_conversion.annotation_from_str('typing.Callable[[x')
154
189
 
190
+ with self.assertRaisesRegex(TypeError, '.* does not exist'):
191
+ annotation_conversion.annotation_from_str('typing.Foo', _MODULE)
192
+
155
193
 
156
194
  class FieldFromAnnotationTest(unittest.TestCase):
157
195
  """Tests for Field.fromAnnotation."""
@@ -100,7 +100,6 @@ class ForwardRef(utils.Formattable):
100
100
  def __init__(self, module: types.ModuleType, qualname: str):
101
101
  self._module = module
102
102
  self._qualname = qualname
103
- self._resolved_value = None
104
103
 
105
104
  @property
106
105
  def module(self) -> types.ModuleType:
@@ -129,9 +128,7 @@ class ForwardRef(utils.Formattable):
129
128
  @property
130
129
  def resolved(self) -> bool:
131
130
  """Returns True if the symbol for the name is resolved.."""
132
- if self._resolved_value is None:
133
- self._resolved_value = self._resolve()
134
- return self._resolved_value is not None
131
+ return self._resolve() is not None
135
132
 
136
133
  def _resolve(self) -> Optional[Any]:
137
134
  names = self._qualname.split('.')
@@ -150,14 +147,13 @@ class ForwardRef(utils.Formattable):
150
147
  @property
151
148
  def cls(self) -> Type[Any]:
152
149
  """Returns the resolved reference class.."""
153
- if self._resolved_value is None:
154
- self._resolved_value = self._resolve()
155
- if self._resolved_value is None:
156
- raise TypeError(
157
- f'{self.qualname!r} does not exist in '
158
- f'module {self.module.__name__!r}'
159
- )
160
- return self._resolved_value
150
+ reference = self._resolve()
151
+ if reference is None:
152
+ raise TypeError(
153
+ f'{self.qualname!r} does not exist in '
154
+ f'module {self.module.__name__!r}'
155
+ )
156
+ return reference
161
157
 
162
158
  def format(
163
159
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyglove
3
- Version: 0.4.5.dev202502050809
3
+ Version: 0.4.5.dev202502060809
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors