This release contains major updates on `pg.symbolic` and `pg.typing`.
Enhancements
* `pg.symbolic`
- (*Major*)`pg.to_json`/`pg.from_json`: supported serialization of Python types, annotations, functions/methods and opaque objects ([6529a3c](https://github.com/google/pyglove/commit/6529a3c3e26948cd0375f847b660c5f50acd24f8), [7777e8f](https://github.com/google/pyglove/commit/7777e8f29d7e28273d0872a8f867102e79ec928a), [4911073](https://github.com/google/pyglove/commit/4911073ea5f8d56c013adb18c3aaff2470b66e8f))
- (*Major*) Added `pg.Inferential` for symbolic value inference ([5ef667c](https://github.com/google/pyglove/commit/5ef667c63403eb34826967e9e4e2a35e91054827)).
- (*Major*) Added symbolic reference `pg.Ref`, which allows referencing symbolic values in a symbolic tree ([b28dc68](https://github.com/google/pyglove/commit/b28dc6892b6976fead4221e84378210873b6b913)).
- `pg.Functor`: supported functor creation through subclasssing ([4950819](https://github.com/google/pyglove/commit/49508199ea54edacf3435457b7de3966b558341f)).
- `pg.Symbolic.rebind`: supported `notify_parents` flag ([cd0029c](https://github.com/google/pyglove/commit/cd0029c8d9e9ef7b3fe9bd6a85de13681269d582)).
- `pg.symbolic.Origin`: added `root` property and `history` method ([2686b29](https://github.com/google/pyglove/commit/2686b2932a76a9a1e4c3606d90b54e2e5afd09fe)).
- `pg.Symbolic.sym_*`: have consistent value for `default` ([90afe73](https://github.com/google/pyglove/commit/90afe73756b23ca564377d90954d1289210d5939)).
* `pg.typing`
- (*Major*) `pg.typing.ValueSpec` can be used as a drop-in replacement for standard Python annotations. E.g. `pg.typing.List[int]` ([ddbade7](https://github.com/google/pyglove/commit/ddbade72cf81a2523cfc48cdaff84a3d205b697d), [c2eca16](https://github.com/google/pyglove/commit/c2eca160dbbf2b8b9a26d4c28578507ee7e199b9), [79ec73](https://github.com/google/pyglove/commit/79ec73b355c9680323f06296c809fa117a3e8085)).
- (*Major*) `pg.Schema`, `pg.typing.Field` and `pg.typing.KeySpec` and `pg.typing.ValueSpec` are now serializable ([7777e8f](https://github.com/google/pyglove/commit/7777e8f29d7e28273d0872a8f867102e79ec928a)).
- Added `pg.typing.Annotated`, `pg.typing.Sequence` and `pg.typing.Optional` ([ddbade7](https://github.com/google/pyglove/commit/ddbade72cf81a2523cfc48cdaff84a3d205b697d)).
- Added `pg.typing.ValueSpec.transform` for transforming the user input values during apply ([a83c2ee](https://github.com/google/pyglove/commit/a83c2ee837b932405625e5edd644bc3844d0379f), [0a9b034](https://github.com/google/pyglove/commit/0a9b034753405c4b84cfdf917ec7f53831f4a762)).
- Added `pg.typing.callable_eq` for comparing two callable objects ([7777e8f](https://github.com/google/pyglove/commit/7777e8f29d7e28273d0872a8f867102e79ec928a)).
- Added implicit conversion from `int` to `float` ([caa3c93](https://github.com/google/pyglove/commit/caa3c935a9c87496c6cb278ec41e32870e3133e7))
* `pg.object_utils`
- `pg.format`: supported `include_keys` argument ([6703406](https://github.com/google/pyglove/commit/670340682dac48b54fbd4de251209953ebc630ce)).
- `pg.object_utils.thread_local_value_scope`: fixed an unexpected behavior when all items in the stack are poped up ([a560ff7](https://github.com/google/pyglove/commit/a560ff7976648ef73b3996238351ddac6ca3bccc)).
- Added `pg.catch_errors` context manager ([a438fc0](https://github.com/google/pyglove/commit/a438fc00744d6970d643d85d406b8f60dfbc2b7d)).
Bug Fixes
* `pg.symbolic`
- `pg.Object.from_json`: propagate `allow_partial` flag to child. ([1cc5aab](https://github.com/google/pyglove/commit/1cc5aab0aaa00b747b6e9e3d2d5dc950505b9bc9))
* `pg.typing`
- `pg.typing.ForwardRef`: fixed issue during deep copying ([ddbade7](https://github.com/google/pyglove/commit/ddbade72cf81a2523cfc48cdaff84a3d205b697d)).
* `pg.ext.early_stopping`
- Fix an issue in state recovery for `pg.early_stopping.StepWise` ([808ca8e](https://github.com/google/pyglove/commit/808ca8e62bde3967e92486e581c3d1a2d94994e1)).
Deprecated/Renamed APIs
* `pg.symbolic`
- Renamed `pg.Object.schema` to `pg.Object.__schema__`, `pg.Object.type_name` to `pg.Object.__type_name__`, `pg.Object.serialization_key` to `pg.JSONConvertible.__serialization_key__` ([bdffd58](https://github.com/google/pyglove/commit/bdffd582280f58e7265f7dec6eba28b8b983784e))
- Renamed `pg.Functor.signature` to `pg.Functor.__signature__`.
- Removed `pg.ContextualValue`, `pg.symbolic.GetAttributeContext`, `pg.Symbolic.sym_contextual_getattr/hasattr` ([5ef667c](https://github.com/google/pyglove/commit/5ef667c63403eb34826967e9e4e2a35e91054827)).
* `pg.typing`
- Merged `pg.typing.get_first_applicable_converter` into `pg.typing.get_converter` ([dd1c253](https://github.com/google/pyglove/commit/dd1c2533912bdf074b642dce7c66c7884ee3bb91)).