pyglove 0.4.5.dev202504040809__tar.gz → 0.5.0.dev202601100810__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyglove might be problematic. Click here for more details.

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