Skip to content

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

@psalvaggio

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

Assignees

No one assigned

    Labels

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions