pyglove 0.4.5.dev202411030808__py3-none-any.whl → 0.4.5.dev202411060809__py3-none-any.whl

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 (28) hide show
  1. pyglove/core/__init__.py +8 -0
  2. pyglove/core/symbolic/base.py +2 -38
  3. pyglove/core/symbolic/diff.py +14 -13
  4. pyglove/core/symbolic/object_test.py +1 -0
  5. pyglove/core/symbolic/ref.py +7 -7
  6. pyglove/core/views/__init__.py +1 -0
  7. pyglove/core/views/base.py +14 -8
  8. pyglove/core/views/base_test.py +1 -1
  9. pyglove/core/views/html/__init__.py +1 -1
  10. pyglove/core/views/html/base.py +53 -79
  11. pyglove/core/views/html/base_test.py +17 -4
  12. pyglove/core/views/html/controls/__init__.py +35 -0
  13. pyglove/core/views/html/controls/base.py +238 -0
  14. pyglove/core/views/html/controls/label.py +190 -0
  15. pyglove/core/views/html/controls/label_test.py +138 -0
  16. pyglove/core/views/html/controls/progress_bar.py +185 -0
  17. pyglove/core/views/html/controls/progress_bar_test.py +97 -0
  18. pyglove/core/views/html/controls/tab.py +169 -0
  19. pyglove/core/views/html/controls/tab_test.py +54 -0
  20. pyglove/core/views/html/controls/tooltip.py +99 -0
  21. pyglove/core/views/html/controls/tooltip_test.py +99 -0
  22. pyglove/core/views/html/tree_view.py +24 -6
  23. pyglove/core/views/html/tree_view_test.py +7 -2
  24. {pyglove-0.4.5.dev202411030808.dist-info → pyglove-0.4.5.dev202411060809.dist-info}/METADATA +1 -1
  25. {pyglove-0.4.5.dev202411030808.dist-info → pyglove-0.4.5.dev202411060809.dist-info}/RECORD +28 -18
  26. {pyglove-0.4.5.dev202411030808.dist-info → pyglove-0.4.5.dev202411060809.dist-info}/LICENSE +0 -0
  27. {pyglove-0.4.5.dev202411030808.dist-info → pyglove-0.4.5.dev202411060809.dist-info}/WHEEL +0 -0
  28. {pyglove-0.4.5.dev202411030808.dist-info → pyglove-0.4.5.dev202411060809.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
1
- # Copyright 2024 The Langfun Authors
1
+ # Copyright 2024 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.
@@ -17,6 +17,7 @@ import inspect
17
17
  from typing import Any, Callable, Dict, Iterable, Literal, Optional, Sequence, Tuple, Union
18
18
 
19
19
  from pyglove.core import object_utils
20
+ from pyglove.core.symbolic import base as pg_symbolic
20
21
  from pyglove.core.views.html import base
21
22
 
22
23
 
@@ -192,7 +193,7 @@ class HtmlTreeView(HtmlView):
192
193
  # NOTE(daiyip): update `get_kwargs()` and `get_passthrough_kwargs()` when new
193
194
  # arguments are added.
194
195
  @HtmlView.extension_method('_html_tree_view_render')
195
- def render(
196
+ def _render(
196
197
  self,
197
198
  value: Any,
198
199
  *,
@@ -855,8 +856,27 @@ class HtmlTreeView(HtmlView):
855
856
  The rendered HTML as the main content of the value.
856
857
  """
857
858
  root_path = root_path or KeyPath()
858
-
859
- if isinstance(value, (tuple, list)):
859
+ if isinstance(value, pg_symbolic.Symbolic):
860
+ extra_flags = extra_flags or {}
861
+ hide_frozen = extra_flags.get('hide_frozen', True)
862
+ hide_default_values = extra_flags.get('hide_default_values', False)
863
+ use_inferred = extra_flags.get('use_inferred', False)
864
+ items = {}
865
+ for k, v in value.sym_items():
866
+ # Apply frozen filter.
867
+ field = value.sym_attr_field(k)
868
+ if hide_frozen and field and field.frozen:
869
+ continue
870
+
871
+ # Apply inferred value.
872
+ if use_inferred and isinstance(v, pg_symbolic.Inferential):
873
+ v = value.sym_inferred(k, default=v)
874
+
875
+ # Apply default value filter.
876
+ if field and hide_default_values and v == field.default_value:
877
+ continue
878
+ items[k] = v
879
+ elif isinstance(value, (tuple, list)):
860
880
  items = {i: v for i, v in enumerate(value)}
861
881
  elif isinstance(value, dict):
862
882
  items = value
@@ -1278,8 +1298,6 @@ class HtmlTreeView(HtmlView):
1278
1298
  @staticmethod
1279
1299
  def css_class_name(value: Any) -> Optional[str]:
1280
1300
  """Returns the CSS class name for the value."""
1281
- # if isinstance(value, HtmlTreeView.Extension):
1282
- # return Html.concate(value._html_element_class()) # pylint: disable=protected-access
1283
1301
  if inspect.isclass(value):
1284
1302
  class_name = f'{value.__name__}-class'
1285
1303
  else:
@@ -1,4 +1,4 @@
1
- # Copyright 2024 The Langfun Authors
1
+ # Copyright 2024 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.
@@ -11,7 +11,6 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
-
15
14
  import inspect
16
15
  from typing import Any
17
16
  import unittest
@@ -852,6 +851,12 @@ class ContentTest(TestCase):
852
851
 
853
852
  class RenderTest(TestCase):
854
853
 
854
+ def test_render_html_convertible(self):
855
+ class Foo(base.HtmlConvertible):
856
+ def to_html(self, **kwargs):
857
+ return base.Html('<span>foo</span>')
858
+ self.assert_content(base.to_html(Foo()), '<span>foo</span>')
859
+
855
860
  def test_render(self):
856
861
  class Foo:
857
862
  def __str__(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyglove
3
- Version: 0.4.5.dev202411030808
3
+ Version: 0.4.5.dev202411060809
4
4
  Summary: PyGlove: A library for manipulating Python objects.
5
5
  Home-page: https://github.com/google/pyglove
6
6
  Author: PyGlove Authors
@@ -1,5 +1,5 @@
1
1
  pyglove/__init__.py,sha256=YPUWALRDu4QuI7N3TUmVaVr513hUt0qXrjY582I1q5c,1352
2
- pyglove/core/__init__.py,sha256=omnsY79mvCd39G9HKtuYHltlgwB5kTdgqKQAoXWgT-I,8992
2
+ pyglove/core/__init__.py,sha256=FDGkzVlLR0FohA8_ZBFrxhEYxQWAGKe72mjUDjE_SDY,9293
3
3
  pyglove/core/logging.py,sha256=Sr5nLyUQmc4CAEYAq8qbP3ghpjmpz2sOuhq2A0tgQ6I,2456
4
4
  pyglove/core/logging_test.py,sha256=QM59tCAFOUKm4gM6ef_9eG1AvSGEYRDLrrprUQyslcA,1956
5
5
  pyglove/core/detouring/__init__.py,sha256=ck_n2VSuU31HNVYQkbG4Zvnx90mNYtSVc2StN3rXbU8,1891
@@ -78,7 +78,7 @@ pyglove/core/patching/pattern_based_test.py,sha256=PW1EcVfsFPB6wtgwg3s4dzvigWn3b
78
78
  pyglove/core/patching/rule_based.py,sha256=QJsDsYVpyfUoaTZeXZtAdFuxpvB1eniY0qYdZvVqzk0,17056
79
79
  pyglove/core/patching/rule_based_test.py,sha256=qfy0ILmczV_LMHWEnwo2y079OrJsGYO0nKxSZdmIUcI,18782
80
80
  pyglove/core/symbolic/__init__.py,sha256=jYq-LwR1Ql3iMChjz9lN-0heDKiocmxR0ZJFEJ8RHHQ,5787
81
- pyglove/core/symbolic/base.py,sha256=y84C1c5x1va_HOFaPg4Htpud78B_UqoDKJ4HxiWSOJQ,78607
81
+ pyglove/core/symbolic/base.py,sha256=4xgxmMtmNe70Rhc7acC3mXO36WRxqG6YrDubb1f2TII,77473
82
82
  pyglove/core/symbolic/base_test.py,sha256=YLMlQGF4TbxAB2PcN1-ckI70gRIVDxabv-goh43CV7A,7333
83
83
  pyglove/core/symbolic/boilerplate.py,sha256=YO8ZTZJ3VfAqeHqJpIY_ORVDxc1XIzxdplNlpexWEyc,6000
84
84
  pyglove/core/symbolic/boilerplate_test.py,sha256=1CZ1W6kq3l-3tpaknhGFa04V18bO7vPzis5qzWnxHEs,5252
@@ -88,7 +88,7 @@ pyglove/core/symbolic/compounding.py,sha256=zg6x09rtaSEb5v5pYJWWWpI5Cezy2Oy1iuWw
88
88
  pyglove/core/symbolic/compounding_test.py,sha256=PSnk_ds0q6pRJrpN9teMwZtMrbUp5_P-D7ea7wRTK6k,8372
89
89
  pyglove/core/symbolic/dict.py,sha256=gp2sn9nf7movorKWDQsbCQmj0PBdqFul0FYJLm5_kac,36839
90
90
  pyglove/core/symbolic/dict_test.py,sha256=09kAEy_Kiwr8O59CIKK9a9KG-xxJJEIKbfEcZhs5KfU,70809
91
- pyglove/core/symbolic/diff.py,sha256=g_KGL50R--LaMcqMQfC2jq7EuRxd8gaYY9X_KYGsdSk,16186
91
+ pyglove/core/symbolic/diff.py,sha256=UFjC6GnH_yzutuJHSao-di9qVeWL1amBYUJrEKmol3U,16351
92
92
  pyglove/core/symbolic/diff_test.py,sha256=EDiGHqqKhi-NeMxr-bgjBEqlquee_4l_0IM6hgAb9Mg,29400
93
93
  pyglove/core/symbolic/flags.py,sha256=GAF_QrthtDytO3DP61AgxWUgjBc89nnI4TJS4nZ_ng0,12097
94
94
  pyglove/core/symbolic/flags_test.py,sha256=JDJcm6dYTlnktFsdNFjQszmHXf9bZnhrXMxi_jUiKUA,5483
@@ -99,11 +99,11 @@ pyglove/core/symbolic/inferred_test.py,sha256=G6uPykONcChvs6vZujXHSWaYfjewLTVBsc
99
99
  pyglove/core/symbolic/list.py,sha256=63v4Ph0FdkoCDj1FjwcmjUHGZSJLBLxaTKcGg7PdghE,30345
100
100
  pyglove/core/symbolic/list_test.py,sha256=yHYAJhe_EYwtU9p8eDztSXNBjnAGKe0UDN5U6S-xDr8,60627
101
101
  pyglove/core/symbolic/object.py,sha256=1NdVMGoZiyuuxXIbQiW-n4NhUdHSuiedB-chx1n0BrQ,42349
102
- pyglove/core/symbolic/object_test.py,sha256=9-iwW3WVXfQnN4Jj2nlWFXAMJz3PEAYVlINgb7m9_LA,93013
102
+ pyglove/core/symbolic/object_test.py,sha256=IRoeBr8j1SJVohDkEaat0KlW5YQfco6zARTh3qOW0Jc,93092
103
103
  pyglove/core/symbolic/origin.py,sha256=5bH1jZvFHY5jwku32vDm8Bj2i-buv-YNuzOOsA5GlSA,6177
104
104
  pyglove/core/symbolic/origin_test.py,sha256=dU_ZGrGDetM_lYVMn3wQO0d367_t_t8eESe3NrKPBNE,3159
105
105
  pyglove/core/symbolic/pure_symbolic.py,sha256=FVq-5Cg5uZe3ybTIrTqTHIEJIpje0oxzV2kKL6UKlsU,3244
106
- pyglove/core/symbolic/ref.py,sha256=IuXx-FHeTpcIeCvZVCkAqIHRNiZDRgG9pyBXxJoRbfQ,7999
106
+ pyglove/core/symbolic/ref.py,sha256=6I2f_jbsmkXZzpGRk60Z0l_vlSdj7WJ39WmvsOyv5xg,8068
107
107
  pyglove/core/symbolic/ref_test.py,sha256=AjzvXoBtR8lOp8BgQOejnSnLcvgM3Yxq9GIMaNb1i6Y,5786
108
108
  pyglove/core/symbolic/symbolize.py,sha256=ohID9-V8QiFe7OMpPlRomiqUnKBVMpypd8ZuMuHaa4s,6582
109
109
  pyglove/core/symbolic/symbolize_test.py,sha256=o7bRfMhGc6uw2FIH8arE99-bPb3i0YixcHYyiP-QqeQ,6487
@@ -139,14 +139,24 @@ pyglove/core/typing/typed_missing.py,sha256=5lzkrd-DqJDT8eoW1d8p6mxV3mvy5X78zFon
139
139
  pyglove/core/typing/typed_missing_test.py,sha256=3k_s0JBYBJ_6xoOuPSMrQzqas6QHD0PHux0T9NlTBZc,2381
140
140
  pyglove/core/typing/value_specs.py,sha256=V6m4RhCc4yi6H8X1LoptSk5gsa7ko8HgLYDSfVsMBtQ,99874
141
141
  pyglove/core/typing/value_specs_test.py,sha256=kKwoEmGIXtM5JikhtbhcE4Ds-wSyYAsMTozHVa2Lpbc,122707
142
- pyglove/core/views/__init__.py,sha256=hPqM3agvS3skQmLmZyV-5ai9vkhzJI65RLXmS9P-mOI,928
143
- pyglove/core/views/base.py,sha256=yuDHX5g1MgqyeVJLJPpWeh33opEafPygV1fjIOshWLE,26163
144
- pyglove/core/views/base_test.py,sha256=F6nou7reS_Kmr2H57MUgcnc1bIp9Z3BWCvHOvMqjGkQ,16642
145
- pyglove/core/views/html/__init__.py,sha256=FpwzhpomAkIjaOQh6mkIjaXC0KWHvGFIRCAQUAdxdC8,1029
146
- pyglove/core/views/html/base.py,sha256=ob_wyUhlrZNQfrzeF5BWr8Bt8PH7zkYBwvR0xa40ABQ,15837
147
- pyglove/core/views/html/base_test.py,sha256=Oko2B0vw3NYzJplEK4rhFoizOPeuBuebYZU-k39tMX0,22343
148
- pyglove/core/views/html/tree_view.py,sha256=MM3Dct8kujaubdK_99KMwKJx7GFjLxsyTJV0sewH20M,51474
149
- pyglove/core/views/html/tree_view_test.py,sha256=AzStpY_iuvnJUWViuFXFGyrGbNv3P2qVFQyw105O1Jg,74483
142
+ pyglove/core/views/__init__.py,sha256=gll9ZBRYz4p_-LWOdzSR2a6UTWcJ8nR430trrP0yLCU,967
143
+ pyglove/core/views/base.py,sha256=Eq94AM5lryQ1IKuQsTSb7ZzX-lp2nhuOnS4ztMnCPIM,26447
144
+ pyglove/core/views/base_test.py,sha256=UKbr_1TANOAnP7V5ICGF0UEkunfSaHiJ4nXZXhA0SaU,16642
145
+ pyglove/core/views/html/__init__.py,sha256=Ff51MK1AKdzLM0kczTqLR3fRlJSJLDaFUdVyCu_7-eY,1085
146
+ pyglove/core/views/html/base.py,sha256=PyS5B9N_Y2HS4q01X0uSUf3UbODn1UerfqPX1imLPac,15083
147
+ pyglove/core/views/html/base_test.py,sha256=5RVPNm4YTamTFu6yXA1p2lJg3JHQBKNNBoL977qBZvE,22782
148
+ pyglove/core/views/html/tree_view.py,sha256=3Db0aOke-A7Inp-vgqebsDMwJ0WvaznithkwcrfGbhg,52155
149
+ pyglove/core/views/html/tree_view_test.py,sha256=whUorrw0eiDaZsEzGB2B3EN3wx0vLFuNEe2RBU03GeU,74707
150
+ pyglove/core/views/html/controls/__init__.py,sha256=61qs5pnJPCTECCGBtkbNfIV3KcCu7cxfVNBEtIg1lMo,1318
151
+ pyglove/core/views/html/controls/base.py,sha256=eTUB2iJSBtD0sbkWE_LaVT1e4Sir6Q61HJ2j5OZxAsU,6615
152
+ pyglove/core/views/html/controls/label.py,sha256=p3coEqjTtilwXTREqpBIqWQyziGydBwmqFN6EMBufcI,5063
153
+ pyglove/core/views/html/controls/label_test.py,sha256=3ekn3aBO1O8iG_wHpZ7487wY2YRA6wyKeDN7275iR4U,4544
154
+ pyglove/core/views/html/controls/progress_bar.py,sha256=kLdY3JQLCOv00ShldnQg3Qs8l1j_pDk148FoKfrZB64,5275
155
+ pyglove/core/views/html/controls/progress_bar_test.py,sha256=6u1A6kAV8GY_vUMD6PSl7HuuOkVMELYqU32YEVx6qz8,3500
156
+ pyglove/core/views/html/controls/tab.py,sha256=9GFYQM5Cujya0d1txgDtmbTrwLQwALfYFDKwxAMAao0,4860
157
+ pyglove/core/views/html/controls/tab_test.py,sha256=yO_4U_7fBLM7Om3jACgApYbkHxesKNNrr4OVOkz6PNY,2012
158
+ pyglove/core/views/html/controls/tooltip.py,sha256=01BbpuM1twf3FYMUT09_Ck5JSSONe8QE9RmyA9nhCnU,3092
159
+ pyglove/core/views/html/controls/tooltip_test.py,sha256=17BY-WmZKpz9tCbySPcwG6KJyfeE_MeMyKxtfxorBQ0,3194
150
160
  pyglove/ext/__init__.py,sha256=3jp8cJvKW6PENOZlmVAbT0w-GBRn_kjhc0wDX3XjpOE,755
151
161
  pyglove/ext/early_stopping/__init__.py,sha256=_xkT3K_MycFuF3k2N74sfr9FPFcXMD3pfv5vuc4Tx5M,1116
152
162
  pyglove/ext/early_stopping/base.py,sha256=KolexwKDAXhI9iY7hoaDO1mbc3TA4gDn0UifxURwbk0,2358
@@ -186,8 +196,8 @@ pyglove/ext/scalars/randoms.py,sha256=LkMIIx7lOq_lvJvVS3BrgWGuWl7Pi91-lA-O8x_gZs
186
196
  pyglove/ext/scalars/randoms_test.py,sha256=nEhiqarg8l_5EOucp59CYrpO2uKxS1pe0hmBdZUzRNM,2000
187
197
  pyglove/ext/scalars/step_wise.py,sha256=IDw3tuTpv0KVh7AN44W43zqm1-E0HWPUlytWOQC9w3Y,3789
188
198
  pyglove/ext/scalars/step_wise_test.py,sha256=TL1vJ19xVx2t5HKuyIzGoogF7N3Rm8YhLE6JF7i0iy8,2540
189
- pyglove-0.4.5.dev202411030808.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
190
- pyglove-0.4.5.dev202411030808.dist-info/METADATA,sha256=xXVrve9BbLx_jpTqFm97RBLIW30F45hMqN812_fnHxU,6666
191
- pyglove-0.4.5.dev202411030808.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
192
- pyglove-0.4.5.dev202411030808.dist-info/top_level.txt,sha256=wITzJSKcj8GZUkbq-MvUQnFadkiuAv_qv5qQMw0fIow,8
193
- pyglove-0.4.5.dev202411030808.dist-info/RECORD,,
199
+ pyglove-0.4.5.dev202411060809.dist-info/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
200
+ pyglove-0.4.5.dev202411060809.dist-info/METADATA,sha256=34Kmg1uyduP4Q2zU5gZUvjo-3Xadt6QxI_v7wfsf548,6666
201
+ pyglove-0.4.5.dev202411060809.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
202
+ pyglove-0.4.5.dev202411060809.dist-info/top_level.txt,sha256=wITzJSKcj8GZUkbq-MvUQnFadkiuAv_qv5qQMw0fIow,8
203
+ pyglove-0.4.5.dev202411060809.dist-info/RECORD,,