Skip to content

question: how to type compatibility-only args / kwargs? #1168

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

Open
MarcoGorelli opened this issue Mar 13, 2025 · 1 comment
Open

question: how to type compatibility-only args / kwargs? #1168

MarcoGorelli opened this issue Mar 13, 2025 · 1 comment

Comments

@MarcoGorelli
Copy link
Member

MarcoGorelli commented Mar 13, 2025

I'm trying to use pyright --verifytypes to check which public methods are untyped, and a lot of the results come from kwargs and args.

There seem to be 3 cases for them:

  1. they're undocumented, and just silently exist to allow for numpy-compatible code. For example: Series.std
  2. they get passed down to a third-party function. For example: most plotting funtions
  3. when they get passed to other pandas functions which have known args/kwargs. For example, the kwargs in Series.pct_change.

How should kwargs and args get typed in these cases? I'm thinking:
1., 2.: use Any
3.: make a Protocol with only the args/kwargs which can be accepted

I think if we can get these typed (even if just with Any) then pyright's verifytypes should become a lot more useful to identify missing parts of the public API surface

repo where I'm developing this type-coverage-measurement functionality: https://github.com/MarcoGorelli/measuring-pandas-type-completeness (note: it's currently quite patchy, but I've already found it useful to decide what to focus on)

@Dr-Irv
Copy link
Collaborator

Dr-Irv commented Mar 13, 2025

We've used *args: Any, **kwargs: Any, in various places, just not consistently. I'm fine if you want to introduce that.

In the cases where we know that the possible kwargs are limited (e.g., Series.pct_change(), it would be best to just replace kwargs with the possible keywords that could be used. But as a first pass, we could just let it be **kwargs: Any

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants