Skip to content

Commit 40449b9

Browse files
authored
SONARPY-2153: S6978: Fix False Negative related to resolving torch.nn.Module (#2057)
* SONARPY-2153 update torch typshed * SONARPY-2153 add CustomStubBase to torchvision class
1 parent 4ef5761 commit 40449b9

File tree

51 files changed

+413
-413
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+413
-413
lines changed
Lines changed: 61 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,81 @@
1-
import torch.nn as nn
1+
def import_torch_nn():
2+
import torch.nn as nn
23

3-
class NonCompliantModule(nn.Module):
4-
#^^^^^^^^^^^^^^^^^^> {{Inheritance happens here}}
5-
def __init__(self): #Noncompliant {{Add a call to super().__init__().}}
6-
#^^^^^^^^
7-
...
4+
class NonCompliantModule(nn.Module):
5+
#^^^^^^^^^^^^^^^^^^> {{Inheritance happens here}}
6+
def __init__(self): #Noncompliant {{Add a call to super().__init__().}}
7+
#^^^^^^^^
8+
...
89

910

10-
class NonCompliantModule(OtherModule, nn.Module):
11-
def __init__(self): #Noncompliant
12-
...
11+
class NonCompliantModule(OtherModule, nn.Module):
12+
def __init__(self): #Noncompliant
13+
...
1314

14-
class CompliantModule(NonExistantClass):
15-
def __init__(self, encoder, decoder):
16-
...
15+
class CompliantModule(NonExistantClass):
16+
def __init__(self, encoder, decoder):
17+
...
1718

18-
class CompliantModule(nn.Module):
19-
def __init__(self):
20-
super().__init__()
21-
class CompliantModule(nn.Module):
22-
pass
19+
class CompliantModule(nn.Module):
20+
def __init__(self):
21+
super().__init__()
22+
class CompliantModule(nn.Module):
23+
pass
2324

24-
class CompliantModule(nn.Module):
25-
def __init__(self, cond):
26-
if cond:
25+
class CompliantModule(nn.Module):
26+
def __init__(self, cond):
27+
if cond:
28+
super().__init__()
29+
30+
class CompliantModule(nn.Module):
31+
def __init__(self, super):
2732
super().__init__()
2833

29-
class CompliantModule(nn.Module):
30-
def __init__(self, super):
31-
super().__init__()
34+
class CompliantModule(nn.Module):
35+
def __init__(self):
36+
(lambda x: x)()
37+
(lambda x: x)().test()
38+
self.call_super()
3239

33-
class CompliantModule(nn.Module):
34-
def __init__(self):
35-
(lambda x: x)()
36-
(lambda x: x)().test()
37-
self.call_super()
40+
def call_super(self):
41+
super().__init__()
3842

39-
def call_super(self):
40-
super().__init__()
4143

44+
class CompliantModule(nn.Module):
45+
def __init__(self, fake_super):
46+
fake_super().__init__()
47+
super().not_init()
4248

43-
class CompliantModule(nn.Module):
44-
def __init__(self, fake_super):
45-
fake_super().__init__()
46-
super().not_init()
49+
def call_super(self):
50+
super().__init__()
4751

48-
def call_super(self):
49-
super().__init__()
52+
class CompliantModule2(nn.Module):
53+
def __init__(self): #FN
54+
do_something()
5055

51-
class CompliantModule2(nn.Module):
52-
def __init__(self): #FN
53-
do_something()
56+
class Nested(Other):
57+
def __init__(self):
58+
super().__init__()
5459

55-
class Nested(Other):
60+
class UnrelatedCompliantModule:
5661
def __init__(self):
57-
super().__init__()
62+
...
5863

59-
class UnrelatedCompliantModule:
60-
def __init__(self):
61-
...
64+
def __init__(test):
65+
pass
6266

63-
def __init__(test):
64-
pass
67+
def some_other_func():
68+
pass
69+
70+
class CompliantModule(nn.Module):
71+
if cond:
72+
class some_func: pass
73+
else:
74+
def some_func(): pass
6575

66-
def some_other_func():
67-
pass
76+
def import_torch():
77+
import torch
6878

69-
class CompliantModule(nn.Module):
70-
if cond:
71-
class some_func: pass
72-
else:
73-
def some_func(): pass
79+
class TorchNonCompliantModule(torch.nn.Module):
80+
def __init__(self): #Noncompliant
81+
...

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torch.nn.modules.module.protobuf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

2-
torch.nn.modules.moduleO
3-
_IncompatibleKeys)torch.nn.modules.module._IncompatibleKeys"builtins.object�
4-
_WrappedHook$torch.nn.modules.module._WrappedHook"builtins.object*�
2+
torch.nn.modules.modulej
3+
_IncompatibleKeys)torch.nn.modules.module._IncompatibleKeys"*SonarPythonAnalyzerFakeStub.CustomStubBase�
4+
_WrappedHook$torch.nn.modules.module._WrappedHook"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
55
__init__-torch.nn.modules.module._WrappedHook.__init__"
66
None*V
77
selfL
@@ -26,8 +26,8 @@ $torch.nn.modules.module._WrappedHook"$torch.nn.modules.module._WrappedHook*
2626
with_module0torch.nn.modules.module._WrappedHook.with_module
2727
builtins.bool"builtins.boolr>
2828
module+torch.nn.modules.module._WrappedHook.module
29-
Any��
30-
Moduletorch.nn.modules.module.Module"builtins.object*�
29+
Any҃
30+
Moduletorch.nn.modules.module.Module"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
3131
__init__'torch.nn.modules.module.Module.__init__"
3232
None*J
3333
self@

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torch.nn.modules.protobuf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

