Skip to content

bad-argument-type on Annotated pydantic fields with custom schema #2586

Description

@psalvaggio

Describe the Bug

When running pyrefly check on this file: https://github.com/psalvaggio/scientific_pydantic/blob/main/tests/numpy/test_dtype.py#L22

I expect line 22 to be OK, but it actually gives:

[Pyrefly] Argument `Literal['>i4']` is not assignable to parameter `dtype` with type `dtype[Any]` in function `DefaultModel.__init__`

Background:

This is a library I am working on that has a number of pydantic adapters for scientific types. The one I linked here is for numpy.dtype, but the issue is similar on a number of other ones.

The field is annotated like:

dtype: ty.Annotated[np.dtype, DTypeAdapter()]

where DTypeAdapter() make a custom schema for the np.dtype. This particular schema is a plain validator that takes Any and either converts to a dtype or raises an exception, resulting in a validation error.

I would expect pyrefly to take Any for dtype in the model constructor, but it instead is constraining to np.dtype.

I think if there is a custom type in an Annotated field that implements __get_pydantic_core_schema__, then pyrefly should probably be fairly lax on the constraints for the corresponding keyword argument.

Happy to discuss or provide more details.

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSIEAtsbgE4AuABA6cROgOZOpwukAddEOq1GTMpgwMIAYyFg6uKhNJT0M2YQBWcXOgD6cWQAsYVVE1H1mAKT3oAyqfOoAaqigBXGAqUrJaTkDWXoYKxobJlC6GCMXCyERMH5CABUATQAFAFEDAGEACRz8gGkASQA5AHFEISYGiLFmdC8aUh4%2BdGIk4XRZKF4%2BABE0thgAQSliBhg6OvRGpgEQFZWstSDZHmnZuiYweiZW9sJMVmJfPqWAJS8NanCAN08fRGO2sjOLq6XbRwA8pUmLFiLE4DANKgZPp3udxoQ4Ax9gAKGCETiEJgAcgAPGAABzYgA0OIAPhAACzYgCU9Uaa1Wq2ujQAAgMhlQYAwTLhMPSGpgYCkDAZONyDIEHrIQmF4mYLKKUQKltEoHBiSqlkZcF46LI4j93j8ANqsQgTdCkAC6msWqoaBhMGEwsHmqnUmkI1W5%2BTCzgVqEKLrddqWNKYAFoAHzROXGQOEP2xAOuBYOhqMlY%2B5g88JSzRMBOuA5HHkQPg-LPMjMg7l6xYxOLFiyEdC4AwcQ6SwYcAwvKAQKQMegGMD3WQw9DK%2B21hoDOCEfueIfQmBhucNCF0CArgBe0Ig%2BgAvE35a4SL3DNvd4O93MxxOp0YHy3UDPNw6F0ub-v11qMxpDcHTpFkGlZJFD1kLkeT5FUhRFAdV1mFEBzeVJLVICMY2WEBum%2BcYVnTDNrHEE4yE6Y4ejA1UIBSCsOEg-oYFQ151yogjLhpYjN1iBgGyYNCrgAhpkVIHi5z4gT8PhS5WO8GBQNrGB8ANGYmByVSYBmI9Fl4JgVNkCTayoOBuGPA4VnKdAkMwD52iYWSYHeYAhIAQjoABfNZZ0k1AK3CDwFJyOglDoFFTM4CNFGUAzVN6JYIIYKCYN5flfIQpgXx3P95PQlYZKrEBsNjJF5hEut%2BLoRYhMRZEEsaTLRXFBhJU2aUDF0fRz0VAwPwzCEoDAYDVVlWIetQd4zzfJN-QSVARu1Z0sDdd4Czkb1uXsfRUwsYMVrmEaSqYbanHmoK3gq6sfXQOY1xOwFgTfUt9jzY4pFC1AOkgGAoH5JkfNrLrr3mpgLPNWReAYZUQEwOQGBWUlpvmuq6AmlEaSUjNgYmk0ViFYwdx0-QVmtMHcMqNoNkcoqKqk6rUkhpEYdO3b3DYxGmBxt9QKEDk4BGYVUC8KAGAAWT5X6UXWrQACFeBgCWhSgbiVWrNJ4GYKhJagasGsFI0MPQdtktmTATUK8ZSVGcYplQGY5gx61enwcnhiFkXxZ1lEnOPFZoypFYaRAYkQC8GR1RIchEBAABiJgAFUI4gVgDifXS4F6TLDjoCxWpObBHfwd4OAYY6yok%2BnFjAFZKaoQv3WAfBvOZEOQDIWIwCgUhCBHKgoAoeONk77uixdPBXdCdBIE4PVD30QghHjxwYHCEwGAYYg4EQAB6HeO%2BFbvCHoTgd8hHfMFwWQ4B3qeZ7nqcd5engXmgVBsFgONp4gWe6HnxZcDE3QIuIQZBYLoEjE8OYcBdLkxWAAZkIAARgAEw%2BRAJ5UOqBJwQCgQAMWgDACgaAsATyjhgoAA

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Labels

help wantedLarger than "good first issue", but still well-defined and ready for someone to pick uppydanticIssues related to support for Pydantic

Fields

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions