pyglove 0.4.5.dev202503200809__tar.gz → 0.4.5.dev202503220808__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.dev202503200809 → pyglove-0.4.5.dev202503220808}/PKG-INFO +1 -1
  2. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/io/file_system.py +19 -0
  3. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/io/sequence.py +22 -9
  4. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove.egg-info/PKG-INFO +1 -1
  5. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/LICENSE +0 -0
  6. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/README.md +0 -0
  7. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/__init__.py +0 -0
  8. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/__init__.py +0 -0
  9. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/__init__.py +0 -0
  10. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/errors.py +0 -0
  11. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/errors_test.py +0 -0
  12. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/execution.py +0 -0
  13. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/execution_test.py +0 -0
  14. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/function_generation.py +0 -0
  15. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/function_generation_test.py +0 -0
  16. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/parsing.py +0 -0
  17. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/parsing_test.py +0 -0
  18. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/permissions.py +0 -0
  19. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/coding/permissions_test.py +0 -0
  20. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/detouring/__init__.py +0 -0
  21. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/detouring/class_detour.py +0 -0
  22. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/detouring/class_detour_test.py +0 -0
  23. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/__init__.py +0 -0
  24. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/base.py +0 -0
  25. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/base_test.py +0 -0
  26. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/categorical.py +0 -0
  27. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/categorical_test.py +0 -0
  28. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/custom.py +0 -0
  29. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/custom_test.py +0 -0
  30. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/deduping.py +0 -0
  31. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/deduping_test.py +0 -0
  32. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/dna_generator.py +0 -0
  33. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/dna_generator_test.py +0 -0
  34. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/numerical.py +0 -0
  35. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/numerical_test.py +0 -0
  36. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/random.py +0 -0
  37. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/random_test.py +0 -0
  38. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/space.py +0 -0
  39. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/space_test.py +0 -0
  40. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/sweeping.py +0 -0
  41. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/geno/sweeping_test.py +0 -0
  42. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/__init__.py +0 -0
  43. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/base.py +0 -0
  44. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/categorical.py +0 -0
  45. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/categorical_test.py +0 -0
  46. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/custom.py +0 -0
  47. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/custom_test.py +0 -0
  48. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/derived.py +0 -0
  49. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/derived_test.py +0 -0
  50. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/dynamic_evaluation.py +0 -0
  51. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/dynamic_evaluation_test.py +0 -0
  52. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/evolvable.py +0 -0
  53. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/evolvable_test.py +0 -0
  54. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/iter.py +0 -0
  55. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/iter_test.py +0 -0
  56. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/numerical.py +0 -0
  57. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/numerical_test.py +0 -0
  58. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/object_template.py +0 -0
  59. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/hyper/object_template_test.py +0 -0
  60. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/io/__init__.py +0 -0
  61. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/io/file_system_test.py +0 -0
  62. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/io/sequence_test.py +0 -0
  63. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/logging.py +0 -0
  64. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/logging_test.py +0 -0
  65. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/__init__.py +0 -0
  66. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/object_factory.py +0 -0
  67. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/object_factory_test.py +0 -0
  68. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/pattern_based.py +0 -0
  69. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/pattern_based_test.py +0 -0
  70. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/rule_based.py +0 -0
  71. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/patching/rule_based_test.py +0 -0
  72. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/__init__.py +0 -0
  73. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/base.py +0 -0
  74. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/base_test.py +0 -0
  75. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/boilerplate.py +0 -0
  76. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/boilerplate_test.py +0 -0
  77. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/class_wrapper.py +0 -0
  78. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/class_wrapper_test.py +0 -0
  79. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/compounding.py +0 -0
  80. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/compounding_test.py +0 -0
  81. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/contextual_object.py +0 -0
  82. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/contextual_object_test.py +0 -0
  83. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/dict.py +0 -0
  84. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/dict_test.py +0 -0
  85. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/diff.py +0 -0
  86. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/diff_test.py +0 -0
  87. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/flags.py +0 -0
  88. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/flags_test.py +0 -0
  89. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/functor.py +0 -0
  90. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/functor_test.py +0 -0
  91. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/inferred.py +0 -0
  92. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/inferred_test.py +0 -0
  93. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/list.py +0 -0
  94. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/list_test.py +0 -0
  95. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/object.py +0 -0
  96. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/object_test.py +0 -0
  97. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/origin.py +0 -0
  98. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/origin_test.py +0 -0
  99. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/pure_symbolic.py +0 -0
  100. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/ref.py +0 -0
  101. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/ref_test.py +0 -0
  102. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/symbolize.py +0 -0
  103. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/symbolic/symbolize_test.py +0 -0
  104. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/__init__.py +0 -0
  105. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/backend.py +0 -0
  106. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/backend_test.py +0 -0
  107. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/early_stopping.py +0 -0
  108. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/local_backend.py +0 -0
  109. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/protocols.py +0 -0
  110. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/protocols_test.py +0 -0
  111. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/sample.py +0 -0
  112. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/tuning/sample_test.py +0 -0
  113. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/__init__.py +0 -0
  114. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/annotated.py +0 -0
  115. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/annotated_test.py +0 -0
  116. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/annotation_conversion.py +0 -0
  117. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/annotation_conversion_test.py +0 -0
  118. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/annotation_future_test.py +0 -0
  119. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/callable_ext.py +0 -0
  120. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/callable_ext_test.py +0 -0
  121. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/callable_signature.py +0 -0
  122. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/callable_signature_test.py +0 -0
  123. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/class_schema.py +0 -0
  124. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/class_schema_test.py +0 -0
  125. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/custom_typing.py +0 -0
  126. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/inspect.py +0 -0
  127. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/inspect_test.py +0 -0
  128. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/key_specs.py +0 -0
  129. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/key_specs_test.py +0 -0
  130. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/pytype_support.py +0 -0
  131. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/type_conversion.py +0 -0
  132. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/type_conversion_test.py +0 -0
  133. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/typed_missing.py +0 -0
  134. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/typed_missing_test.py +0 -0
  135. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/value_specs.py +0 -0
  136. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/typing/value_specs_test.py +0 -0
  137. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/__init__.py +0 -0
  138. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/common_traits.py +0 -0
  139. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/common_traits_test.py +0 -0
  140. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/contextual.py +0 -0
  141. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/contextual_test.py +0 -0
  142. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/docstr_utils.py +0 -0
  143. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/docstr_utils_test.py +0 -0
  144. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/error_utils.py +0 -0
  145. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/error_utils_test.py +0 -0
  146. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/formatting.py +0 -0
  147. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/formatting_test.py +0 -0
  148. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/hierarchical.py +0 -0
  149. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/hierarchical_test.py +0 -0
  150. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/json_conversion.py +0 -0
  151. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/json_conversion_test.py +0 -0
  152. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/missing.py +0 -0
  153. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/missing_test.py +0 -0
  154. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/text_color.py +0 -0
  155. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/text_color_test.py +0 -0
  156. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/thread_local.py +0 -0
  157. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/thread_local_test.py +0 -0
  158. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/timing.py +0 -0
  159. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/timing_test.py +0 -0
  160. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/value_location.py +0 -0
  161. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/utils/value_location_test.py +0 -0
  162. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/__init__.py +0 -0
  163. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/base.py +0 -0
  164. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/base_test.py +0 -0
  165. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/__init__.py +0 -0
  166. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/base.py +0 -0
  167. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/base_test.py +0 -0
  168. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/__init__.py +0 -0
  169. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/base.py +0 -0
  170. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/label.py +0 -0
  171. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/label_test.py +0 -0
  172. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/progress_bar.py +0 -0
  173. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/progress_bar_test.py +0 -0
  174. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/tab.py +0 -0
  175. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/tab_test.py +0 -0
  176. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/tooltip.py +0 -0
  177. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/controls/tooltip_test.py +0 -0
  178. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/tree_view.py +0 -0
  179. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/core/views/html/tree_view_test.py +0 -0
  180. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/__init__.py +0 -0
  181. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/early_stopping/__init__.py +0 -0
  182. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/early_stopping/base.py +0 -0
  183. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/early_stopping/base_test.py +0 -0
  184. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/early_stopping/step_wise.py +0 -0
  185. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/early_stopping/step_wise_test.py +0 -0
  186. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/__init__.py +0 -0
  187. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/base.py +0 -0
  188. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/base_test.py +0 -0
  189. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/hill_climb.py +0 -0
  190. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/hill_climb_test.py +0 -0
  191. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/mutators.py +0 -0
  192. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/mutators_test.py +0 -0
  193. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/neat.py +0 -0
  194. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/neat_test.py +0 -0
  195. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/nsga2.py +0 -0
  196. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/nsga2_test.py +0 -0
  197. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/recombinators.py +0 -0
  198. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/recombinators_test.py +0 -0
  199. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/regularized_evolution.py +0 -0
  200. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/regularized_evolution_test.py +0 -0
  201. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/selectors.py +0 -0
  202. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/selectors_test.py +0 -0
  203. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/where.py +0 -0
  204. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/evolution/where_test.py +0 -0
  205. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/mutfun/__init__.py +0 -0
  206. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/mutfun/base.py +0 -0
  207. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/mutfun/base_test.py +0 -0
  208. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/mutfun/basic_ops.py +0 -0
  209. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/mutfun/basic_ops_test.py +0 -0
  210. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/__init__.py +0 -0
  211. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/base.py +0 -0
  212. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/base_test.py +0 -0
  213. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/maths.py +0 -0
  214. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/maths_test.py +0 -0
  215. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/randoms.py +0 -0
  216. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/randoms_test.py +0 -0
  217. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/step_wise.py +0 -0
  218. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove/ext/scalars/step_wise_test.py +0 -0
  219. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove.egg-info/SOURCES.txt +0 -0
  220. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove.egg-info/dependency_links.txt +0 -0
  221. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove.egg-info/requires.txt +0 -0
  222. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/pyglove.egg-info/top_level.txt +0 -0
  223. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/setup.cfg +0 -0
  224. {pyglove-0.4.5.dev202503200809 → pyglove-0.4.5.dev202503220808}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyglove
