pyglove 0.5.0.dev202508250811__py3-none-any.whl → 0.5.0.dev202511300809__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.
- pyglove/core/__init__.py +8 -1
- pyglove/core/geno/base.py +7 -3
- pyglove/core/io/file_system.py +295 -2
- pyglove/core/io/file_system_test.py +291 -0
- pyglove/core/logging.py +45 -1
- pyglove/core/logging_test.py +12 -21
- pyglove/core/monitoring.py +657 -0
- pyglove/core/monitoring_test.py +289 -0
- pyglove/core/symbolic/__init__.py +7 -0
- pyglove/core/symbolic/base.py +89 -35
- pyglove/core/symbolic/base_test.py +3 -3
- pyglove/core/symbolic/dict.py +31 -12
- pyglove/core/symbolic/dict_test.py +49 -0
- pyglove/core/symbolic/list.py +17 -3
- pyglove/core/symbolic/list_test.py +24 -2
- pyglove/core/symbolic/object.py +3 -1
- pyglove/core/symbolic/object_test.py +13 -10
- pyglove/core/symbolic/ref.py +19 -7
- pyglove/core/symbolic/ref_test.py +94 -7
- pyglove/core/symbolic/unknown_symbols.py +147 -0
- pyglove/core/symbolic/unknown_symbols_test.py +100 -0
- pyglove/core/typing/annotation_conversion.py +8 -1
- pyglove/core/typing/annotation_conversion_test.py +14 -19
- pyglove/core/typing/class_schema.py +24 -1
- pyglove/core/typing/json_schema.py +221 -8
- pyglove/core/typing/json_schema_test.py +508 -12
- pyglove/core/typing/type_conversion.py +17 -3
- pyglove/core/typing/type_conversion_test.py +7 -2
- pyglove/core/typing/value_specs.py +5 -1
- pyglove/core/typing/value_specs_test.py +5 -0
- pyglove/core/utils/__init__.py +2 -0
- pyglove/core/utils/contextual.py +9 -4
- pyglove/core/utils/contextual_test.py +10 -0
- pyglove/core/utils/error_utils.py +59 -25
- pyglove/core/utils/json_conversion.py +360 -63
- pyglove/core/utils/json_conversion_test.py +146 -13
- pyglove/core/views/html/controls/tab.py +33 -0
- pyglove/core/views/html/controls/tab_test.py +37 -0
- pyglove/ext/evolution/base_test.py +1 -1
- {pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/METADATA +8 -1
- {pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/RECORD +44 -40
- {pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/WHEEL +0 -0
- {pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/licenses/LICENSE +0 -0
- {pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/top_level.txt +0 -0
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import abc
|
|
15
15
|
import typing
|
|
16
16
|
import unittest
|
|
17
|
+
from pyglove.core.symbolic import unknown_symbols
|
|
17
18
|
from pyglove.core.typing import inspect as pg_inspect
|
|
18
19
|
from pyglove.core.utils import json_conversion
|
|
19
20
|
|
|
@@ -156,7 +157,7 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
156
157
|
def __init__(self, x=None):
|
|
157
158
|
self.x = x
|
|
158
159
|
|
|
159
|
-
def to_json(self):
|
|
160
|
+
def to_json(self, **kwargs):
|
|
160
161
|
return T.to_json_dict(dict(x=(self.x, None)), exclude_default=True)
|
|
161
162
|
|
|
162
163
|
def __eq__(self, other):
|
|
@@ -202,7 +203,7 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
202
203
|
def __init__(self, x=None):
|
|
203
204
|
self.x = x
|
|
204
205
|
|
|
205
|
-
def to_json(self):
|
|
206
|
+
def to_json(self, **kwargs):
|
|
206
207
|
return self.to_json_dict(
|
|
207
208
|
dict(x=(self.x, None)), exclude_default=True
|
|
208
209
|
)
|
|
@@ -215,7 +216,6 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
215
216
|
|
|
216
217
|
def test_json_conversion_with_auto_import(self):
|
|
217
218
|
json_dict = json_conversion.to_json(self.CustomJsonConvertible(1))
|
|
218
|
-
|
|
219
219
|
with self.assertRaisesRegex(
|
|
220
220
|
TypeError, 'Type name .* is not registered'):
|
|
221
221
|
json_conversion.from_json(json_dict, auto_import=False)
|
|
@@ -272,7 +272,8 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
272
272
|
self.assert_conversion_is(typing.List[typing.List[int]])
|
|
273
273
|
self.assert_conversion_is(typing.Annotated[int, 'abc'])
|
|
274
274
|
self.assert_conversion_is(typing.Dict[str, typing.Any])
|
|
275
|
-
|
|
275
|
+
# From Python 3.14, union no longer preserves `is` identity.
|
|
276
|
+
self.assert_conversion_equal(typing.Union[int, str])
|
|
276
277
|
self.assert_conversion_is(typing.Sequence[int])
|
|
277
278
|
self.assert_conversion_is(typing.Set[int])
|
|
278
279
|
self.assert_conversion_is(typing.FrozenSet[int])
|
|
@@ -308,6 +309,19 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
308
309
|
self.assertEqual(baz1(1), 2)
|
|
309
310
|
self.assertEqual(baz1(1, 2), 3)
|
|
310
311
|
|
|
312
|
+
with self.assertRaisesRegex(
|
|
313
|
+
TypeError, 'Cannot load function .*'):
|
|
314
|
+
json_conversion.from_json(
|
|
315
|
+
{'_type': 'function', 'name': 'non_existent_function'}
|
|
316
|
+
)
|
|
317
|
+
self.assertEqual(
|
|
318
|
+
json_conversion.from_json(
|
|
319
|
+
{'_type': 'function', 'name': 'non_existent_function'},
|
|
320
|
+
convert_unknown=True
|
|
321
|
+
),
|
|
322
|
+
unknown_symbols.UnknownFunction('non_existent_function')
|
|
323
|
+
)
|
|
324
|
+
|
|
311
325
|
def test_json_conversion_for_methods(self):
|
|
312
326
|
# Test class-level method.
|
|
313
327
|
f = json_conversion.from_json(json_conversion.to_json(X.Y.Z.class_method))
|
|
@@ -320,6 +334,19 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
320
334
|
ValueError, 'Cannot convert instance method .* to JSON.'):
|
|
321
335
|
json_conversion.to_json(X.Y.Z().instance_method)
|
|
322
336
|
|
|
337
|
+
with self.assertRaisesRegex(
|
|
338
|
+
TypeError, 'Cannot load method .*'):
|
|
339
|
+
json_conversion.from_json(
|
|
340
|
+
{'_type': 'method', 'name': 'non_existent_method'}
|
|
341
|
+
)
|
|
342
|
+
self.assertEqual(
|
|
343
|
+
json_conversion.from_json(
|
|
344
|
+
{'_type': 'method', 'name': 'non_existent_method'},
|
|
345
|
+
convert_unknown=True
|
|
346
|
+
),
|
|
347
|
+
unknown_symbols.UnknownMethod('non_existent_method')
|
|
348
|
+
)
|
|
349
|
+
|
|
323
350
|
def test_json_conversion_for_opaque_objects(self):
|
|
324
351
|
self.assert_conversion_equal(X(1))
|
|
325
352
|
|
|
@@ -336,12 +363,15 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
336
363
|
ValueError, 'Cannot decode opaque object with pickle.'):
|
|
337
364
|
json_conversion.from_json(json_dict)
|
|
338
365
|
|
|
339
|
-
def
|
|
340
|
-
# Does not exist.
|
|
366
|
+
def test_json_conversion_convert_unknown(self):
|
|
341
367
|
self.assertEqual(
|
|
342
368
|
json_conversion.from_json([
|
|
343
369
|
'__tuple__',
|
|
344
370
|
1,
|
|
371
|
+
{
|
|
372
|
+
'_type': 'type',
|
|
373
|
+
'name': 'Unknown type',
|
|
374
|
+
},
|
|
345
375
|
{
|
|
346
376
|
'_type': 'Unknown type',
|
|
347
377
|
'x': [{
|
|
@@ -351,13 +381,18 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
351
381
|
'name': 'builtins.print'
|
|
352
382
|
}]
|
|
353
383
|
}
|
|
354
|
-
],
|
|
355
|
-
(
|
|
356
|
-
|
|
357
|
-
'
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
384
|
+
], convert_unknown=True),
|
|
385
|
+
(
|
|
386
|
+
1,
|
|
387
|
+
unknown_symbols.UnknownType('Unknown type'),
|
|
388
|
+
unknown_symbols.UnknownTypedObject(
|
|
389
|
+
type_name='Unknown type',
|
|
390
|
+
x=[
|
|
391
|
+
unknown_symbols.UnknownTypedObject('Unknown type'),
|
|
392
|
+
print
|
|
393
|
+
]
|
|
394
|
+
)
|
|
395
|
+
)
|
|
361
396
|
)
|
|
362
397
|
|
|
363
398
|
def test_json_conversion_with_bad_types(self):
|
|
@@ -384,6 +419,10 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
384
419
|
TypeError, 'Cannot load class .*'):
|
|
385
420
|
json_conversion.from_json({'_type': '__main__.ABC'})
|
|
386
421
|
|
|
422
|
+
with self.assertRaisesRegex(
|
|
423
|
+
TypeError, 'Cannot load type .*'):
|
|
424
|
+
json_conversion.from_json({'_type': 'type', 'name': '__main__.ABC'})
|
|
425
|
+
|
|
387
426
|
# Type exist but not a JSONConvertible subclass.
|
|
388
427
|
class A:
|
|
389
428
|
pass
|
|
@@ -393,6 +432,100 @@ class JSONConvertibleTest(unittest.TestCase):
|
|
|
393
432
|
TypeError, '.* is not a `pg.JSONConvertible` subclass'):
|
|
394
433
|
json_conversion.from_json({'_type': '__main__.A'})
|
|
395
434
|
|
|
435
|
+
def test_json_conversion_with_sharing(self):
|
|
436
|
+
|
|
437
|
+
class T(json_conversion.JSONConvertible):
|
|
438
|
+
|
|
439
|
+
def __init__(self, x=None):
|
|
440
|
+
self.x = x
|
|
441
|
+
|
|
442
|
+
def to_json(self, **kwargs):
|
|
443
|
+
return T.to_json_dict(dict(x=(self.x, None)), exclude_default=True)
|
|
444
|
+
|
|
445
|
+
t = T(1)
|
|
446
|
+
x = X(1)
|
|
447
|
+
u = {'x': x}
|
|
448
|
+
v = [u, t]
|
|
449
|
+
y = dict(t=t, x=x, u=u, v=v)
|
|
450
|
+
y_json = json_conversion.to_json(y)
|
|
451
|
+
x_serialized = json_conversion._OpaqueObject(x).to_json()
|
|
452
|
+
self.assertEqual(
|
|
453
|
+
y_json,
|
|
454
|
+
{
|
|
455
|
+
'__context__': {
|
|
456
|
+
'shared_objects': [
|
|
457
|
+
{
|
|
458
|
+
'_type': json_conversion._type_name(T),
|
|
459
|
+
'x': 1
|
|
460
|
+
},
|
|
461
|
+
x_serialized,
|
|
462
|
+
{
|
|
463
|
+
'x': {
|
|
464
|
+
'__ref__': 1
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
]
|
|
468
|
+
},
|
|
469
|
+
'__root__': {
|
|
470
|
+
't': {
|
|
471
|
+
'__ref__': 0
|
|
472
|
+
},
|
|
473
|
+
'x': {
|
|
474
|
+
'__ref__': 1
|
|
475
|
+
},
|
|
476
|
+
'u': {
|
|
477
|
+
'__ref__': 2
|
|
478
|
+
},
|
|
479
|
+
'v': [
|
|
480
|
+
{
|
|
481
|
+
'__ref__': 2
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
'__ref__': 0
|
|
485
|
+
}
|
|
486
|
+
]
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
)
|
|
490
|
+
y_prime = json_conversion.from_json(y_json)
|
|
491
|
+
self.assertIs(y_prime['t'], y_prime['v'][1])
|
|
492
|
+
self.assertIs(y_prime['u'], y_prime['v'][0])
|
|
493
|
+
|
|
494
|
+
def test_json_conversion_with_sharing_convert_unknown(self):
|
|
495
|
+
self.assertEqual(
|
|
496
|
+
json_conversion.from_json(
|
|
497
|
+
{
|
|
498
|
+
'__context__': {
|
|
499
|
+
'shared_objects': [
|
|
500
|
+
{
|
|
501
|
+
'_type': 'type',
|
|
502
|
+
'name': '__main__.ABC',
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
'_type': '__main__.ABC',
|
|
506
|
+
'x': 1
|
|
507
|
+
}
|
|
508
|
+
]
|
|
509
|
+
},
|
|
510
|
+
'__root__': [
|
|
511
|
+
{
|
|
512
|
+
'__ref__': 0
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
'__ref__': 1
|
|
516
|
+
},
|
|
517
|
+
]
|
|
518
|
+
},
|
|
519
|
+
convert_unknown=True
|
|
520
|
+
),
|
|
521
|
+
[
|
|
522
|
+
unknown_symbols.UnknownType('__main__.ABC'),
|
|
523
|
+
unknown_symbols.UnknownTypedObject(
|
|
524
|
+
type_name='__main__.ABC',
|
|
525
|
+
x=1
|
|
526
|
+
)
|
|
527
|
+
]
|
|
528
|
+
)
|
|
396
529
|
|
|
397
530
|
if __name__ == '__main__':
|
|
398
531
|
unittest.main()
|
|
@@ -158,6 +158,39 @@ class TabControl(HtmlControl):
|
|
|
158
158
|
position='beforebegin',
|
|
159
159
|
)
|
|
160
160
|
|
|
161
|
+
def remove(self, index_or_name: Union[int, str]) -> Tab:
|
|
162
|
+
"""Removes a tab identified by index or name."""
|
|
163
|
+
index = self.indexof(index_or_name)
|
|
164
|
+
if index == -1:
|
|
165
|
+
raise ValueError(f'Tab not found: {index_or_name!r}')
|
|
166
|
+
|
|
167
|
+
with pg_flags.notify_on_change(False):
|
|
168
|
+
tab = self.tabs.pop(index)
|
|
169
|
+
|
|
170
|
+
self._run_javascript(
|
|
171
|
+
f"""
|
|
172
|
+
const button = document.querySelectorAll('#{self.element_id()}-button-group > .tab-button')[{index}];
|
|
173
|
+
if (button) {{
|
|
174
|
+
button.remove();
|
|
175
|
+
}}
|
|
176
|
+
const content = document.querySelectorAll('#{self.element_id()}-content-group > .tab-content')[{index}];
|
|
177
|
+
if (content) {{
|
|
178
|
+
content.remove();
|
|
179
|
+
}}
|
|
180
|
+
"""
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
if not self.tabs:
|
|
184
|
+
self._sync_members(selected=0)
|
|
185
|
+
return tab
|
|
186
|
+
|
|
187
|
+
if self.selected == index:
|
|
188
|
+
new_selected = index - 1 if index == len(self.tabs) else index
|
|
189
|
+
self.select(max(0, new_selected))
|
|
190
|
+
elif self.selected > index:
|
|
191
|
+
self._sync_members(selected=self.selected - 1)
|
|
192
|
+
return tab
|
|
193
|
+
|
|
161
194
|
def indexof(self, index_or_name: Union[int, str]) -> int:
|
|
162
195
|
if isinstance(index_or_name, int):
|
|
163
196
|
index = index_or_name
|
|
@@ -154,6 +154,43 @@ class TabControlTest(unittest.TestCase):
|
|
|
154
154
|
self.assertEqual(len(scripts), 1)
|
|
155
155
|
self.assertEqual(tab.selected, 1)
|
|
156
156
|
|
|
157
|
+
def test_remove(self):
|
|
158
|
+
tabs = [tab_lib.Tab(l, l, name=l) for l in ['a', 'b', 'c', 'd']]
|
|
159
|
+
tc = tab_lib.TabControl(tabs, selected='c')
|
|
160
|
+
self.assertEqual([t.name for t in tc.tabs], ['a', 'b', 'c', 'd'])
|
|
161
|
+
self.assertEqual(tc.selected, 2)
|
|
162
|
+
|
|
163
|
+
# Trigger rendering so scripts are tracked.
|
|
164
|
+
_ = tc.to_html()
|
|
165
|
+
with tc.track_scripts() as scripts:
|
|
166
|
+
tc.remove('b')
|
|
167
|
+
self.assertEqual(len(scripts), 1)
|
|
168
|
+
self.assertEqual([t.name for t in tc.tabs], ['a', 'c', 'd'])
|
|
169
|
+
self.assertEqual(tc.selected, 1)
|
|
170
|
+
|
|
171
|
+
with tc.track_scripts() as scripts:
|
|
172
|
+
# Remove currently selected tab 'c'
|
|
173
|
+
tc.remove('c')
|
|
174
|
+
# 1 script for remove, 1 for select.
|
|
175
|
+
self.assertEqual(len(scripts), 2)
|
|
176
|
+
self.assertEqual([t.name for t in tc.tabs], ['a', 'd'])
|
|
177
|
+
self.assertEqual(tc.selected, 1)
|
|
178
|
+
|
|
179
|
+
with tc.track_scripts() as scripts:
|
|
180
|
+
tc.remove(1)
|
|
181
|
+
self.assertEqual(len(scripts), 2)
|
|
182
|
+
self.assertEqual([t.name for t in tc.tabs], ['a'])
|
|
183
|
+
self.assertEqual(tc.selected, 0)
|
|
184
|
+
|
|
185
|
+
with tc.track_scripts() as scripts:
|
|
186
|
+
tc.remove('a')
|
|
187
|
+
self.assertEqual(len(scripts), 1)
|
|
188
|
+
self.assertEqual(tc.tabs, [])
|
|
189
|
+
self.assertEqual(tc.selected, 0)
|
|
190
|
+
|
|
191
|
+
with self.assertRaisesRegex(ValueError, 'Tab not found'):
|
|
192
|
+
tc.remove('x')
|
|
193
|
+
|
|
157
194
|
|
|
158
195
|
if __name__ == '__main__':
|
|
159
196
|
unittest.main()
|
{pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyglove
|
|
3
|
-
Version: 0.5.0.
|
|
3
|
+
Version: 0.5.0.dev202511300809
|
|
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
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
pyglove/__init__.py,sha256=LP1HNk_VVWMHaakX3HZ0NeZ2c4lq2uJaRbalvT8haOg,1352
|
|
2
|
-
pyglove/core/__init__.py,sha256=
|
|
3
|
-
pyglove/core/logging.py,sha256=
|
|
4
|
-
pyglove/core/logging_test.py,sha256=
|
|
2
|
+
pyglove/core/__init__.py,sha256=WPTvhQXv63f4-AkYH__RwVKQyr8vHr5e3tGqT2OxRGM,9774
|
|
3
|
+
pyglove/core/logging.py,sha256=zTNLGnWrl6kkjjEjTphQMeNf9FfqFtl1G9VCh2LhnHg,4614
|
|
4
|
+
pyglove/core/logging_test.py,sha256=ioDbmf4S6xQXeyGWihvk6292wfYdldBw_TK1WXvIq5k,1648
|
|
5
|
+
pyglove/core/monitoring.py,sha256=ZHH6JFq6-FAUNXZn_fJzcpi8MNj8cQYb5wHDsXFm3K8,19595
|
|
6
|
+
pyglove/core/monitoring_test.py,sha256=yeEtscOVsySb6mYRuGvL1Ct1C5lppOLtCGL8LuWWrBY,10896
|
|
5
7
|
pyglove/core/coding/__init__.py,sha256=tuHIg19ZchtkOQbdFVTVLkUpBa5f1eo66XtnKw3lcIU,1645
|
|
6
8
|
pyglove/core/coding/errors.py,sha256=aP3Y4amBzOKdlb5JnESJ3kdoijQXbiBiPDMeA88LNrk,3310
|
|
7
9
|
pyglove/core/coding/errors_test.py,sha256=fwOR8vLiRvLadubsccyE19hLHj-kThlCQt88qmUYk9M,2311
|
|
@@ -17,7 +19,7 @@ pyglove/core/detouring/__init__.py,sha256=ck_n2VSuU31HNVYQkbG4Zvnx90mNYtSVc2StN3
|
|
|
17
19
|
pyglove/core/detouring/class_detour.py,sha256=ejuUr7UfRU3l9PrDxD0dpKmt2iqdDU6liHdebA1jEfQ,13312
|
|
18
20
|
pyglove/core/detouring/class_detour_test.py,sha256=9aAK6qPiT0_HJe5oUpqMVTpoHv0wr_h6c4gWYKMTJoM,5507
|
|
19
21
|
pyglove/core/geno/__init__.py,sha256=cWA583n7JpsGUkGtoTlMMX83tNS7geRBKFsoPEvFZ4A,4767
|
|
20
|
-
pyglove/core/geno/base.py,sha256=
|
|
22
|
+
pyglove/core/geno/base.py,sha256=fZaTmmCJaiIm2ACU8EgEUHQLr9iF0f6yBNdYWIwYKWg,64639
|
|
21
23
|
pyglove/core/geno/base_test.py,sha256=f0pMpfXsjAqFOBtlOxof3jRX0jLvXpzowk9szcr6bgY,38512
|
|
22
24
|
pyglove/core/geno/categorical.py,sha256=t1bS129D5iF4CZ0yVHaFDXy2T6ujv5F5HHDc_0X36z8,28015
|
|
23
25
|
pyglove/core/geno/categorical_test.py,sha256=23UkOPhDSvonxxM_1YoBYp723Xim-BmBzywl612CRyg,18444
|
|
@@ -54,8 +56,8 @@ pyglove/core/hyper/numerical_test.py,sha256=UWdH55Bok7bghYDLJOGsgOwV_2LNkhj1AmFw
|
|
|
54
56
|
pyglove/core/hyper/object_template.py,sha256=YPALTV0mMULa7iuqnryTpA2wMsdyFZ_6g-R525asAr8,22222
|
|
55
57
|
pyglove/core/hyper/object_template_test.py,sha256=TEFX7LIqUvdCdJILnK_gP5xIgNJKzRnioUF0CGVBzcY,9105
|
|
56
58
|
pyglove/core/io/__init__.py,sha256=4ZT1a595DqQuLTNYc2JP_eCp_KesXvHmKRkr777bzpg,785
|
|
57
|
-
pyglove/core/io/file_system.py,sha256=
|
|
58
|
-
pyglove/core/io/file_system_test.py,sha256=
|
|
59
|
+
pyglove/core/io/file_system.py,sha256=r7x_kDWDynKbAcO8tEkkRHShOPiYXyB9wmCXv2c-Oes,23149
|
|
60
|
+
pyglove/core/io/file_system_test.py,sha256=QvcPEQj3hAk7xc8VkFda1ZzgsV0etBimc1V9CJXr_Rk,19145
|
|
59
61
|
pyglove/core/io/sequence.py,sha256=XdVpPBuvhUnrTIWMUrak_qdcNdUJBpjgH5c1b5I3E2A,8873
|
|
60
62
|
pyglove/core/io/sequence_test.py,sha256=mnONyNG1M1sCae2tyI-tF8qns96htfZPKycthETPthU,4062
|
|
61
63
|
pyglove/core/patching/__init__.py,sha256=C1Q1cWPV74YL3eXbzGvc-8aPw1DR8EK6lRhQYDCwHek,2059
|
|
@@ -65,9 +67,9 @@ pyglove/core/patching/pattern_based.py,sha256=UtSNB-ARNqVjXwZovjVi84QEoXUGLLBTgL
|
|
|
65
67
|
pyglove/core/patching/pattern_based_test.py,sha256=PW1EcVfsFPB6wtgwg3s4dzvigWn3b5S8eMNGo0SJiZ0,2771
|
|
66
68
|
pyglove/core/patching/rule_based.py,sha256=JAQp8mWeIOxwIdqusA3GmXia-fxQhQsxbUTmE329wF8,17038
|
|
67
69
|
pyglove/core/patching/rule_based_test.py,sha256=qfy0ILmczV_LMHWEnwo2y079OrJsGYO0nKxSZdmIUcI,18782
|
|
68
|
-
pyglove/core/symbolic/__init__.py,sha256=
|
|
69
|
-
pyglove/core/symbolic/base.py,sha256=
|
|
70
|
-
pyglove/core/symbolic/base_test.py,sha256=
|
|
70
|
+
pyglove/core/symbolic/__init__.py,sha256=ifUnJyF_hNFyrNAqlN7ClKWUvZouIA38GrYctnMc-F4,6402
|
|
71
|
+
pyglove/core/symbolic/base.py,sha256=QMAMFuqH_FjwJUSlUZKTBnxDpiVkM9Z8j611u6FWAcg,79816
|
|
72
|
+
pyglove/core/symbolic/base_test.py,sha256=OHEexXI7uE2bixT-trfR3j-dfiAJsbY7pFyAA6XEPqA,7338
|
|
71
73
|
pyglove/core/symbolic/boilerplate.py,sha256=sQ3G25r5bo_UmIdjreL4jkAuQCXIHVlvUfGjjkNod6Y,5955
|
|
72
74
|
pyglove/core/symbolic/boilerplate_test.py,sha256=1CZ1W6kq3l-3tpaknhGFa04V18bO7vPzis5qzWnxHEs,5252
|
|
73
75
|
pyglove/core/symbolic/class_wrapper.py,sha256=xQiMh5vFlOQ76tbqsF5UWEghvU4d9UmvbNqIyBccNHg,22869
|
|
@@ -76,8 +78,8 @@ pyglove/core/symbolic/compounding.py,sha256=gvOodZ2gWHA0jNdwt8yvnRsPkHQDXDb5s88U
|
|
|
76
78
|
pyglove/core/symbolic/compounding_test.py,sha256=hOzrIROvajUTtPm0SUbEsEV4C1bXanhAoHinHrjZoXw,8320
|
|
77
79
|
pyglove/core/symbolic/contextual_object.py,sha256=ar9Q_0P0HHbDf8kLHpS8GFZEMCRuCCB6DP18iGItiiw,9146
|
|
78
80
|
pyglove/core/symbolic/contextual_object_test.py,sha256=wA5xfIhEHOC9qE3bbiA59CAPxWs9AVPaNiKEoprkWpQ,10209
|
|
79
|
-
pyglove/core/symbolic/dict.py,sha256=
|
|
80
|
-
pyglove/core/symbolic/dict_test.py,sha256=
|
|
81
|
+
pyglove/core/symbolic/dict.py,sha256=ELM-5XSxChNZNTaDxRDm_rCpMkuJ2nBASMOMxVjB07g,37657
|
|
82
|
+
pyglove/core/symbolic/dict_test.py,sha256=XPOe5DV_opYMkzSJZEl7rTvBBN-H9NvKe8zC7tQf7EE,74429
|
|
81
83
|
pyglove/core/symbolic/diff.py,sha256=zHfED0Bbq8G_HWNPj3vrOCWzt_062rFhx3BMlpCb9oo,16282
|
|
82
84
|
pyglove/core/symbolic/diff_test.py,sha256=EDiGHqqKhi-NeMxr-bgjBEqlquee_4l_0IM6hgAb9Mg,29400
|
|
83
85
|
pyglove/core/symbolic/error_info.py,sha256=rqRwfmnEibMixaS2G-P0VhKjkZl79qjO6EUItnATHlQ,3675
|
|
@@ -88,17 +90,19 @@ pyglove/core/symbolic/functor.py,sha256=AwE9GX2cO3QNihac1_ZN0sdG-TrWAJ5lXO2ZQ5Gs
|
|
|
88
90
|
pyglove/core/symbolic/functor_test.py,sha256=9c5_7OBKNVNbYC7IaVQB6c5ks2v00qQ36oivyWiBbKA,31798
|
|
89
91
|
pyglove/core/symbolic/inferred.py,sha256=E4zgphg6NNZad9Fl3jdHQOMZeqEp9XHq5OUYqXEmwZQ,3178
|
|
90
92
|
pyglove/core/symbolic/inferred_test.py,sha256=G6uPykONcChvs6vZujXHSWaYfjewLTVBscMqzzKNty0,1270
|
|
91
|
-
pyglove/core/symbolic/list.py,sha256=
|
|
92
|
-
pyglove/core/symbolic/list_test.py,sha256=
|
|
93
|
-
pyglove/core/symbolic/object.py,sha256=
|
|
94
|
-
pyglove/core/symbolic/object_test.py,sha256=
|
|
93
|
+
pyglove/core/symbolic/list.py,sha256=CRDoBxYJsmNly1MxhY5vO0wp6EUTnxze6-2O9vXHna4,30717
|
|
94
|
+
pyglove/core/symbolic/list_test.py,sha256=sH3wuJB6SqXVefJEPmzGVfoXc-ZiJ1ZTV4-O88LFuaM,61943
|
|
95
|
+
pyglove/core/symbolic/object.py,sha256=g6omG6r6B5TQaHSgoOWCEL_2OY_DcutxOTe1R1M1uFo,42822
|
|
96
|
+
pyglove/core/symbolic/object_test.py,sha256=mB8Aw1foE3XWdRX1LVn9C9U5XJeR7iqZYHrv4y94STE,94514
|
|
95
97
|
pyglove/core/symbolic/origin.py,sha256=OSWMKjvPcISOXrzuX3lCQC8m_qaGl-9INsIB81erUnU,6124
|
|
96
98
|
pyglove/core/symbolic/origin_test.py,sha256=dU_ZGrGDetM_lYVMn3wQO0d367_t_t8eESe3NrKPBNE,3159
|
|
97
99
|
pyglove/core/symbolic/pure_symbolic.py,sha256=pvo15gn35_KLiGW_XrTjlx5ddmHbwpLr93VgbQ59uQ8,3231
|
|
98
|
-
pyglove/core/symbolic/ref.py,sha256=
|
|
99
|
-
pyglove/core/symbolic/ref_test.py,sha256
|
|
100
|
+
pyglove/core/symbolic/ref.py,sha256=gIu02b8BfKspH1XejXhEFh_Iil3jvfGHdpaCRq6qor0,8817
|
|
101
|
+
pyglove/core/symbolic/ref_test.py,sha256=-rCA1AaLZnyuKOh0cJzS5UaQ_9Kp4p7xexZ_e3IwpOg,8974
|
|
100
102
|
pyglove/core/symbolic/symbolize.py,sha256=ohID9-V8QiFe7OMpPlRomiqUnKBVMpypd8ZuMuHaa4s,6582
|
|
101
103
|
pyglove/core/symbolic/symbolize_test.py,sha256=o7bRfMhGc6uw2FIH8arE99-bPb3i0YixcHYyiP-QqeQ,6487
|
|
104
|
+
pyglove/core/symbolic/unknown_symbols.py,sha256=-BuT1izzGZDjuz_OSPDz9UAd1ialpxK8ceTZtIdni1Y,4323
|
|
105
|
+
pyglove/core/symbolic/unknown_symbols_test.py,sha256=0bjZ4cYjDdTCHwQ5GHe-D7VVDfJez7iG0v6Z0ksEDTU,3069
|
|
102
106
|
pyglove/core/tuning/__init__.py,sha256=JtXpjsBto01fLf55hZ1dSx-CEZUyVQeyRP9AMH_hw8c,2229
|
|
103
107
|
pyglove/core/tuning/backend.py,sha256=GwbBI9nHYYe5h6iDuhqRtD-Msjmmc7wFtagxW0rTypU,5597
|
|
104
108
|
pyglove/core/tuning/backend_test.py,sha256=vyfUi509-hbF5uYk-I0FsoniPFBXmobQVl-4d0YPIWY,1999
|
|
@@ -111,44 +115,44 @@ pyglove/core/tuning/sample_test.py,sha256=JqwDPy3EPC_VjU9dipk90jj1kovZB3Zb9hAjAl
|
|
|
111
115
|
pyglove/core/typing/__init__.py,sha256=u2YSrSi8diTkQn8_1J2hEpk5o7zDhx2tU_oRuS-k1XU,14580
|
|
112
116
|
pyglove/core/typing/annotated.py,sha256=llaajIDj9GK-4kUGJoO4JsHU6ESPOra2SZ-jG6xmsOQ,3203
|
|
113
117
|
pyglove/core/typing/annotated_test.py,sha256=p1qid3R-jeiOTTxOVq6hXW8XFvn-h1cUzJWISPst2l8,2484
|
|
114
|
-
pyglove/core/typing/annotation_conversion.py,sha256=
|
|
115
|
-
pyglove/core/typing/annotation_conversion_test.py,sha256=
|
|
118
|
+
pyglove/core/typing/annotation_conversion.py,sha256=pnm6dZbn_nsTCreyarspkwpsdteMb8uFT2TLtblq_0M,15780
|
|
119
|
+
pyglove/core/typing/annotation_conversion_test.py,sha256=N49ZuzsmaqVi23wszDpfwcJApr2-Pk2E_ELrjssSQb0,17598
|
|
116
120
|
pyglove/core/typing/annotation_future_test.py,sha256=tAVuzWNfW8R4e4l7fx88Q4nJDM2LPUogNKNAIIPAEWQ,3959
|
|
117
121
|
pyglove/core/typing/callable_ext.py,sha256=PiBQWPeUAH7Lgmf2xKCZqgK7N0OSrTdbnEkV8Ph31OA,9127
|
|
118
122
|
pyglove/core/typing/callable_ext_test.py,sha256=TnWKU4_ZjvpbHZFtFHgFvCMDiCos8VmLlODcM_7Xg8M,10156
|
|
119
123
|
pyglove/core/typing/callable_signature.py,sha256=DRpt7aShfkn8pb3SCiZzS_27eHbkQ_d2UB8BUhJjs0Q,27176
|
|
120
124
|
pyglove/core/typing/callable_signature_test.py,sha256=iQmHsKPhJPQlMikDhEyxKyq7yWyXI9juKCLYgKhrH3U,25145
|
|
121
|
-
pyglove/core/typing/class_schema.py,sha256=
|
|
125
|
+
pyglove/core/typing/class_schema.py,sha256=lbY5yAC8p5rBuvJ8qMBwqbJmqTlC5bunN4yU4T9rhMg,56037
|
|
122
126
|
pyglove/core/typing/class_schema_test.py,sha256=sJkE7ndDSIKb0EUcjZiVFOeJYDI7Hdu2GdPJCMgZxrI,29556
|
|
123
127
|
pyglove/core/typing/custom_typing.py,sha256=qdnIKHWNt5kZAAFdpQXra8bBu6RljMbbJ_YDG2mhAUA,2205
|
|
124
128
|
pyglove/core/typing/inspect.py,sha256=VLSz1KAunNm2hx0eEMjiwxKLl9FHlKr9nHelLT25iEA,7726
|
|
125
129
|
pyglove/core/typing/inspect_test.py,sha256=xclevobF0X8c_B5b1q1dkBJZN1TsVA1RUhk5l25DUCM,10248
|
|
126
|
-
pyglove/core/typing/json_schema.py,sha256=
|
|
127
|
-
pyglove/core/typing/json_schema_test.py,sha256=
|
|
130
|
+
pyglove/core/typing/json_schema.py,sha256=F7uWXN8Tk4cAydh8FE9jncaP_n7KEvgprvNHeagTvqE,17871
|
|
131
|
+
pyglove/core/typing/json_schema_test.py,sha256=ZxMO2xgKiELNDzoQ84cmXsyCtFA0Ltn1I4gZjF-3efY,26482
|
|
128
132
|
pyglove/core/typing/key_specs.py,sha256=-7xjCuUGoQgD0sMafsRFNlw3S4f1r-7t5OO4ev5bbeI,9225
|
|
129
133
|
pyglove/core/typing/key_specs_test.py,sha256=5zornpyHMAYoRaG8KDXHiQ3obu9UfRp3399lBeUNTPk,6499
|
|
130
134
|
pyglove/core/typing/pytype_support.py,sha256=lyX11WVbCwoOi5tTQ90pEOS-yvo_6iEi7Lxbp-nXu2A,2069
|
|
131
|
-
pyglove/core/typing/type_conversion.py,sha256=
|
|
132
|
-
pyglove/core/typing/type_conversion_test.py,sha256=
|
|
135
|
+
pyglove/core/typing/type_conversion.py,sha256=S_57FU-9DOk-MTE-1Mh31FMshaA3IoKiSDsoKxGxGv4,5432
|
|
136
|
+
pyglove/core/typing/type_conversion_test.py,sha256=rK0lAjLi1azKY4ZltquIsCpKh20EtYSIekArnqI6ThQ,5475
|
|
133
137
|
pyglove/core/typing/typed_missing.py,sha256=-l1omAu0jBZv5BnsFYXBqfvQwVBnmPh_X1wcIKD9bOk,2734
|
|
134
138
|
pyglove/core/typing/typed_missing_test.py,sha256=TCNsb1SRpFaVdxYn2mB_yaLuja8w5Qn5NP7uGiZVBWs,2301
|
|
135
|
-
pyglove/core/typing/value_specs.py,sha256=
|
|
136
|
-
pyglove/core/typing/value_specs_test.py,sha256=
|
|
137
|
-
pyglove/core/utils/__init__.py,sha256=
|
|
139
|
+
pyglove/core/typing/value_specs.py,sha256=oaLjvJ61Gv7myn93krzG3kfdw0n9va3sxmyDjy0xRFY,103368
|
|
140
|
+
pyglove/core/typing/value_specs_test.py,sha256=Mi0Esw-0E_1JSjoEQcjkefkcaS0-omIBzlWVTRYv1F8,131170
|
|
141
|
+
pyglove/core/utils/__init__.py,sha256=6P2VcGkjDsOFG640Jqu-jd1K3pfAK5NkcK3NBPLI6RY,8726
|
|
138
142
|
pyglove/core/utils/common_traits.py,sha256=PWxOgPhG5H60ZwfO8xNAEGRjFUqqDZQBWQYomOfvdy8,3640
|
|
139
143
|
pyglove/core/utils/common_traits_test.py,sha256=DIuZB_1xfmeTVfWnGOguDQcDAM_iGgBOe8C-5CsIqBc,1122
|
|
140
|
-
pyglove/core/utils/contextual.py,sha256=
|
|
141
|
-
pyglove/core/utils/contextual_test.py,sha256=
|
|
144
|
+
pyglove/core/utils/contextual.py,sha256=_EO_ubCcmI81QyYyyucm3QcH1asQWSeXvT2Xa4KONs8,5355
|
|
145
|
+
pyglove/core/utils/contextual_test.py,sha256=g5P6IBf6XgQTUW83QTDC1K5JQJ9bxP6ULiAj2ko4mMo,3552
|
|
142
146
|
pyglove/core/utils/docstr_utils.py,sha256=5BY40kXozPKVGOB0eN8jy1P5_GHIzqFJ9FXAu_kzxaw,5119
|
|
143
147
|
pyglove/core/utils/docstr_utils_test.py,sha256=TBHNwvhGyyoEs7dNOv5bW7h3B_y2smDyoAR9uPDiidI,4179
|
|
144
|
-
pyglove/core/utils/error_utils.py,sha256=
|
|
148
|
+
pyglove/core/utils/error_utils.py,sha256=5if1LlouHMx9EkZt-rhlkDU53Qc-hmXgjhJHhhI125s,6392
|
|
145
149
|
pyglove/core/utils/error_utils_test.py,sha256=gnsEwFmgDNNVNvuQyhSWai8GDfLoCuX_DMqYow9Q2l4,2547
|
|
146
150
|
pyglove/core/utils/formatting.py,sha256=Wn4d933LQLhuMIfjdRJgpxOThCxBxQrkRBa6Z1-hL_I,15591
|
|
147
151
|
pyglove/core/utils/formatting_test.py,sha256=hhg-nL6DyE5A2QA92ALHK5QtfAYKfPpTbBARF-IT1j0,14241
|
|
148
152
|
pyglove/core/utils/hierarchical.py,sha256=jwB-0FhqOspAymAkvJphRhPTQEsoShmKupCZpU3Vip4,19690
|
|
149
153
|
pyglove/core/utils/hierarchical_test.py,sha256=f382DMJPa_bavJGGQDjuw-hWcafUg5bkQCPX-nbzeiI,21077
|
|
150
|
-
pyglove/core/utils/json_conversion.py,sha256=
|
|
151
|
-
pyglove/core/utils/json_conversion_test.py,sha256=
|
|
154
|
+
pyglove/core/utils/json_conversion.py,sha256=PWV51Dm7J-ovakhqXJux_zBAFqvjHKb9RObER8phDvw,37165
|
|
155
|
+
pyglove/core/utils/json_conversion_test.py,sha256=w4k6qgXGEnNXrfryTQppxtF3GJ9rdEHjvjznXSIOMcg,15809
|
|
152
156
|
pyglove/core/utils/missing.py,sha256=9gslt1lXd1qSEIuAFxUWu30oD-YdYcnm13eau1S9uqY,1445
|
|
153
157
|
pyglove/core/utils/missing_test.py,sha256=D6-FuVEwCyJemUiPLcwLmwyptqI5Bx0Pfipc2juhKSE,1335
|
|
154
158
|
pyglove/core/utils/text_color.py,sha256=xcCTCxY2qFNZs_jismMGus8scEXKBpYGAhpAgnz-MHk,4112
|
|
@@ -173,8 +177,8 @@ pyglove/core/views/html/controls/label.py,sha256=2u7z_6o-ANf6EbxufFl_fZ1VFSUrjNw
|
|
|
173
177
|
pyglove/core/views/html/controls/label_test.py,sha256=_Fi6vMITup8iFYTiU_1w7FZCXaYp1eMmVBxub8JMYbs,5170
|
|
174
178
|
pyglove/core/views/html/controls/progress_bar.py,sha256=0an0eCbPCDjwrR58C16NwLZ-cf3Oy0wQerLsiNgGHmk,5235
|
|
175
179
|
pyglove/core/views/html/controls/progress_bar_test.py,sha256=kKOJDZQtBPkmNcgIBrRQkNNzcTm51ojuFBTRUEDSsp0,3506
|
|
176
|
-
pyglove/core/views/html/controls/tab.py,sha256=
|
|
177
|
-
pyglove/core/views/html/controls/tab_test.py,sha256=
|
|
180
|
+
pyglove/core/views/html/controls/tab.py,sha256=f3ZfYyXfMmERGOXY4a4bxmOhomL3MQONMossaxw8hQw,11851
|
|
181
|
+
pyglove/core/views/html/controls/tab_test.py,sha256=V0HrY0YaGyVlOykMCFg85QSxOq8eBPa3Fqcv2q1c12s,6912
|
|
178
182
|
pyglove/core/views/html/controls/tooltip.py,sha256=01BbpuM1twf3FYMUT09_Ck5JSSONe8QE9RmyA9nhCnU,3092
|
|
179
183
|
pyglove/core/views/html/controls/tooltip_test.py,sha256=17BY-WmZKpz9tCbySPcwG6KJyfeE_MeMyKxtfxorBQ0,3194
|
|
180
184
|
pyglove/ext/__init__.py,sha256=3jp8cJvKW6PENOZlmVAbT0w-GBRn_kjhc0wDX3XjpOE,755
|
|
@@ -185,7 +189,7 @@ pyglove/ext/early_stopping/step_wise.py,sha256=P99Z2hODmCNBnR3iVOOj2NCCwveSH6h5V
|
|
|
185
189
|
pyglove/ext/early_stopping/step_wise_test.py,sha256=I9DDMrCpDwIWC6mV9w2pDypnrwYnWjg6QXTFNT13cts,9032
|
|
186
190
|
pyglove/ext/evolution/__init__.py,sha256=lAf4NyxUZRt39kMFFoW_i8-ExigJXakG1-sUREW7jkQ,3214
|
|
187
191
|
pyglove/ext/evolution/base.py,sha256=I27qJja6MErMs3SyrlBYvmDQ4eTq9dY9RVpscKlwReQ,50090
|
|
188
|
-
pyglove/ext/evolution/base_test.py,sha256=
|
|
192
|
+
pyglove/ext/evolution/base_test.py,sha256=HgWSGGHh7nd03IFLln3dKV4TsI1kK4idJd4azAGaxHw,29943
|
|
189
193
|
pyglove/ext/evolution/hill_climb.py,sha256=Bysi2u4KEM7d9CIPcnvKKgEQHttkaKFkI8xlrNOkBB8,1688
|
|
190
194
|
pyglove/ext/evolution/hill_climb_test.py,sha256=7snzopGFRgkryNXiDVcHMhtVz6LXLZCOH_tz_t15b4I,3110
|
|
191
195
|
pyglove/ext/evolution/mutators.py,sha256=ZkNmIf9B2KRP3H7UfML7nkjUYPPgOkm5Fe1kaJQ8W5I,10062
|
|
@@ -216,8 +220,8 @@ pyglove/ext/scalars/randoms.py,sha256=LkMIIx7lOq_lvJvVS3BrgWGuWl7Pi91-lA-O8x_gZs
|
|
|
216
220
|
pyglove/ext/scalars/randoms_test.py,sha256=nEhiqarg8l_5EOucp59CYrpO2uKxS1pe0hmBdZUzRNM,2000
|
|
217
221
|
pyglove/ext/scalars/step_wise.py,sha256=IDw3tuTpv0KVh7AN44W43zqm1-E0HWPUlytWOQC9w3Y,3789
|
|
218
222
|
pyglove/ext/scalars/step_wise_test.py,sha256=TL1vJ19xVx2t5HKuyIzGoogF7N3Rm8YhLE6JF7i0iy8,2540
|
|
219
|
-
pyglove-0.5.0.
|
|
220
|
-
pyglove-0.5.0.
|
|
221
|
-
pyglove-0.5.0.
|
|
222
|
-
pyglove-0.5.0.
|
|
223
|
-
pyglove-0.5.0.
|
|
223
|
+
pyglove-0.5.0.dev202511300809.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
224
|
+
pyglove-0.5.0.dev202511300809.dist-info/METADATA,sha256=UenEruuR6yfx1_hUKjd-L5lbN15GMZnpOhKYeA7hwPc,7349
|
|
225
|
+
pyglove-0.5.0.dev202511300809.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
226
|
+
pyglove-0.5.0.dev202511300809.dist-info/top_level.txt,sha256=wITzJSKcj8GZUkbq-MvUQnFadkiuAv_qv5qQMw0fIow,8
|
|
227
|
+
pyglove-0.5.0.dev202511300809.dist-info/RECORD,,
|
|
File without changes
|
{pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{pyglove-0.5.0.dev202508250811.dist-info → pyglove-0.5.0.dev202511300809.dist-info}/top_level.txt
RENAMED
|
File without changes
|