2-
torch.nn.modules��
3-
Moduletorch.nn.modules.module.Module"builtins.object*�
2+
torch.nn.modules҃
3+
Moduletorch.nn.modules.module.Module"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
44
__init__'torch.nn.modules.module.Module.__init__"
55
None*J
66
self@

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torch.nn.protobuf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

2-
torch.nn��
3-
Moduletorch.nn.modules.module.Module"builtins.object*�
2+
torch.nn҃
3+
Moduletorch.nn.modules.module.Module"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
44
__init__'torch.nn.modules.module.Module.__init__"
55
None*J
66
self@

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torch.protobuf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
torch*f
3+
__path__torch.__path__J
4+
builtins.list[builtins.str]
5+
builtins.str" builtins.str"builtins.list*�
6+
__annotations__torch.__annotations__W
7+
builtins.dict[builtins.str,Any]
8+
builtins.str" builtins.str
9+
Any"builtins.dict*
10+
nntorch.nn 

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torchvision.models._api.protobuf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

2-
torchvision.models._api�
3-
Weightstorchvision.models._api.Weights"builtins.object*�
2+
torchvision.models._api�
3+
Weightstorchvision.models._api.Weights"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
44
__eq__&torchvision.models._api.Weights.__eq__"
55
builtins.bool"builtins.bool*DB
66
torchvision.models._api.Weights"torchvision.models._api.Weights* 
@@ -87,9 +87,9 @@ get_weight"torchvision.models._api.get_weight"J
8787
CallableType[builtins.function]&
8888
builtins.function"builtins.function*&
8989
name
90-
builtins.str" builtins.strt
91-
get_model!torchvision.models._api.get_model"
92-
Any*&
90+
builtins.str" builtins.str�
91+
get_model!torchvision.models._api.get_model"@
92+
torch.nn.modules.module.Module"torch.nn.modules.module.Module*&
9393
name
9494
builtins.str" builtins.str*
9595
config

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torchvision.models.alexnet.protobuf

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,4 @@ classifier-torchvision.models.alexnet.AlexNet.classifier
4141
builtins.dict[builtins.str,Any]
4242
builtins.str" builtins.str
4343
Any"builtins.dict*
44-
nntorch.nn *2
45-
torch torchvision.models.alexnet.torch
46-
Any
44+
nntorch.nn 

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torchvision.models.convnext.protobuf

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
selfR
77
'torchvision.models.convnext.LayerNorm2d"'torchvision.models.convnext.LayerNorm2d*
88
x
9-
Any�
10-
CNBlock#torchvision.models.convnext.CNBlock"builtins.object*�
9+
Any�
10+
CNBlock#torchvision.models.convnext.CNBlock"torch.nn.modules.module.Module*�
1111
__init__,torchvision.models.convnext.CNBlock.__init__"
1212
None*T
1313
selfJ
@@ -35,8 +35,8 @@ norm_layer
3535
layer_scale/torchvision.models.convnext.CNBlock.layer_scale
3636
AnyrQ
3737
stochastic_depth4torchvision.models.convnext.CNBlock.stochastic_depth
38-
Any�
39-
CNBlockConfig)torchvision.models.convnext.CNBlockConfig"builtins.object*�
38+
Any�
39+
CNBlockConfig)torchvision.models.convnext.CNBlockConfig"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
4040
__init__2torchvision.models.convnext.CNBlockConfig.__init__"
4141
None*`
4242
selfV
@@ -56,8 +56,9 @@ num_layers
5656
AnyrK
5757

5858
num_layers4torchvision.models.convnext.CNBlockConfig.num_layers
59-
Any�
60-
ConvNeXt$torchvision.models.convnext.ConvNeXt"builtins.object*�
59+
Any�
60+
61+
ConvNeXt$torchvision.models.convnext.ConvNeXt"torch.nn.modules.module.Module*�
6162
__init__-torchvision.models.convnext.ConvNeXt.__init__"
6263
None*V
6364
selfL

python-frontend/src/main/resources/org/sonar/python/types/custom_protobuf/torchvision.models.detection._utils.protobuf

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

2-
#torchvision.models.detection._utils�
3-
BalancedPositiveNegativeSamplerCtorchvision.models.detection._utils.BalancedPositiveNegativeSampler"builtins.object*�
2+
#torchvision.models.detection._utils�
3+
BalancedPositiveNegativeSamplerCtorchvision.models.detection._utils.BalancedPositiveNegativeSampler"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
44
__init__Ltorchvision.models.detection._utils.BalancedPositiveNegativeSampler.__init__"
55
None*�
66
self�
@@ -23,8 +23,8 @@ Ctorchvision.models.detection._utils.BalancedPositiveNegativeSampler"Ctorchvisio
2323
batch_size_per_imageXtorchvision.models.detection._utils.BalancedPositiveNegativeSampler.batch_size_per_image
2424
Anyrs
2525
positive_fractionUtorchvision.models.detection._utils.BalancedPositiveNegativeSampler.positive_fraction
26-
Any�
27-
BoxCoder,torchvision.models.detection._utils.BoxCoder"builtins.object*�
26+
Any�
27+
BoxCoder,torchvision.models.detection._utils.BoxCoder"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
2828
__init__5torchvision.models.detection._utils.BoxCoder.__init__"
2929
None*f
3030
self\
@@ -76,8 +76,8 @@ BTuple[builtins.float,builtins.float,builtins.float,builtins.float]
7676
weights4torchvision.models.detection._utils.BoxCoder.weights
7777
AnyrX
7878
bbox_xform_clip<torchvision.models.detection._utils.BoxCoder.bbox_xform_clip
79-
Any�
80-
BoxLinearCoder2torchvision.models.detection._utils.BoxLinearCoder"builtins.object*�
79+
Any�
80+
BoxLinearCoder2torchvision.models.detection._utils.BoxLinearCoder"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
8181
__init__;torchvision.models.detection._utils.BoxLinearCoder.__init__"
8282
None*r
8383
selfh
@@ -101,8 +101,8 @@ BTuple[builtins.float,builtins.float,builtins.float,builtins.float]
101101
boxes
102102
Anyrb
103103
normalize_by_sizeDtorchvision.models.detection._utils.BoxLinearCoder.normalize_by_size
104-
Any�
105-
Matcher+torchvision.models.detection._utils.Matcher"builtins.object*�
104+
Any�
105+
Matcher+torchvision.models.detection._utils.Matcher"*SonarPythonAnalyzerFakeStub.CustomStubBase*�
106106
__init__4torchvision.models.detection._utils.Matcher.__init__"
107107
None*d
108108
selfZ
@@ -162,18 +162,18 @@ SSDMatcher.torchvision.models.detection._utils.SSDMatcher"+torchvision.models.d
162162
proposals
163163
Any*
164164
weights
165-
Any�
165+
Any�
166166
overwrite_eps1torchvision.models.detection._utils.overwrite_eps"
167-
None*
168-
model
169-
Any*)
167+
None*K
168+
model@
169+
torch.nn.modules.module.Module"torch.nn.modules.module.Module*)
170170
eps
171-
builtins.float"builtins.float�
171+
builtins.float"builtins.float�
172172
retrieve_out_channels9torchvision.models.detection._utils.retrieve_out_channels"J
173173
builtins.list[builtins.int]
174-
builtins.int" builtins.int"builtins.list*
175-
model
176-
Any*j
174+
builtins.int" builtins.int"builtins.list*K
175+
model@
176+
torch.nn.modules.module.Module"torch.nn.modules.module.Module*j
177177
size`
178178
Tuple[builtins.int,builtins.int]
179179
builtins.int" builtins.int

0 commit comments

Comments
 (0)