-
Notifications
You must be signed in to change notification settings - Fork 235
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support complex numbers #1331
Support complex numbers #1331
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #1331 +/- ##
==========================================
- Coverage 90.21% 89.55% -0.67%
==========================================
Files 106 111 +5
Lines 16339 17537 +1198
Branches 36 41 +5
==========================================
+ Hits 14740 15705 +965
- Misses 1592 1812 +220
- Partials 7 20 +13
... and 34 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
|
CodSpeed Performance ReportMerging #1331 will not alter performanceComparing Summary
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work thus far, thanks!!
As discussed in pydantic/pydantic#8555, since there is no official representation for complex numbers in JSON, I propose to express complex numbers as dictionaries with two keys, real and imag, with floating point values. Please find examples in the newly added test suites in this PR.
I agree with this approach. @davidhewitt what do you think? I suppose we could have support for either this or the 1+2j
format (maybe with a config flag...)
Note that function str_as_complex in shared.rs is not yet implemented as I need to discuss with the team if we want to support this. For example, we might want to accept strings like 1+2j as a valid complex number, as long as these strings follow the format described in python's documentation.
As mentioned on the pydantic
PR, I'd be keen to support this.
This implementation, however, will be a bit tricky. Using regular expression is the simplest solution, but it is going to be a bit slow since building regex is rather costly.
Perhaps we can speed things up by using the rust regex crate?
The safest solution is probably to do exactly the same as how cpython parses strings. I think that can be done in a separate PR for easier reviews.
Probably a question for @davidhewitt here.
Thanks! I've looked into the rust regex crate. It has rather limited functionality, specifically lookahead, which means we will need to handle some corner cases ourselves or create some not so straightforward logic. Another crate fancy_regex has better support for regex, but introducing another dependency on a non-native library makes me a bit hesitant unless it's really necessary or beneficial enough. With regex, my biggest concern is whether or not we can capture exactly what is accepted by python. I'm concerned about accidentally accepting/rejecting some strings that are actually rejected/accepted by the complex class in python, which might bring users unexpected problems. If the team thinks it's okay with regex (and maybe you don't feel like having this cumbersome dictionary representation at all,) I can definitely look into that. |
What if we avoided using either a regex or |
That sounds good to me. Then I'll work on that. On the other hand, what do
you think about the dict representation I proposed and implemented in this
PR? Should we still keep it or should we only accept strings like `1+2j`?
|
We'll chat with the team in our open source sync tomorrow and get back to you :). |
Let's go with the string representation for now, and if the feature lands with some popularity, we can add support for the dictionary style. For now, if folks really need that dict type serialization for complex numbers, they can use a custom serializer. |
I've updated the implementation. There is one test case failing with pypy, and I think that's because of some bugs in pypy. How do you usually handle discrepancy between pypy and python? Can we ignore this case for now and simply add a note in the documentation? Another question regarding |
Yes, we can xfail this case when running on PyPy. If you're willing to also report the case on the PyPy GitHub, it would help them be aware they need to fix :)
In this case it won't pass until we update pydantic |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this is looking great! There's a few edge cases to discuss wrt config, constraints, and unions. Beyond that, this implementation looks rock-solid 🪨
src/input/input_python.rs
Outdated
fn validate_complex<'a>(&'a self, _py: Python<'py>) -> ValResult<ValidationMatch<EitherComplex<'py>>> { | ||
if let Ok(complex) = self.downcast::<PyComplex>() { | ||
return Ok(ValidationMatch::exact(EitherComplex::Py(complex.to_owned()))); | ||
} else if let Ok(s) = self.downcast::<PyString>() { | ||
return Ok(ValidationMatch::exact(EitherComplex::Py(string_to_complex(s, self)?))); | ||
} else if self.is_exact_instance_of::<PyFloat>() { | ||
return Ok(ValidationMatch::exact(EitherComplex::Complex([ | ||
self.extract::<f64>().unwrap(), | ||
0.0, | ||
]))); | ||
} else if self.is_exact_instance_of::<PyInt>() { | ||
return Ok(ValidationMatch::exact(EitherComplex::Complex([ | ||
self.extract::<i64>().unwrap() as f64, | ||
0.0, | ||
]))); | ||
} | ||
Err(ValError::new(ErrorTypeDefaults::ComplexType, self)) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should have a think here about what behaviour we expect in strict
mode. Probably we only want to accept complex
objects in strict. Do we want to accept integers / floats in "strict" mode? In lax, we can accept everything for sure.
Also, similarly the ValidationMatch::exact
calls should probably be downgraded to either strict
or lax
- these will set the level of priority in e.g. complex | int
union. I think most would agree that complex | int
would expect an integer value to not be cast to a complex. We might want some according tests for some of these union cases.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
strict
mode is strict in terms of typing, right? I was mostly thinking from the perspective of mathematics when I added float
and int
. I suppose then we should only allow complex
objects in strict mode? Then ValidationMatch::exact
is the same as strict
. This sounds reasonable to me, but I'm not exactly sure about the how different exact
and strict
usually are.
One more question about strict
mode: how does it apply to other input types? Is it like when the input is in JSON, we only accept strings in strict
mode?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suppose then we should only allow
complex
objects in strict mode?
I think so, yes (note that in JSON it's less straightforward as you note). In JSON I think we only accept strings in strict
mode, yes.
Then
ValidationMatch::exact
is the same asstrict
.
IIRC in other cases I made subclasses strict
, if complex
objects allow subclassing. I'd check what I did for ints or floats.
src/validators/complex.rs
Outdated
} | ||
|
||
#[derive(Debug)] | ||
pub struct ComplexValidator {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we probably need a strict mode flag here at the very least.
What about constraints like Le
, or MultipleOf
? They might get painful, so I'm ok to defer those to later as long as they fail gracefully.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to support constraints for complex numbers?
I thought about constraints initially when I checked other validators to get some ideas of how to implement this complex validator, but I don't think constraints are going to be useful. For example, Le
and relevant constraints don't really make sense as complex numbers don't have a default ordering. Users can apply additional filtering ad hoc based on the ordering they define, but I don't think we can add that kind of constraints to the validator.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am happy for us to not support constraints for now.
Hi @davidhewitt, how should we proceed with this? Do we wait for input from the team or should we manage to make a decision here ourselves? |
Hey @changhc, Sorry we've dropped the ball on feedback here. Will chat with the team early next week so that we can move this forward and include it in our v2.9 release 🚀 ! |
Thanks @sydney-runkle! I'm making some changes to address David's comments. They will be ready soon! |
Hi @davidhewitt, I've implemented the strict mode for complex numbers. As we discussed, when strict mode is on,
Because of the strict mode, I tweaked the messages for validation errors a little bit to make errors less confusing to users. Specifically for python input,
For other input types, the error is rather simple as complex strings are the only acceptable input values when strict mode is on. I also added some test cases for dictionaries involving complex keys just to make sure things work as expected. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This generally looks great to me, thanks.
The only change I'd like to see would be to remove the custom py_strict
error type and use an instance-of error instead.
src/input/input_python.rs
Outdated
return Ok(ValidationMatch::strict(EitherComplex::Py(complex.to_owned()))); | ||
} | ||
if strict { | ||
return Err(ValError::new(ErrorTypeDefaults::ComplexTypePyStrict, self)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think rather than a new type here, we can use isinstance error:
return Err(ValError::new(ErrorTypeDefaults::ComplexTypePyStrict, self)); | |
return Err(ValError::new( | |
ErrorType::IsInstanceOf { | |
class: PyComplex::type_object(py).qualname() | |
.and_then(|name| name.extract()) | |
.unwrap_or_else(|_| "complex".to_owned()), | |
context: None, | |
}, | |
self, | |
)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated. The error message now looks like:
pydantic_core._pydantic_core.ValidationError: 1 validation error for complex
Input should be an instance of complex [type=is_instance_of, input_value='foobar', input_type=str]
For further information visit https://errors.pydantic.dev/2.8/v/is_instance_of
@davidhewitt, are we ready to move this across the line? |
Yep, LGTM! Thanks @changhc |
Thanks! I'll update pydantic/pydantic#9654 once this PR is merged and the next minor release includes these changes. |
Great! I'll get this merged tomorrow 🚀 |
Great work @changhc, going to go ahead and merge this - the failing integration tests should soon be fixed with your branch. Do we need to make any more updates to pydantic/pydantic#9654 other than supporting a new version of |
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pydantic](https://redirect.github.com/pydantic/pydantic) ([changelog](https://docs.pydantic.dev/latest/changelog/)) | `2.8.2` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/2.8.2/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.8.2/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>pydantic/pydantic (pydantic)</summary> ### [`v2.9.0`](https://redirect.github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v290-2024-09-05) [Compare Source](https://redirect.github.com/pydantic/pydantic/compare/v2.8.2...v2.9.0) [GitHub release](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.9.0) The code released in v2.9.0 is practically identical to that of v2.9.0b2. ##### What's Changed ##### Packaging - Bump `ruff` to `v0.5.0` and `pyright` to `v1.1.369` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9801](https://redirect.github.com/pydantic/pydantic/pull/9801) - Bump `pydantic-extra-types` to `v2.9.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9832](https://redirect.github.com/pydantic/pydantic/pull/9832) - Support compatibility with `pdm v2.18.1` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10138](https://redirect.github.com/pydantic/pydantic/pull/10138) - Bump `v1` version stub to `v1.10.18` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10214](https://redirect.github.com/pydantic/pydantic/pull/10214) - Bump `pydantic-core` to `v2.23.2` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10311](https://redirect.github.com/pydantic/pydantic/pull/10311) ##### New Features - Add support for `ZoneInfo` by [@​Youssefares](https://redirect.github.com/Youssefares) in [#​9896](https://redirect.github.com/pydantic/pydantic/pull/9896) - Add `Config.val_json_bytes` by [@​josh-newman](https://redirect.github.com/josh-newman) in [#​9770](https://redirect.github.com/pydantic/pydantic/pull/9770) - Add DSN for Snowflake by [@​aditkumar72](https://redirect.github.com/aditkumar72) in [#​10128](https://redirect.github.com/pydantic/pydantic/pull/10128) - Support `complex` number by [@​changhc](https://redirect.github.com/changhc) in [#​9654](https://redirect.github.com/pydantic/pydantic/pull/9654) - Add support for `annotated_types.Not` by [@​aditkumar72](https://redirect.github.com/aditkumar72) in [#​10210](https://redirect.github.com/pydantic/pydantic/pull/10210) - Allow `WithJsonSchema` to inject `$ref`s w/ `http` or `https` links by [@​dAIsySHEng1](https://redirect.github.com/dAIsySHEng1) in [#​9863](https://redirect.github.com/pydantic/pydantic/pull/9863) - Allow validators to customize validation JSON schema by [@​Viicos](https://redirect.github.com/Viicos) in [#​10094](https://redirect.github.com/pydantic/pydantic/pull/10094) - Support parametrized `PathLike` types by [@​nix010](https://redirect.github.com/nix010) in [#​9764](https://redirect.github.com/pydantic/pydantic/pull/9764) - Add tagged union serializer that attempts to use `str` or `callable` discriminators to select the correct serializer by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in in [pydantic/pydantic-core#1397](https://redirect.github.com/pydantic/pydantic-core/pull/1397) ##### Changes - Breaking Change: Merge `dict` type `json_schema_extra` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9792](https://redirect.github.com/pydantic/pydantic/pull/9792) - For more info (how to replicate old behavior) on this change, see [here](https://docs.pydantic.dev/dev/concepts/json_schema/#merging-json_schema_extra) - Refactor annotation injection for known (often generic) types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9979](https://redirect.github.com/pydantic/pydantic/pull/9979) - Move annotation compatibility errors to validation phase by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9999](https://redirect.github.com/pydantic/pydantic/pull/9999) - Improve runtime errors for string constraints like `pattern` for incompatible types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10158](https://redirect.github.com/pydantic/pydantic/pull/10158) - Remove `'allOf'` JSON schema workarounds by [@​dpeachey](https://redirect.github.com/dpeachey) in [#​10029](https://redirect.github.com/pydantic/pydantic/pull/10029) - Remove `typed_dict_cls` data from `CoreMetadata` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10180](https://redirect.github.com/pydantic/pydantic/pull/10180) - Deprecate passing a dict to the `Examples` class by [@​Viicos](https://redirect.github.com/Viicos) in [#​10181](https://redirect.github.com/pydantic/pydantic/pull/10181) - Remove `initial_metadata` from internal metadata construct by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10194](https://redirect.github.com/pydantic/pydantic/pull/10194) - Use `re.Pattern.search` instead of `re.Pattern.match` for consistency with `rust` behavior by [@​tinez](https://redirect.github.com/tinez) in [pydantic/pydantic-core#1368](https://redirect.github.com/pydantic/pydantic-core/pull/1368) - Show value of wrongly typed data in `pydantic-core` serialization warning by [@​BoxyUwU](https://redirect.github.com/BoxyUwU) in [pydantic/pydantic-core#1377](https://redirect.github.com/pydantic/pydantic-core/pull/1377) - Breaking Change: in `pydantic-core`, change `metadata` type hint in core schemas from `Any` -> `Dict[str, Any] | None` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1411](https://redirect.github.com/pydantic/pydantic-core/pull/1411) - Raise helpful warning when `self` isn't returned from model validator by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10255](https://redirect.github.com/pydantic/pydantic/pull/10255) ##### Performance - Initial start at improving import times for modules, using caching primarily by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10009](https://redirect.github.com/pydantic/pydantic/pull/10009) - Using cached internal import for `BaseModel` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10013](https://redirect.github.com/pydantic/pydantic/pull/10013) - Simplify internal generics logic - remove generator overhead by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10059](https://redirect.github.com/pydantic/pydantic/pull/10059) - Remove default module globals from types namespace by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10123](https://redirect.github.com/pydantic/pydantic/pull/10123) - Performance boost: skip caching parent namespaces in most cases by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10113](https://redirect.github.com/pydantic/pydantic/pull/10113) - Update ns stack with already copied ns by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10267](https://redirect.github.com/pydantic/pydantic/pull/10267) ##### Minor Internal Improvements - ⚡️ Speed up `multiple_of_validator()` by 31% in `pydantic/_internal/_validators.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9839](https://redirect.github.com/pydantic/pydantic/pull/9839) - ⚡️ Speed up `ModelPrivateAttr.__set_name__()` by 18% in `pydantic/fields.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9841](https://redirect.github.com/pydantic/pydantic/pull/9841) - ⚡️ Speed up `dataclass()` by 7% in `pydantic/dataclasses.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9843](https://redirect.github.com/pydantic/pydantic/pull/9843) - ⚡️ Speed up function `_field_name_for_signature` by 37% in `pydantic/_internal/_signature.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9951](https://redirect.github.com/pydantic/pydantic/pull/9951) - ⚡️ Speed up method `GenerateSchema._unpack_refs_defs` by 26% in `pydantic/_internal/_generate_schema.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9949](https://redirect.github.com/pydantic/pydantic/pull/9949) - ⚡️ Speed up function `apply_each_item_validators` by 100% in `pydantic/_internal/_generate_schema.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9950](https://redirect.github.com/pydantic/pydantic/pull/9950) - ⚡️ Speed up method `ConfigWrapper.core_config` by 28% in `pydantic/_internal/_config.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9953](https://redirect.github.com/pydantic/pydantic/pull/9953) ##### Fixes - Respect `use_enum_values` on `Literal` types by [@​kwint](https://redirect.github.com/kwint) in [#​9787](https://redirect.github.com/pydantic/pydantic/pull/9787) - Prevent type error for exotic `BaseModel/RootModel` inheritance by [@​dmontagu](https://redirect.github.com/dmontagu) in [#​9913](https://redirect.github.com/pydantic/pydantic/pull/9913) - Fix typing issue with field_validator-decorated methods by [@​dmontagu](https://redirect.github.com/dmontagu) in [#​9914](https://redirect.github.com/pydantic/pydantic/pull/9914) - Replace `str` type annotation with `Any` in validator factories in documentation on validators by [@​maximilianfellhuber](https://redirect.github.com/maximilianfellhuber) in [#​9885](https://redirect.github.com/pydantic/pydantic/pull/9885) - Fix `ComputedFieldInfo.wrapped_property` pointer when a property setter is assigned by [@​tlambert03](https://redirect.github.com/tlambert03) in [#​9892](https://redirect.github.com/pydantic/pydantic/pull/9892) - Fix recursive typing of `main.IncEnx` by [@​tlambert03](https://redirect.github.com/tlambert03) in [#​9924](https://redirect.github.com/pydantic/pydantic/pull/9924) - Allow usage of `type[Annotated[...]]` by [@​Viicos](https://redirect.github.com/Viicos) in [#​9932](https://redirect.github.com/pydantic/pydantic/pull/9932) - `mypy` plugin: handle frozen fields on a per-field basis by [@​dmontagu](https://redirect.github.com/dmontagu) in [#​9935](https://redirect.github.com/pydantic/pydantic/pull/9935) - Fix typo in `invalid-annotated-type` error code by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9948](https://redirect.github.com/pydantic/pydantic/pull/9948) - Simplify schema generation for `uuid`, `url`, and `ip` types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9975](https://redirect.github.com/pydantic/pydantic/pull/9975) - Move `date` schemas to `_generate_schema.py` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9976](https://redirect.github.com/pydantic/pydantic/pull/9976) - Move `decimal.Decimal` validation to `_generate_schema.py` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9977](https://redirect.github.com/pydantic/pydantic/pull/9977) - Simplify IP address schema in `_std_types_schema.py` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9959](https://redirect.github.com/pydantic/pydantic/pull/9959) - Fix type annotations for some potentially generic `GenerateSchema.match_type` options by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9961](https://redirect.github.com/pydantic/pydantic/pull/9961) - Add class name to "has conflict" warnings by [@​msabramo](https://redirect.github.com/msabramo) in [#​9964](https://redirect.github.com/pydantic/pydantic/pull/9964) - Fix `dataclass` ignoring `default_factory` passed in Annotated by [@​kc0506](https://redirect.github.com/kc0506) in [#​9971](https://redirect.github.com/pydantic/pydantic/pull/9971) - Fix `Sequence` ignoring `discriminator` by [@​kc0506](https://redirect.github.com/kc0506) in [#​9980](https://redirect.github.com/pydantic/pydantic/pull/9980) - Fix typing for `IPvAnyAddress` and `IPvAnyInterface` by [@​haoyun](https://redirect.github.com/haoyun) in [#​9990](https://redirect.github.com/pydantic/pydantic/pull/9990) - Fix false positives on v1 models in `mypy` plugin for `from_orm` check requiring from_attributes=True config by [@​radekwlsk](https://redirect.github.com/radekwlsk) in [#​9938](https://redirect.github.com/pydantic/pydantic/pull/9938) - Apply `strict=True` to `__init__` in `mypy` plugin by [@​kc0506](https://redirect.github.com/kc0506) in [#​9998](https://redirect.github.com/pydantic/pydantic/pull/9998) - Refactor application of `deque` annotations by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10018](https://redirect.github.com/pydantic/pydantic/pull/10018) - Raise a better user error when failing to evaluate a forward reference by [@​Viicos](https://redirect.github.com/Viicos) in [#​10030](https://redirect.github.com/pydantic/pydantic/pull/10030) - Fix evaluation of `__pydantic_extra__` annotation in specific circumstances by [@​Viicos](https://redirect.github.com/Viicos) in [#​10070](https://redirect.github.com/pydantic/pydantic/pull/10070) - Fix `frozen` enforcement for `dataclasses` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10066](https://redirect.github.com/pydantic/pydantic/pull/10066) - Remove logic to handle unused `__get_pydantic_core_schema__` signature by [@​Viicos](https://redirect.github.com/Viicos) in [#​10075](https://redirect.github.com/pydantic/pydantic/pull/10075) - Use `is_annotated` consistently by [@​Viicos](https://redirect.github.com/Viicos) in [#​10095](https://redirect.github.com/pydantic/pydantic/pull/10095) - Fix `PydanticDeprecatedSince26` typo by [@​kc0506](https://redirect.github.com/kc0506) in [#​10101](https://redirect.github.com/pydantic/pydantic/pull/10101) - Improve `pyright` tests, refactor model decorators signatures by [@​Viicos](https://redirect.github.com/Viicos) in [#​10092](https://redirect.github.com/pydantic/pydantic/pull/10092) - Fix `ip` serialization logic by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10112](https://redirect.github.com/pydantic/pydantic/pull/10112) - Warn when frozen defined twice for `dataclasses` by [@​mochi22](https://redirect.github.com/mochi22) in [#​10082](https://redirect.github.com/pydantic/pydantic/pull/10082) - Do not compute JSON Schema default when plain serializers are used with `when_used` set to `'json-unless-none'` and the default value is `None` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10121](https://redirect.github.com/pydantic/pydantic/pull/10121) - Fix `ImportString` special cases by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10137](https://redirect.github.com/pydantic/pydantic/pull/10137) - Blacklist default globals to support exotic user code with `__` prefixed annotations by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10136](https://redirect.github.com/pydantic/pydantic/pull/10136) - Handle `nullable` schemas with `serialization` schema available during JSON Schema generation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10132](https://redirect.github.com/pydantic/pydantic/pull/10132) - Reorganize `BaseModel` annotations by [@​kc0506](https://redirect.github.com/kc0506) in [#​10110](https://redirect.github.com/pydantic/pydantic/pull/10110) - Fix core schema simplification when serialization schemas are involved in specific scenarios by [@​Viicos](https://redirect.github.com/Viicos) in [#​10155](https://redirect.github.com/pydantic/pydantic/pull/10155) - Add support for stringified annotations when using `PrivateAttr` with `Annotated` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10157](https://redirect.github.com/pydantic/pydantic/pull/10157) - Fix JSON Schema `number` type for literal and enum schemas by [@​Viicos](https://redirect.github.com/Viicos) in [#​10172](https://redirect.github.com/pydantic/pydantic/pull/10172) - Fix JSON Schema generation of fields with plain validators in serialization mode by [@​Viicos](https://redirect.github.com/Viicos) in [#​10167](https://redirect.github.com/pydantic/pydantic/pull/10167) - Fix invalid JSON Schemas being generated for functions in certain scenarios by [@​Viicos](https://redirect.github.com/Viicos) in [#​10188](https://redirect.github.com/pydantic/pydantic/pull/10188) - Make sure generated JSON Schemas are valid in tests by [@​Viicos](https://redirect.github.com/Viicos) in [#​10182](https://redirect.github.com/pydantic/pydantic/pull/10182) - Fix key error with custom serializer by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10200](https://redirect.github.com/pydantic/pydantic/pull/10200) - Add 'wss' for allowed schemes in NatsDsn by [@​swelborn](https://redirect.github.com/swelborn) in [#​10224](https://redirect.github.com/pydantic/pydantic/pull/10224) - Fix `Mapping` and `MutableMapping` annotations to use mapping schema instead of dict schema by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10020](https://redirect.github.com/pydantic/pydantic/pull/10020) - Fix JSON Schema generation for constrained dates by [@​Viicos](https://redirect.github.com/Viicos) in [#​10185](https://redirect.github.com/pydantic/pydantic/pull/10185) - Fix discriminated union bug regression when using enums by [@​kfreezen](https://redirect.github.com/kfreezen) in [pydantic/pydantic-core#1286](https://redirect.github.com/pydantic/pydantic-core/pull/1286) - Fix `field_serializer` with computed field when using `*` by [@​nix010](https://redirect.github.com/nix010) in [pydantic/pydantic-core#1349](https://redirect.github.com/pydantic/pydantic-core/pull/1349) - Try each option in `Union` serializer before inference by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1398](https://redirect.github.com/pydantic/pydantic-core/pull/1398) - Fix `float` serialization behavior in `strict` mode by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1400](https://redirect.github.com/pydantic/pydantic-core/pull/1400) - Introduce `exactness` into Decimal validation logic to improve union validation behavior by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in in [pydantic/pydantic-core#1405](https://redirect.github.com/pydantic/pydantic-core/pull/1405) - Fix new warnings assertions to use `pytest.warns()` by [@​mgorny](https://redirect.github.com/mgorny) in [#​10241](https://redirect.github.com/pydantic/pydantic/pull/10241) - Fix a crash when cleaning the namespace in `ModelMetaclass` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10242](https://redirect.github.com/pydantic/pydantic/pull/10242) - Fix parent namespace issue with model rebuilds by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10257](https://redirect.github.com/pydantic/pydantic/pull/10257) - Remove defaults filter for namespace by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10261](https://redirect.github.com/pydantic/pydantic/pull/10261) - Use identity instead of equality after validating model in `__init__` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10264](https://redirect.github.com/pydantic/pydantic/pull/10264) - Support `BigInt` serialization for `int` subclasses by [@​kxx317](https://redirect.github.com/kxx317) in [pydantic/pydantic-core#1417](https://redirect.github.com/pydantic/pydantic-core/pull/1417) - Support signature for wrap validators without `info` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10277](https://redirect.github.com/pydantic/pydantic/pull/10277) - Ensure `__pydantic_complete__` is set when rebuilding `dataclasses` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10291](https://redirect.github.com/pydantic/pydantic/pull/10291) - Respect `schema_generator` config value in `TypeAdapter` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10300](https://redirect.github.com/pydantic/pydantic/pull/10300) ##### New Contributors ##### `pydantic` - [@​kwint](https://redirect.github.com/kwint) made their first contribution in [#​9787](https://redirect.github.com/pydantic/pydantic/pull/9787) - [@​seekinginfiniteloop](https://redirect.github.com/seekinginfiniteloop) made their first contribution in [#​9822](https://redirect.github.com/pydantic/pydantic/pull/9822) - [@​a-alexander](https://redirect.github.com/a-alexander) made their first contribution in [#​9848](https://redirect.github.com/pydantic/pydantic/pull/9848) - [@​maximilianfellhuber](https://redirect.github.com/maximilianfellhuber) made their first contribution in [#​9885](https://redirect.github.com/pydantic/pydantic/pull/9885) - [@​karmaBonfire](https://redirect.github.com/karmaBonfire) made their first contribution in [#​9945](https://redirect.github.com/pydantic/pydantic/pull/9945) - [@​s-rigaud](https://redirect.github.com/s-rigaud) made their first contribution in [#​9958](https://redirect.github.com/pydantic/pydantic/pull/9958) - [@​msabramo](https://redirect.github.com/msabramo) made their first contribution in [#​9964](https://redirect.github.com/pydantic/pydantic/pull/9964) - [@​DimaCybr](https://redirect.github.com/DimaCybr) made their first contribution in [#​9972](https://redirect.github.com/pydantic/pydantic/pull/9972) - [@​kc0506](https://redirect.github.com/kc0506) made their first contribution in [#​9971](https://redirect.github.com/pydantic/pydantic/pull/9971) - [@​haoyun](https://redirect.github.com/haoyun) made their first contribution in [#​9990](https://redirect.github.com/pydantic/pydantic/pull/9990) - [@​radekwlsk](https://redirect.github.com/radekwlsk) made their first contribution in [#​9938](https://redirect.github.com/pydantic/pydantic/pull/9938) - [@​dpeachey](https://redirect.github.com/dpeachey) made their first contribution in [#​10029](https://redirect.github.com/pydantic/pydantic/pull/10029) - [@​BoxyUwU](https://redirect.github.com/BoxyUwU) made their first contribution in [#​10085](https://redirect.github.com/pydantic/pydantic/pull/10085) - [@​mochi22](https://redirect.github.com/mochi22) made their first contribution in [#​10082](https://redirect.github.com/pydantic/pydantic/pull/10082) - [@​aditkumar72](https://redirect.github.com/aditkumar72) made their first contribution in [#​10128](https://redirect.github.com/pydantic/pydantic/pull/10128) - [@​changhc](https://redirect.github.com/changhc) made their first contribution in [#​9654](https://redirect.github.com/pydantic/pydantic/pull/9654) - [@​insumanth](https://redirect.github.com/insumanth) made their first contribution in [#​10229](https://redirect.github.com/pydantic/pydantic/pull/10229) - [@​AdolfoVillalobos](https://redirect.github.com/AdolfoVillalobos) made their first contribution in [#​10240](https://redirect.github.com/pydantic/pydantic/pull/10240) - [@​bllchmbrs](https://redirect.github.com/bllchmbrs) made their first contribution in [#​10270](https://redirect.github.com/pydantic/pydantic/pull/10270) ##### `pydantic-core` - [@​kfreezen](https://redirect.github.com/kfreezen) made their first contribution in [pydantic/pydantic-core#1286](https://redirect.github.com/pydantic/pydantic-core/pull/1286) - [@​tinez](https://redirect.github.com/tinez) made their first contribution in [pydantic/pydantic-core#1368](https://redirect.github.com/pydantic/pydantic-core/pull/1368) - [@​fft001](https://redirect.github.com/fft001) made their first contribution in [pydantic/pydantic-core#1362](https://redirect.github.com/pydantic/pydantic-core/pull/1362) - [@​nix010](https://redirect.github.com/nix010) made their first contribution in [pydantic/pydantic-core#1349](https://redirect.github.com/pydantic/pydantic-core/pull/1349) - [@​BoxyUwU](https://redirect.github.com/BoxyUwU) made their first contribution in [pydantic/pydantic-core#1379](https://redirect.github.com/pydantic/pydantic-core/pull/1379) - [@​candleindark](https://redirect.github.com/candleindark) made their first contribution in [pydantic/pydantic-core#1404](https://redirect.github.com/pydantic/pydantic-core/pull/1404) - [@​changhc](https://redirect.github.com/changhc) made their first contribution in [pydantic/pydantic-core#1331](https://redirect.github.com/pydantic/pydantic-core/pull/1331) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/spiraldb/ziggy-pydust). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC41OS4yIiwidXBkYXRlZEluVmVyIjoiMzguNTkuMiIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@headlessui/react](https://redirect.github.com/tailwindlabs/headlessui) ([source](https://redirect.github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react)) | [`2.1.3` -> `2.1.5`](https://renovatebot.com/diffs/npm/@headlessui%2freact/2.1.3/2.1.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@headlessui%2freact/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@headlessui%2freact/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@headlessui%2freact/2.1.3/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@headlessui%2freact/2.1.3/2.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@tailwindcss/forms](https://redirect.github.com/tailwindlabs/tailwindcss-forms) | [`0.5.8` -> `0.5.9`](https://renovatebot.com/diffs/npm/@tailwindcss%2fforms/0.5.8/0.5.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fforms/0.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fforms/0.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fforms/0.5.8/0.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fforms/0.5.8/0.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.16.3` -> `20.16.5`](https://renovatebot.com/diffs/npm/@types%2fnode/20.16.3/20.16.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.16.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.16.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.16.3/20.16.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.16.3/20.16.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [ai](https://sdk.vercel.ai/docs) ([source](https://redirect.github.com/vercel/ai)) | [`3.3.25` -> `3.3.30`](https://renovatebot.com/diffs/npm/ai/3.3.25/3.3.30) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ai/3.3.30?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ai/3.3.30?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ai/3.3.25/3.3.30?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ai/3.3.25/3.3.30?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [eslint-config-next](https://nextjs.org/docs/app/building-your-application/configuring/eslint#eslint-config) ([source](https://redirect.github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next)) | [`14.2.7` -> `14.2.8`](https://renovatebot.com/diffs/npm/eslint-config-next/14.2.7/14.2.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-config-next/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-config-next/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-config-next/14.2.7/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-config-next/14.2.7/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [guardrails-ai](https://www.guardrailsai.com/) | `0.5.6` -> `0.5.7` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/guardrails-ai/0.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/guardrails-ai/0.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/guardrails-ai/0.5.6/0.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/guardrails-ai/0.5.6/0.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [next](https://nextjs.org) ([source](https://redirect.github.com/vercel/next.js)) | [`14.2.7` -> `14.2.8`](https://renovatebot.com/diffs/npm/next/14.2.7/14.2.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/next/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/next/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/next/14.2.7/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/next/14.2.7/14.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [openai](https://redirect.github.com/openai/openai-python) | `1.43.0` -> `1.44.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/openai/1.44.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/openai/1.44.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/openai/1.43.0/1.44.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/openai/1.43.0/1.44.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [openai](https://redirect.github.com/openai/openai-node) | [`4.57.0` -> `4.58.1`](https://renovatebot.com/diffs/npm/openai/4.57.0/4.58.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.57.0/4.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.57.0/4.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [postcss](https://postcss.org/) ([source](https://redirect.github.com/postcss/postcss)) | [`8.4.44` -> `8.4.45`](https://renovatebot.com/diffs/npm/postcss/8.4.44/8.4.45) | [![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.4.45?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss/8.4.45?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss/8.4.44/8.4.45?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.4.44/8.4.45?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [pydantic](https://redirect.github.com/pydantic/pydantic) ([changelog](https://docs.pydantic.dev/latest/changelog/)) | `2.8.2` -> `2.9.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/2.8.2/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.8.2/2.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [typescript](https://www.typescriptlang.org/) ([source](https://redirect.github.com/microsoft/TypeScript)) | [`5.5.4` -> `5.6.2`](https://renovatebot.com/diffs/npm/typescript/5.5.4/5.6.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.5.4/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.5.4/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>tailwindlabs/headlessui (@​headlessui/react)</summary> ### [`v2.1.5`](https://redirect.github.com/tailwindlabs/headlessui/blob/HEAD/packages/@​headlessui-react/CHANGELOG.md#215---2024-09-04) [Compare Source](https://redirect.github.com/tailwindlabs/headlessui/compare/@headlessui/[email protected]...@headlessui/[email protected]) ##### Fixed - Fix transition bug on Firefox, triggered by clicking the `PopoverButton` in rapid succession ([#​3452](https://redirect.github.com/tailwindlabs/headlessui/pull/3452)) ### [`v2.1.4`](https://redirect.github.com/tailwindlabs/headlessui/blob/HEAD/packages/@​headlessui-react/CHANGELOG.md#214---2024-09-03) [Compare Source](https://redirect.github.com/tailwindlabs/headlessui/compare/@headlessui/[email protected]...@headlessui/[email protected]) ##### Fixed - Fix components not closing properly when using the `transition` prop ([#​3448](https://redirect.github.com/tailwindlabs/headlessui/pull/3448)) </details> <details> <summary>tailwindlabs/tailwindcss-forms (@​tailwindcss/forms)</summary> ### [`v0.5.9`](https://redirect.github.com/tailwindlabs/tailwindcss-forms/blob/HEAD/CHANGELOG.md#059---2024-09-05) [Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss-forms/compare/v0.5.8...v0.5.9) ##### Fixed - Fallback to static chevron color if theme is using variables ([#​167](https://redirect.github.com/tailwindlabs/tailwindcss-forms/pull/167)) </details> <details> <summary>vercel/ai (ai)</summary> ### [`v3.3.30`](https://redirect.github.com/vercel/ai/releases/tag/ai%403.3.30) [Compare Source](https://redirect.github.com/vercel/ai/compare/[email protected]@3.3.30) ##### Patch Changes - [`6ee1f8e`](https://redirect.github.com/vercel/ai/commit/6ee1f8e): feat (ai/core): add toDataStream to streamText result ### [`v3.3.29`](https://redirect.github.com/vercel/ai/releases/tag/ai%403.3.29) [Compare Source](https://redirect.github.com/vercel/ai/compare/[email protected]@3.3.29) ##### Patch Changes - [`1e3dfd2`](https://redirect.github.com/vercel/ai/commit/1e3dfd2): feat (ai/core): enhance pipeToData/TextStreamResponse methods ### [`v3.3.28`](https://redirect.github.com/vercel/ai/releases/tag/ai%403.3.28) [Compare Source](https://redirect.github.com/vercel/ai/compare/[email protected]@3.3.28) ##### Patch Changes - [`db61c53`](https://redirect.github.com/vercel/ai/commit/db61c53): feat (ai/core): middleware support ### [`v3.3.27`](https://redirect.github.com/vercel/ai/releases/tag/ai%403.3.27) [Compare Source](https://redirect.github.com/vercel/ai/compare/[email protected]@3.3.27) ##### Patch Changes - [`03313cd`](https://redirect.github.com/vercel/ai/commit/03313cd): feat (ai): expose response id, response model, response timestamp in telemetry and api - [`3be7c1c`](https://redirect.github.com/vercel/ai/commit/3be7c1c): fix (provider/anthropic): support prompt caching on assistant messages - Updated dependencies \[[`03313cd`](https://redirect.github.com/vercel/ai/commit/03313cd)] - Updated dependencies \[[`3be7c1c`](https://redirect.github.com/vercel/ai/commit/3be7c1c)] - [@​ai-sdk/provider-utils](https://redirect.github.com/ai-sdk/provider-utils)[@​1](https://redirect.github.com/1).0.18 - [@​ai-sdk/provider](https://redirect.github.com/ai-sdk/provider)[@​0](https://redirect.github.com/0).0.23 - [@​ai-sdk/react](https://redirect.github.com/ai-sdk/react)[@​0](https://redirect.github.com/0).0.55 - [@​ai-sdk/solid](https://redirect.github.com/ai-sdk/solid)[@​0](https://redirect.github.com/0).0.44 - [@​ai-sdk/svelte](https://redirect.github.com/ai-sdk/svelte)[@​0](https://redirect.github.com/0).0.46 - [@​ai-sdk/ui-utils](https://redirect.github.com/ai-sdk/ui-utils)[@​0](https://redirect.github.com/0).0.41 - [@​ai-sdk/vue](https://redirect.github.com/ai-sdk/vue)[@​0](https://redirect.github.com/0).0.46 ### [`v3.3.26`](https://redirect.github.com/vercel/ai/releases/tag/ai%403.3.26) [Compare Source](https://redirect.github.com/vercel/ai/compare/[email protected]@3.3.26) ##### Patch Changes - Updated dependencies \[[`4ab883f`](https://redirect.github.com/vercel/ai/commit/4ab883f)] - [@​ai-sdk/react](https://redirect.github.com/ai-sdk/react)[@​0](https://redirect.github.com/0).0.54 </details> <details> <summary>vercel/next.js (eslint-config-next)</summary> ### [`v14.2.8`](https://redirect.github.com/vercel/next.js/compare/v14.2.7...v14.2.8) [Compare Source](https://redirect.github.com/vercel/next.js/compare/v14.2.7...v14.2.8) </details> <details> <summary>vercel/next.js (next)</summary> ### [`v14.2.8`](https://redirect.github.com/vercel/next.js/compare/v14.2.7...v14.2.8) [Compare Source](https://redirect.github.com/vercel/next.js/compare/v14.2.7...v14.2.8) </details> <details> <summary>openai/openai-python (openai)</summary> ### [`v1.44.0`](https://redirect.github.com/openai/openai-python/blob/HEAD/CHANGELOG.md#1440-2024-09-06) [Compare Source](https://redirect.github.com/openai/openai-python/compare/v1.43.1...v1.44.0) Full Changelog: [v1.43.1...v1.44.0](https://redirect.github.com/openai/openai-python/compare/v1.43.1...v1.44.0) ##### Features - **vector store:** improve chunking strategy type names ([#​1690](https://redirect.github.com/openai/openai-python/issues/1690)) ([e82cd85](https://redirect.github.com/openai/openai-python/commit/e82cd85ac4962e36cb3b139c503069b56918688f)) ### [`v1.43.1`](https://redirect.github.com/openai/openai-python/blob/HEAD/CHANGELOG.md#1431-2024-09-05) [Compare Source](https://redirect.github.com/openai/openai-python/compare/v1.43.0...v1.43.1) Full Changelog: [v1.43.0...v1.43.1](https://redirect.github.com/openai/openai-python/compare/v1.43.0...v1.43.1) ##### Chores - pyproject.toml formatting changes ([#​1687](https://redirect.github.com/openai/openai-python/issues/1687)) ([3387ede](https://redirect.github.com/openai/openai-python/commit/3387ede0b896788bf1197378b01941c75bd6e179)) </details> <details> <summary>openai/openai-node (openai)</summary> ### [`v4.58.1`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4581-2024-09-06) [Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.58.0...v4.58.1) Full Changelog: [v4.58.0...v4.58.1](https://redirect.github.com/openai/openai-node/compare/v4.58.0...v4.58.1) ##### Chores - **docs:** update browser support information ([#​1045](https://redirect.github.com/openai/openai-node/issues/1045)) ([d326cc5](https://redirect.github.com/openai/openai-node/commit/d326cc54a77c450672fbf07d736cec80a9ba72fb)) ### [`v4.58.0`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4580-2024-09-05) [Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.57.3...v4.58.0) Full Changelog: [v4.57.3...v4.58.0](https://redirect.github.com/openai/openai-node/compare/v4.57.3...v4.58.0) ##### Features - **vector store:** improve chunking strategy type names ([#​1041](https://redirect.github.com/openai/openai-node/issues/1041)) ([471cec3](https://redirect.github.com/openai/openai-node/commit/471cec3228886253f07c13a362827a31e9ec7b63)) ##### Bug Fixes - **uploads:** avoid making redundant memory copies ([#​1043](https://redirect.github.com/openai/openai-node/issues/1043)) ([271297b](https://redirect.github.com/openai/openai-node/commit/271297bd32393d4c5663023adf82f8fb19dc3d25)) ### [`v4.57.3`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4573-2024-09-04) [Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.57.2...v4.57.3) Full Changelog: [v4.57.2...v4.57.3](https://redirect.github.com/openai/openai-node/compare/v4.57.2...v4.57.3) ##### Bug Fixes - **helpers/zod:** avoid import issue in certain environments ([#​1039](https://redirect.github.com/openai/openai-node/issues/1039)) ([e238daa](https://redirect.github.com/openai/openai-node/commit/e238daa7c12f3fb13369f58b9d405365f5efcc8f)) ##### Chores - **internal:** minor bump qs version ([#​1037](https://redirect.github.com/openai/openai-node/issues/1037)) ([8ec218e](https://redirect.github.com/openai/openai-node/commit/8ec218e9efb657927b3c0346822a96872aeaf137)) ### [`v4.57.2`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4572-2024-09-04) [Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.57.1...v4.57.2) Full Changelog: [v4.57.1...v4.57.2](https://redirect.github.com/openai/openai-node/compare/v4.57.1...v4.57.2) ##### Chores - **internal:** dependency updates ([#​1035](https://redirect.github.com/openai/openai-node/issues/1035)) ([e815fb6](https://redirect.github.com/openai/openai-node/commit/e815fb6dee75219563d3a7776774ba1c2984560e)) ### [`v4.57.1`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4571-2024-09-03) [Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.57.0...v4.57.1) Full Changelog: [v4.57.0...v4.57.1](https://redirect.github.com/openai/openai-node/compare/v4.57.0...v4.57.1) ##### Bug Fixes - **assistants:** correctly accumulate tool calls when streaming ([#​1031](https://redirect.github.com/openai/openai-node/issues/1031)) ([d935ad3](https://redirect.github.com/openai/openai-node/commit/d935ad3fa37b2701f4c9f6e433ada6074280a871)) - **client:** correct File construction from node-fetch Responses ([#​1029](https://redirect.github.com/openai/openai-node/issues/1029)) ([22ebdc2](https://redirect.github.com/openai/openai-node/commit/22ebdc2ca7d98e0f266110c4cf827e53a0a22026)) - runTools without stream should not emit user message events ([#​1005](https://redirect.github.com/openai/openai-node/issues/1005)) ([22ded4d](https://redirect.github.com/openai/openai-node/commit/22ded4d549a157482a8de2faf65e92c5be07fa95)) ##### Chores - **internal/tests:** workaround bug in recent types/node release ([3c7bdfd](https://redirect.github.com/openai/openai-node/commit/3c7bdfdb373bff77db0e3fecd5d49ddfa4284cd9)) </details> <details> <summary>postcss/postcss (postcss)</summary> ### [`v8.4.45`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8445) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.4.44...8.4.45) - Removed unnecessary fix which could lead to infinite loop. </details> <details> <summary>pydantic/pydantic (pydantic)</summary> ### [`v2.9.1`](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.9.1): (2024-09-09) [Compare Source](https://redirect.github.com/pydantic/pydantic/compare/v2.9.0...v2.9.1) #### What's Changed ##### Fixes - Fix Predicate issue in v2.9.0 by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10321](https://redirect.github.com/pydantic/pydantic/pull/10321) - Fixing `annotated-types` bound to `>=0.6.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10327](https://redirect.github.com/pydantic/pydantic/pull/10327) - Turn `tzdata` install requirement into optional `timezone` dependency by [@​jakob-keller](https://redirect.github.com/jakob-keller) in [#​10331](https://redirect.github.com/pydantic/pydantic/pull/10331) - Fix `IncExc` type alias definition by [@​Viicos](https://redirect.github.com/Viicos) in [#​10339](https://redirect.github.com/pydantic/pydantic/pull/10339) - Use correct types namespace when building namedtuple core schemas by [@​Viicos](https://redirect.github.com/Viicos) in [#​10337](https://redirect.github.com/pydantic/pydantic/pull/10337) - Fix evaluation of stringified annotations during namespace inspection by [@​Viicos](https://redirect.github.com/Viicos) in [#​10347](https://redirect.github.com/pydantic/pydantic/pull/10347) - Fix tagged union serialization with alias generators by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1442](https://redirect.github.com/pydantic/pydantic-core/pull/1442) **Full Changelog**: pydantic/pydantic@v2.9.0...v2.9.1 ### [`v2.9.0`](https://redirect.github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v290-2024-09-05) [Compare Source](https://redirect.github.com/pydantic/pydantic/compare/v2.8.2...v2.9.0) [GitHub release](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.9.0) The code released in v2.9.0 is practically identical to that of v2.9.0b2. ##### What's Changed ##### Packaging - Bump `ruff` to `v0.5.0` and `pyright` to `v1.1.369` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9801](https://redirect.github.com/pydantic/pydantic/pull/9801) - Bump `pydantic-extra-types` to `v2.9.0` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9832](https://redirect.github.com/pydantic/pydantic/pull/9832) - Support compatibility with `pdm v2.18.1` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10138](https://redirect.github.com/pydantic/pydantic/pull/10138) - Bump `v1` version stub to `v1.10.18` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10214](https://redirect.github.com/pydantic/pydantic/pull/10214) - Bump `pydantic-core` to `v2.23.2` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10311](https://redirect.github.com/pydantic/pydantic/pull/10311) ##### New Features - Add support for `ZoneInfo` by [@​Youssefares](https://redirect.github.com/Youssefares) in [#​9896](https://redirect.github.com/pydantic/pydantic/pull/9896) - Add `Config.val_json_bytes` by [@​josh-newman](https://redirect.github.com/josh-newman) in [#​9770](https://redirect.github.com/pydantic/pydantic/pull/9770) - Add DSN for Snowflake by [@​aditkumar72](https://redirect.github.com/aditkumar72) in [#​10128](https://redirect.github.com/pydantic/pydantic/pull/10128) - Support `complex` number by [@​changhc](https://redirect.github.com/changhc) in [#​9654](https://redirect.github.com/pydantic/pydantic/pull/9654) - Add support for `annotated_types.Not` by [@​aditkumar72](https://redirect.github.com/aditkumar72) in [#​10210](https://redirect.github.com/pydantic/pydantic/pull/10210) - Allow `WithJsonSchema` to inject `$ref`s w/ `http` or `https` links by [@​dAIsySHEng1](https://redirect.github.com/dAIsySHEng1) in [#​9863](https://redirect.github.com/pydantic/pydantic/pull/9863) - Allow validators to customize validation JSON schema by [@​Viicos](https://redirect.github.com/Viicos) in [#​10094](https://redirect.github.com/pydantic/pydantic/pull/10094) - Support parametrized `PathLike` types by [@​nix010](https://redirect.github.com/nix010) in [#​9764](https://redirect.github.com/pydantic/pydantic/pull/9764) - Add tagged union serializer that attempts to use `str` or `callable` discriminators to select the correct serializer by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in in [pydantic/pydantic-core#1397](https://redirect.github.com/pydantic/pydantic-core/pull/1397) ##### Changes - Breaking Change: Merge `dict` type `json_schema_extra` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9792](https://redirect.github.com/pydantic/pydantic/pull/9792) - For more info (how to replicate old behavior) on this change, see [here](https://docs.pydantic.dev/dev/concepts/json_schema/#merging-json_schema_extra) - Refactor annotation injection for known (often generic) types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9979](https://redirect.github.com/pydantic/pydantic/pull/9979) - Move annotation compatibility errors to validation phase by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9999](https://redirect.github.com/pydantic/pydantic/pull/9999) - Improve runtime errors for string constraints like `pattern` for incompatible types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10158](https://redirect.github.com/pydantic/pydantic/pull/10158) - Remove `'allOf'` JSON schema workarounds by [@​dpeachey](https://redirect.github.com/dpeachey) in [#​10029](https://redirect.github.com/pydantic/pydantic/pull/10029) - Remove `typed_dict_cls` data from `CoreMetadata` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10180](https://redirect.github.com/pydantic/pydantic/pull/10180) - Deprecate passing a dict to the `Examples` class by [@​Viicos](https://redirect.github.com/Viicos) in [#​10181](https://redirect.github.com/pydantic/pydantic/pull/10181) - Remove `initial_metadata` from internal metadata construct by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10194](https://redirect.github.com/pydantic/pydantic/pull/10194) - Use `re.Pattern.search` instead of `re.Pattern.match` for consistency with `rust` behavior by [@​tinez](https://redirect.github.com/tinez) in [pydantic/pydantic-core#1368](https://redirect.github.com/pydantic/pydantic-core/pull/1368) - Show value of wrongly typed data in `pydantic-core` serialization warning by [@​BoxyUwU](https://redirect.github.com/BoxyUwU) in [pydantic/pydantic-core#1377](https://redirect.github.com/pydantic/pydantic-core/pull/1377) - Breaking Change: in `pydantic-core`, change `metadata` type hint in core schemas from `Any` -> `Dict[str, Any] | None` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1411](https://redirect.github.com/pydantic/pydantic-core/pull/1411) - Raise helpful warning when `self` isn't returned from model validator by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10255](https://redirect.github.com/pydantic/pydantic/pull/10255) ##### Performance - Initial start at improving import times for modules, using caching primarily by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10009](https://redirect.github.com/pydantic/pydantic/pull/10009) - Using cached internal import for `BaseModel` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10013](https://redirect.github.com/pydantic/pydantic/pull/10013) - Simplify internal generics logic - remove generator overhead by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10059](https://redirect.github.com/pydantic/pydantic/pull/10059) - Remove default module globals from types namespace by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10123](https://redirect.github.com/pydantic/pydantic/pull/10123) - Performance boost: skip caching parent namespaces in most cases by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10113](https://redirect.github.com/pydantic/pydantic/pull/10113) - Update ns stack with already copied ns by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10267](https://redirect.github.com/pydantic/pydantic/pull/10267) ##### Minor Internal Improvements - ⚡️ Speed up `multiple_of_validator()` by 31% in `pydantic/_internal/_validators.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9839](https://redirect.github.com/pydantic/pydantic/pull/9839) - ⚡️ Speed up `ModelPrivateAttr.__set_name__()` by 18% in `pydantic/fields.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9841](https://redirect.github.com/pydantic/pydantic/pull/9841) - ⚡️ Speed up `dataclass()` by 7% in `pydantic/dataclasses.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9843](https://redirect.github.com/pydantic/pydantic/pull/9843) - ⚡️ Speed up function `_field_name_for_signature` by 37% in `pydantic/_internal/_signature.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9951](https://redirect.github.com/pydantic/pydantic/pull/9951) - ⚡️ Speed up method `GenerateSchema._unpack_refs_defs` by 26% in `pydantic/_internal/_generate_schema.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9949](https://redirect.github.com/pydantic/pydantic/pull/9949) - ⚡️ Speed up function `apply_each_item_validators` by 100% in `pydantic/_internal/_generate_schema.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9950](https://redirect.github.com/pydantic/pydantic/pull/9950) - ⚡️ Speed up method `ConfigWrapper.core_config` by 28% in `pydantic/_internal/_config.py` by [@​misrasaurabh1](https://redirect.github.com/misrasaurabh1) in [#​9953](https://redirect.github.com/pydantic/pydantic/pull/9953) ##### Fixes - Respect `use_enum_values` on `Literal` types by [@​kwint](https://redirect.github.com/kwint) in [#​9787](https://redirect.github.com/pydantic/pydantic/pull/9787) - Prevent type error for exotic `BaseModel/RootModel` inheritance by [@​dmontagu](https://redirect.github.com/dmontagu) in [#​9913](https://redirect.github.com/pydantic/pydantic/pull/9913) - Fix typing issue with field_validator-decorated methods by [@​dmontagu](https://redirect.github.com/dmontagu) in [#​9914](https://redirect.github.com/pydantic/pydantic/pull/9914) - Replace `str` type annotation with `Any` in validator factories in documentation on validators by [@​maximilianfellhuber](https://redirect.github.com/maximilianfellhuber) in [#​9885](https://redirect.github.com/pydantic/pydantic/pull/9885) - Fix `ComputedFieldInfo.wrapped_property` pointer when a property setter is assigned by [@​tlambert03](https://redirect.github.com/tlambert03) in [#​9892](https://redirect.github.com/pydantic/pydantic/pull/9892) - Fix recursive typing of `main.IncEnx` by [@​tlambert03](https://redirect.github.com/tlambert03) in [#​9924](https://redirect.github.com/pydantic/pydantic/pull/9924) - Allow usage of `type[Annotated[...]]` by [@​Viicos](https://redirect.github.com/Viicos) in [#​9932](https://redirect.github.com/pydantic/pydantic/pull/9932) - `mypy` plugin: handle frozen fields on a per-field basis by [@​dmontagu](https://redirect.github.com/dmontagu) in [#​9935](https://redirect.github.com/pydantic/pydantic/pull/9935) - Fix typo in `invalid-annotated-type` error code by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9948](https://redirect.github.com/pydantic/pydantic/pull/9948) - Simplify schema generation for `uuid`, `url`, and `ip` types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9975](https://redirect.github.com/pydantic/pydantic/pull/9975) - Move `date` schemas to `_generate_schema.py` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9976](https://redirect.github.com/pydantic/pydantic/pull/9976) - Move `decimal.Decimal` validation to `_generate_schema.py` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9977](https://redirect.github.com/pydantic/pydantic/pull/9977) - Simplify IP address schema in `_std_types_schema.py` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9959](https://redirect.github.com/pydantic/pydantic/pull/9959) - Fix type annotations for some potentially generic `GenerateSchema.match_type` options by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​9961](https://redirect.github.com/pydantic/pydantic/pull/9961) - Add class name to "has conflict" warnings by [@​msabramo](https://redirect.github.com/msabramo) in [#​9964](https://redirect.github.com/pydantic/pydantic/pull/9964) - Fix `dataclass` ignoring `default_factory` passed in Annotated by [@​kc0506](https://redirect.github.com/kc0506) in [#​9971](https://redirect.github.com/pydantic/pydantic/pull/9971) - Fix `Sequence` ignoring `discriminator` by [@​kc0506](https://redirect.github.com/kc0506) in [#​9980](https://redirect.github.com/pydantic/pydantic/pull/9980) - Fix typing for `IPvAnyAddress` and `IPvAnyInterface` by [@​haoyun](https://redirect.github.com/haoyun) in [#​9990](https://redirect.github.com/pydantic/pydantic/pull/9990) - Fix false positives on v1 models in `mypy` plugin for `from_orm` check requiring from_attributes=True config by [@​radekwlsk](https://redirect.github.com/radekwlsk) in [#​9938](https://redirect.github.com/pydantic/pydantic/pull/9938) - Apply `strict=True` to `__init__` in `mypy` plugin by [@​kc0506](https://redirect.github.com/kc0506) in [#​9998](https://redirect.github.com/pydantic/pydantic/pull/9998) - Refactor application of `deque` annotations by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10018](https://redirect.github.com/pydantic/pydantic/pull/10018) - Raise a better user error when failing to evaluate a forward reference by [@​Viicos](https://redirect.github.com/Viicos) in [#​10030](https://redirect.github.com/pydantic/pydantic/pull/10030) - Fix evaluation of `__pydantic_extra__` annotation in specific circumstances by [@​Viicos](https://redirect.github.com/Viicos) in [#​10070](https://redirect.github.com/pydantic/pydantic/pull/10070) - Fix `frozen` enforcement for `dataclasses` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10066](https://redirect.github.com/pydantic/pydantic/pull/10066) - Remove logic to handle unused `__get_pydantic_core_schema__` signature by [@​Viicos](https://redirect.github.com/Viicos) in [#​10075](https://redirect.github.com/pydantic/pydantic/pull/10075) - Use `is_annotated` consistently by [@​Viicos](https://redirect.github.com/Viicos) in [#​10095](https://redirect.github.com/pydantic/pydantic/pull/10095) - Fix `PydanticDeprecatedSince26` typo by [@​kc0506](https://redirect.github.com/kc0506) in [#​10101](https://redirect.github.com/pydantic/pydantic/pull/10101) - Improve `pyright` tests, refactor model decorators signatures by [@​Viicos](https://redirect.github.com/Viicos) in [#​10092](https://redirect.github.com/pydantic/pydantic/pull/10092) - Fix `ip` serialization logic by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10112](https://redirect.github.com/pydantic/pydantic/pull/10112) - Warn when frozen defined twice for `dataclasses` by [@​mochi22](https://redirect.github.com/mochi22) in [#​10082](https://redirect.github.com/pydantic/pydantic/pull/10082) - Do not compute JSON Schema default when plain serializers are used with `when_used` set to `'json-unless-none'` and the default value is `None` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10121](https://redirect.github.com/pydantic/pydantic/pull/10121) - Fix `ImportString` special cases by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10137](https://redirect.github.com/pydantic/pydantic/pull/10137) - Blacklist default globals to support exotic user code with `__` prefixed annotations by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10136](https://redirect.github.com/pydantic/pydantic/pull/10136) - Handle `nullable` schemas with `serialization` schema available during JSON Schema generation by [@​Viicos](https://redirect.github.com/Viicos) in [#​10132](https://redirect.github.com/pydantic/pydantic/pull/10132) - Reorganize `BaseModel` annotations by [@​kc0506](https://redirect.github.com/kc0506) in [#​10110](https://redirect.github.com/pydantic/pydantic/pull/10110) - Fix core schema simplification when serialization schemas are involved in specific scenarios by [@​Viicos](https://redirect.github.com/Viicos) in [#​10155](https://redirect.github.com/pydantic/pydantic/pull/10155) - Add support for stringified annotations when using `PrivateAttr` with `Annotated` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10157](https://redirect.github.com/pydantic/pydantic/pull/10157) - Fix JSON Schema `number` type for literal and enum schemas by [@​Viicos](https://redirect.github.com/Viicos) in [#​10172](https://redirect.github.com/pydantic/pydantic/pull/10172) - Fix JSON Schema generation of fields with plain validators in serialization mode by [@​Viicos](https://redirect.github.com/Viicos) in [#​10167](https://redirect.github.com/pydantic/pydantic/pull/10167) - Fix invalid JSON Schemas being generated for functions in certain scenarios by [@​Viicos](https://redirect.github.com/Viicos) in [#​10188](https://redirect.github.com/pydantic/pydantic/pull/10188) - Make sure generated JSON Schemas are valid in tests by [@​Viicos](https://redirect.github.com/Viicos) in [#​10182](https://redirect.github.com/pydantic/pydantic/pull/10182) - Fix key error with custom serializer by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10200](https://redirect.github.com/pydantic/pydantic/pull/10200) - Add 'wss' for allowed schemes in NatsDsn by [@​swelborn](https://redirect.github.com/swelborn) in [#​10224](https://redirect.github.com/pydantic/pydantic/pull/10224) - Fix `Mapping` and `MutableMapping` annotations to use mapping schema instead of dict schema by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10020](https://redirect.github.com/pydantic/pydantic/pull/10020) - Fix JSON Schema generation for constrained dates by [@​Viicos](https://redirect.github.com/Viicos) in [#​10185](https://redirect.github.com/pydantic/pydantic/pull/10185) - Fix discriminated union bug regression when using enums by [@​kfreezen](https://redirect.github.com/kfreezen) in [pydantic/pydantic-core#1286](https://redirect.github.com/pydantic/pydantic-core/pull/1286) - Fix `field_serializer` with computed field when using `*` by [@​nix010](https://redirect.github.com/nix010) in [pydantic/pydantic-core#1349](https://redirect.github.com/pydantic/pydantic-core/pull/1349) - Try each option in `Union` serializer before inference by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1398](https://redirect.github.com/pydantic/pydantic-core/pull/1398) - Fix `float` serialization behavior in `strict` mode by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [pydantic/pydantic-core#1400](https://redirect.github.com/pydantic/pydantic-core/pull/1400) - Introduce `exactness` into Decimal validation logic to improve union validation behavior by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in in [pydantic/pydantic-core#1405](https://redirect.github.com/pydantic/pydantic-core/pull/1405) - Fix new warnings assertions to use `pytest.warns()` by [@​mgorny](https://redirect.github.com/mgorny) in [#​10241](https://redirect.github.com/pydantic/pydantic/pull/10241) - Fix a crash when cleaning the namespace in `ModelMetaclass` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10242](https://redirect.github.com/pydantic/pydantic/pull/10242) - Fix parent namespace issue with model rebuilds by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10257](https://redirect.github.com/pydantic/pydantic/pull/10257) - Remove defaults filter for namespace by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10261](https://redirect.github.com/pydantic/pydantic/pull/10261) - Use identity instead of equality after validating model in `__init__` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10264](https://redirect.github.com/pydantic/pydantic/pull/10264) - Support `BigInt` serialization for `int` subclasses by [@​kxx317](https://redirect.github.com/kxx317) in [pydantic/pydantic-core#1417](https://redirect.github.com/pydantic/pydantic-core/pull/1417) - Support signature for wrap validators without `info` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10277](https://redirect.github.com/pydantic/pydantic/pull/10277) - Ensure `__pydantic_complete__` is set when rebuilding `dataclasses` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10291](https://redirect.github.com/pydantic/pydantic/pull/10291) - Respect `schema_generator` config value in `TypeAdapter` by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10300](https://redirect.github.com/pydantic/pydantic/pull/10300) ##### New Contributors ##### `pydantic` - [@​kwint](https://redirect.github.com/kwint) made their first contribution in [#​9787](https://redirect.github.com/pydantic/pydantic/pull/9787) - [@​seekinginfiniteloop](https://redirect.github.com/seekinginfiniteloop) made their first contribution in [#​9822](https://redirect.github.com/pydantic/pydantic/pull/9822) - [@​a-alexander](https://redirect.github.com/a-alexander) made their first contribution in [#​9848](https://redirect.github.com/pydantic/pydantic/pull/9848) - [@​maximilianfellhuber](https://redirect.github.com/maximilianfellhuber) made their first contribution in [#​9885](https://redirect.github.com/pydantic/pydantic/pull/9885) - [@​karmaBonfire](https://redirect.github.com/karmaBonfire) made their first contribution in [#​9945](https://redirect.github.com/pydantic/pydantic/pull/9945) - [@​s-rigaud](https://redirect.github.com/s-rigaud) made their first contribution in [#​9958](https://redirect.github.com/pydantic/pydantic/pull/9958) - [@​msabramo](https://redirect.github.com/msabramo) made their first contribution in [#​9964](https://redirect.github.com/pydantic/pydantic/pull/9964) - [@​DimaCybr](https://redirect.github.com/DimaCybr) made their first contribution in [#​9972](https://redirect.github.com/pydantic/pydantic/pull/9972) - [@​kc0506](https://redirect.github.com/kc0506) made their first contribution in [#​9971](https://redirect.github.com/pydantic/pydantic/pull/9971) - [@​haoyun](https://redirect.github.com/haoyun) made their first contribution in [#​9990](https://redirect.github.com/pydantic/pydantic/pull/9990) - [@​radekwlsk](https://redirect.github.com/radekwlsk) made their first contribution in [#​9938](https://redirect.github.com/pydantic/pydantic/pull/9938) - [@​dpeachey](https://redirect.github.com/dpeachey) made their first contribution in [#​10029](https://redirect.github.com/pydantic/pydantic/pull/10029) - [@​BoxyUwU](https://redirect.github.com/BoxyUwU) made their first contribution in [#​10085](https://redirect.github.com/pydantic/pydantic/pull/10085) - [@​mochi22](https://redirect.github.com/mochi22) made their first contribution in [#​10082](https://redirect.github.com/pydantic/pydantic/pull/10082) - [@​aditkumar72](https://redirect.github.com/aditkumar72) made their first contribution in [#​10128](https://redirect.github.com/pydantic/pydantic/pull/10128) - [@​changhc](https://redirect.github.com/changhc) made their first contribution in [#​9654](https://redirect.github.com/pydantic/pydantic/pull/9654) - [@​insumanth](https://redirect.github.com/insumanth) made their first contribution in [#​10229](https://redirect.github.com/pydantic/pydantic/pull/10229) - [@​AdolfoVillalobos](https://redirect.github.com/AdolfoVillalobos) made their first contribution in [#​10240](https://redirect.github.com/pydantic/pydantic/pull/10240) - [@​bllchmbrs](https://redirect.github.com/bllchmbrs) made their first contribution in [#​10270](https://redirect.github.com/pydantic/pydantic/pull/10270) ##### `pydantic-core` - [@​kfreezen](https://redirect.github.com/kfreezen) made their first contribution in [pydantic/pydantic-core#1286](https://redirect.github.com/pydantic/pydantic-core/pull/1286) - [@​tinez](https://redirect.github.com/tinez) made their first contribution in [pydantic/pydantic-core#1368](https://redirect.github.com/pydantic/pydantic-core/pull/1368) - [@​fft001](https://redirect.github.com/fft001) made their first contribution in [pydantic/pydantic-core#1362](https://redirect.github.com/pydantic/pydantic-core/pull/1362) - [@​nix010](https://redirect.github.com/nix010) made their first contribution in [pydantic/pydantic-core#1349](https://redirect.github.com/pydantic/pydantic-core/pull/1349) - [@​BoxyUwU](https://redirect.github.com/BoxyUwU) made their first contribution in [pydantic/pydantic-core#1379](https://redirect.github.com/pydantic/pydantic-core/pull/1379) - [@​candleindark](https://redirect.github.com/candleindark) made their first contribution in [pydantic/pydantic-core#1404](https://redirect.github.com/pydantic/pydantic-core/pull/1404) - [@​changhc](https://redirect.github.com/changhc) made their first contribution in [pydantic/pydantic-core#1331](https://redirect.github.com/pydantic/pydantic-core/pull/1331) </details> <details> <summary>microsoft/TypeScript (typescript)</summary> ### [`v5.6.2`](https://redirect.github.com/microsoft/TypeScript/compare/v5.5.4...a7e3374f13327483fbe94e32806d65785b0b6cda) [Compare Source](https://redirect.github.com/microsoft/TypeScript/compare/v5.5.4...v5.6.2) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" in timezone America/Chicago, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/autoblocksai/autoblocks-examples). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC41OS4yIiwidXBkYXRlZEluVmVyIjoiMzguNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Change Summary
Implement a validator and a serialiser for complex numbers.
As discussed in pydantic/pydantic#8555, since there is no official representation for complex numbers in JSON, I propose to express complex numbers as dictionaries with two keys,
real
andimag
, with floating point values. Please find examples in the newly added test suites in this PR.Note that function
str_as_complex
inshared.rs
is not yet implemented as I need to discuss with the team if we want to support this. For example, we might want to accept strings like1+2j
as a valid complex number, as long as these strings follow the format described in python's documentation. This implementation, however, will be a bit tricky. Using regular expression is the simplest solution, but it is going to be a bit slow since building regex is rather costly. Parsing strings using the cratenum_complex
will make the implementation very neat, butnum_complex
is more tolerant in terms of string format, which means we will need to handle strings not allowed in python and it is going to be problematic. The safest solution is probably to do exactly the same as how cpython parses strings. I think that can be done in a separate PR for easier reviews.Related issue number
pydantic/pydantic#8555
Checklist
pydantic-core
(except for expected changes)