- 
                Notifications
    
You must be signed in to change notification settings  - Fork 270
 
          fix(gh-2036): MyPy Errors in numpyro.distributions.transforms Module
          #2066
        
          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
Conversation
| 
           This looks great, thanks! There are some minor errors numpyro/distributions/transforms.py:82: error: Missing positional argument "x" in call to "__call__" of "TransformT"  [call-arg]
Installing missing stub packages:
numpyro/distributions/transforms.py:84: error: Name "inv" already defined on line 80  [no-redef]
numpyro/distributions/transforms.py:85: error: Incompatible types in assignment (expression has type "ReferenceType[None]", variable has type "TransformT | None")  [assignment]
numpyro/distributions/transforms.py:86: error: Incompatible return value type (got "Array | Any | None", expected "TransformT")  [return-value]
numpyro/distributions/transforms.py:1550: error: Item "ndarray[tuple[Any, ...], dtype[Any]]" of "ndarray[tuple[Any, ...], dtype[Any]] | Array" has no attribute "at"  [union-attr]Do you need some help with these :) ?  | 
    
          These errors are from numpyro/distributions/transforms.py#L77-L86, and I am not able to understand the significance of different conditions and the weak reference. I think you can look into this matter. I will take this one, Thank you for offering help ❤️.  | 
    
| 
           ok! Sounds like a plan! I will try to look at it in the next days :)  | 
    
| 
           Hey @Qazalbash I gave it a try as in d57d9a6 . MyPy is happy now, maybe you can try it ? The only key change was   | 
    
| 
           @juanitorduz Thanks for the changes,  Do I need to remove the plugin from   | 
    
| 
           It's depreciated so it's safe to remove  | 
    
…ng of inverse transforms Co-authored-by: Juan Orduz <[email protected]>
Co-authored-by: Juan Orduz <[email protected]>
Co-authored-by: Juan Orduz <[email protected]>
| 
           ok! I think the tests are failing because a new NNX release and changes in  The other tests   | 
    
| 
           Here is a patch for the first errors #2067  | 
    
| 
           Here's another patch #2069 😸  | 
    
…lasses and add PyTree type alias
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.
Hi @Qazalbash, I think we can get around issues by using NumLike just at some specific places. It's fine to use StrictArray at those arrays with dim >= 1. NonScalarArray is a good name for it I guess.
| 
           @Qazalbash do you need any support here to bring this one to the finish line :) ?  | 
    
          
 @juanitorduz thanks, but not quite right now. Hopefully, I will sit down tonight and tomorrow to complete it.  | 
    
| 
           @juanitorduz I thought it would be easy to fix, but to my surprise, these changes are generating more errors than before. Would you like to take over this issue?  | 
    
          
 hey, sure! What about if you incrementally push the easiest suggestions (that still work) until you face a problem and then we take it from there? 🙏  | 
    
| 
           @juanitorduz I think I have fixed all! See 1e2e670  | 
    
| 
           Amazing @Qazalbash ! Thank you!  | 
    
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.
The changes look great! I just have minor comments. Thank you so much!
| 
           hey @Qazalbash this is finally almost there. Do you need a hand with the last changes?  | 
    
| 
           Hi @juanitorduz, I have explained, the changes @fehiepsi is asking, are violating the Liskov substitution principle. I am waiting for his response. As per the mypy site, 
 
 IMO, one solution could be to set all the contested types to   | 
    
| 
           Thank you for the info (I somehow missed it) 🙇  | 
    
| 
           Somehow I missed your comment, could you ping me on it? We need to allow scalar numbers at places that do not require non-scalar arrays. My comments was to address them. Please let me know if I miss something.  | 
    
| 
           For parent classes, we need to use NumLike if possible.  | 
    
| 
           If there is no wip, i can push the changes to your branch (if you prefer)  | 
    
| 
           I have pinged you. I have no solution for this issue, if you have any, please share, I can implement it. You are welcome to update my branch too.  | 
    
| 
           I still cant see that comment. Maybe a github bug. Let me look into the remaining issues then.  | 
    
| 
           Please take a look at the reply of the comment.  | 
    
| 
           Thanks @Qazalbash! Though I still can't see that reply (it is invisible to me), I understand your point now. I just pushed a commit that using Generic type for Transform. That way we can declare array constraints in the subclass. Let me know if you have any opinion about the changes.  | 
    
| 
           Thanks @fehiepsi, for looking into it. I see you also have put types in   | 
    
| 
           I think it's fine. I just updated types of arguments in constraints that need to be NumLike for some transforms. It does not resolve typing issues of constraints I believe.  | 
    
| 
           Where are these failing tests coming from 🤔 ?  | 
    
| 
           There are a couple of issues: GaussianCopulaBeta is not compatible with jax 0.7, some numerical issues, and many fails due to my change in eq implementation, which I just reverted.  | 
    
This PR contains the resolution of mypy errors passed by #2032, in
numpyro.distributions.transformsmodule.There are two cases in particular which I am unable to resolve. You can see them by running the mypy.
log_abs_det_jacobianof many transforms have unused parameters. I have typed them as union ofUnusedParamand some appropriate numpy/jax type.Many cases were unresolvable, like,
__eq__method expectsboolas return type, but&operation between arrays return array of type bool, which conflicts with the return type, therefore I have added the tag to ignore them. You will find similar tags in the file.