3
- Version: 0.4.5.dev202503200809
3
+ Version: 0.4.5.dev202503220808
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors
@@ -76,6 +76,10 @@ class FileSystem(metaclass=abc.ABCMeta):
76
76
  ) -> File:
77
77
  """Opens a file with a path."""
78
78
 
79
+ @abc.abstractmethod
80
+ def chmod(self, path: Union[str, os.PathLike[str]], mode: int) -> None:
81
+ """Changes the permission of a file."""
82
+
79
83
  @abc.abstractmethod
80
84
  def exists(self, path: Union[str, os.PathLike[str]]) -> bool:
81
85
  """Returns True if a path exists."""
@@ -167,6 +171,9 @@ class StdFileSystem(FileSystem):
167
171
  ) -> File:
168
172
  return StdFile(io.open(path, mode, **kwargs))
169
173
 
174
+ def chmod(self, path: Union[str, os.PathLike[str]], mode: int) -> None:
175
+ os.chmod(path, mode)
176
+
170
177
  def exists(self, path: Union[str, os.PathLike[str]]) -> bool:
171
178
  return os.path.exists(path)
172
179
 
@@ -272,6 +279,10 @@ class MemoryFileSystem(FileSystem):
272
279
  raise FileNotFoundError(path)
273
280
  return file
274
281
 
282
+ def chmod(self, path: Union[str, os.PathLike[str]], mode: int) -> None:
283
+ # No-op.
284
+ del path, mode
285
+
275
286
  def exists(self, path: Union[str, os.PathLike[str]]) -> bool:
276
287
  return self._locate(path) is not None
277
288
 
@@ -411,6 +422,11 @@ def open(path: Union[str, os.PathLike[str]], mode: str = 'r', **kwargs) -> File:
411
422
  return _fs.get(path).open(path, mode, **kwargs)
412
423
 
413
424
 
425
+ def chmod(path: Union[str, os.PathLike[str]], mode: int) -> None:
426
+ """Changes the permission of a file."""
427
+ _fs.get(path).chmod(path, mode)
428
+
429
+
414
430
  def readfile(
415
431
  path: Union[str, os.PathLike[str]],
416
432
  mode: str = 'r',
@@ -432,11 +448,14 @@ def writefile(
432
448
  content: Union[str, bytes],
433
449
  *,
434
450
  mode: str = 'w',
451
+ perms: Optional[int] = 0o664, # Default to world-readable.
435
452
  **kwargs,
436
453
  ) -> None:
437
454
  """Writes content to a file."""
438
455
  with _fs.get(path).open(path, mode=mode, **kwargs) as f:
439
456
  f.write(content)
457
+ if perms is not None:
458
+ chmod(path, perms)
440
459
 
441
460
 
442
461
  def rm(path: Union[str, os.PathLike[str]]) -> None:
@@ -26,9 +26,11 @@ class Sequence(metaclass=abc.ABCMeta):
26
26
 
27
27
  def __init__(
28
28
  self,
29
+ perms: Optional[int] = None,
29
30
  serializer: Optional[Callable[[Any], Union[bytes, str]]] = None,
30
31
  deserializer: Optional[Callable[[Union[bytes, str]], Any]] = None
31
32
  ):
33
+ self._perms = perms
32
34
  self._serializer = serializer
33
35
  self._deserializer = deserializer
34
36
 
@@ -88,6 +90,7 @@ class SequenceIO(metaclass=abc.ABCMeta):
88
90
  path: Union[str, os.PathLike[str]],
89
91
  mode: str,
90
92
  *,
93
+ perms: Optional[int],
91
94
  serializer: Optional[Callable[[Any], Union[bytes, str]]],
92
95
  deserializer: Optional[Callable[[Union[bytes, str]], Any]],
93
96
  **kwargs
@@ -130,6 +133,7 @@ def open_sequence(
130
133
  path: Union[str, os.PathLike[str]],
131
134
  mode: str = 'r',
132
135
  *,
136
+ perms: Optional[int] = 0o664, # Default to world-readable.
133
137
  serializer: Optional[
134
138
  Callable[[Any], Union[bytes, str]]
135
139
  ] = None,
@@ -143,6 +147,7 @@ def open_sequence(
143
147
  Args:
144
148
  path: The path to the sequence.
145
149
  mode: The mode of the sequence.
150
+ perms: (Optional) The permissions of the sequence.
146
151
  serializer: (Optional) A serializer function for converting a structured
147
152
  object to a string or bytes.
148
153
  deserializer: (Optional) A deserializer function for converting a string or
@@ -158,7 +163,7 @@ def open_sequence(
158
163
  if make_dirs_if_not_exist:
159
164
  file_system.mkdirs(parent_dir, exist_ok=True)
160
165
  return _registry.get(path).open(
161
- path, mode, serializer=serializer, deserializer=deserializer
166
+ path, mode, perms=perms, serializer=serializer, deserializer=deserializer
162
167
  )
163
168
 
164
169
 
@@ -170,10 +175,12 @@ class MemorySequence(Sequence):
170
175
  path: str,
171
176
  mode: str,
172
177
  records: list[Union[str, bytes]],
178
+ *,
179
+ perms: Optional[int],
173
180
  serializer: Optional[Callable[[Any], Union[bytes, str]]],
174
181
  deserializer: Optional[Callable[[Union[bytes, str]], Any]]
175
182
  ):
176
- super().__init__(serializer, deserializer)
183
+ super().__init__(perms, serializer, deserializer)
177
184
  self._path = path
178
185
  self._mode = mode
179
186
  self._records = records
@@ -226,6 +233,7 @@ class MemorySequenceIO(SequenceIO):
226
233
  path: Union[str, os.PathLike[str]],
227
234
  mode: str,
228
235
  *,
236
+ perms: Optional[int],
229
237
  serializer: Optional[Callable[[Any], Union[bytes, str]]],
230
238
  deserializer: Optional[Callable[[Union[bytes, str]], Any]],
231
239
  **kwargs
@@ -236,7 +244,7 @@ class MemorySequenceIO(SequenceIO):
236
244
  self._root[path] = []
237
245
  return MemorySequence(
238
246
  path, mode, self._root[path],
239
- serializer=serializer, deserializer=deserializer
247
+ perms=perms, serializer=serializer, deserializer=deserializer
240
248
  )
241
249
 
242
250
 
@@ -248,12 +256,16 @@ class LineSequence(Sequence):
248
256
 
249
257
  def __init__(
250
258
  self,
251
- file: file_system.File,
259
+ path: str,
260
+ mode: str,
261
+ perms: Optional[int],
252
262
  serializer: Optional[Callable[[Any], Union[bytes, str]]],
253
263
  deserializer: Optional[Callable[[Union[bytes, str]], Any]],
254
264
  ) -> None:
255
- super().__init__(serializer, deserializer)
256
- self._file = file
265
+ super().__init__(perms, serializer, deserializer)
266
+ self._path = path
267
+ self._mode = mode
268
+ self._file = file_system.open(path, mode)
257
269
 
258
270
  def __len__(self):
259
271
  raise NotImplementedError(
@@ -277,6 +289,8 @@ class LineSequence(Sequence):
277
289
 
278
290
  def close(self) -> None:
279
291
  self._file.close()
292
+ if ('w' in self._mode or 'a' in self._mode) and self._perms is not None:
293
+ file_system.chmod(self._path, self._perms)
280
294
 
281
295
 
282
296
  class LineSequenceIO(SequenceIO):
@@ -287,13 +301,12 @@ class LineSequenceIO(SequenceIO):
287
301
  path: Union[str, os.PathLike[str]],
288
302
  mode: str,
289
303
  *,
304
+ perms: Optional[int],
290
305
  serializer: Optional[Callable[[Any], Union[bytes, str]]],
291
306
  deserializer: Optional[Callable[[Union[bytes, str]], Any]],
292
307
  **kwargs
293
308
  ) -> Sequence:
294
309
  """Opens a reader for a sequence."""
295
310
  del kwargs
296
- return LineSequence(
297
- file_system.open(path, mode), serializer, deserializer
298
- )
311
+ return LineSequence(path, mode, perms, serializer, deserializer)
299
312
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyglove
3
- Version: 0.4.5.dev202503200809
3
+ Version: 0.4.5.dev202503220808
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors