Reputation: 3084
Has anyone been able to resolve PyTorch specific inspection issues in PyCharm? Previous posts for non-PyTorch related issues suggest upgrading PyCharm, but I'm currently at the latest version. One option is to of course disable certain inspections entirely, but I'd rather avoid that.
Example: torch.LongTensor(x)
gives me "Unexpected argument...", whereas both call signatures (with and without x
) are both supported.
Upvotes: 8
Views: 1668
Reputation: 408
I believe it's because torch.LongTensor
has no __init__
method for pycharm to find.
According to this source that I found thanks to this SO post :
Use __new__ when you need to control the creation of a new instance. Use __init__ when you need to control initialization of a new instance.
__new__ is the first step of instance creation. It's called first, and is responsible for returning a new instance of your class. In contrast, __init__ doesn't return anything; it's only responsible for initializing the instance after it's been created.
In general, you shouldn't need to override __new__ unless you're subclassing an immutable type like str, int, unicode or tuple.
Since Tensor
s are types, it makes sense to define only new
and no init
.
You can experiment this behavior by testing the following classes :
torch.LongTensor(1) # Unexpected arguments
Produces the warning while the following doesn't.
class MyLongTensor(torch.LongTensor):
def __init__(self, *args, **kwargs):
pass
MyLongTensor(1) # No error
To confirm that the absence of __init__
is the culprit try :
class Example(object):
pass
Example(0) # Unexpected arguments
To find out by yourself, use pycharm to Ctrl+click
on LongTensor
then _TensorBase
and look at the defined methods.
Upvotes: 7