Bug Report
I have not been able to find any issues discussing a similar situation, so I'm filing this bug. I apologize in advanced if this is just a configuration issue. As best as I can currently tell, this appears to be a bug.
I have an experimental branch on conda-recipe-manager that uses conda's MatchSpec module and the networkx library. I can use --untyped-calls-exclude to prevent type checking on any use of the MatchSpec class, but I cannot do the same for anything in the networkx library. I have tried just excluding networkx in our mypy.ini file and that does not resolve my issue.
This is speculation at this point, but conda is packaged with a py.typed file, even though not every module has type annotations. networkx does not announce or include any typing. I think that might be causing a rule to fire before the exclusion rule takes effect. I say this because everything I've tried causes the following error messages to be emitted, and I do not get these errors when I exclude MatchSpec:
error: Skipping analyzing "networkx": module is installed, but missing library stubs or
py.typed marker [import-untyped]
import networkx as nx
^
error: Skipping analyzing "networkx.drawing.nx_agraph": module is installed, but
missing library stubs or py.typed marker [import-untyped]
from networkx.drawing.nx_agraph import graphviz_layout
I have run into this issue on mypy versions 1.10 and 1.11.
Things I have tried but have not gotten to work:
Only excluding networkx (either by .mypy.ini or through the command line
Setting disallow_any_unimported to False
Using import networkx without aliasing to nx
Specifically excluding networkx.drawing.nx_agraph in addition and without excluding networkx directly
If I do not exclude MatchSpec, I receive this error upon invoking the constructor:
error: Call to untyped function "MatchSpec" in typed context [no-untyped-call]
And then a error: Expression has type "Any" [misc] on any line referencing the instantiated MatchSpec object.
To Reproduce
import networkx as nx
foo0 = nx.DiGraph() # error: Expression has type "Any" [misc]
from conda.models.MatchSpec:
foo1 = MatchSpec("") # Works fine when excluded. If not excluded, generates: error: Call to untyped function "MatchSpec" in typed context [no-untyped-call]
print(foo1.name) # Works fine when excluded. If not exclude, generates: error: Expression has type "Any" [misc]
I would expect that any module used from networkx would skip type-evaluation. In other words, I would expect using --untyped-calls-exclude to ignore all usage from networkx. This appears to be what happens when MatchSpec is used with the --untyped-calls-excluded option.
Actual Behavior
mypy produces many errors when networkx is used in our project because it does not ship with any type annotations.
Bug Report I have not been able to find any issues discussing a similar situation, so I'm filing this bug. I apologize in advanced if this is just a configuration issue. As best as I can currently tell, this appears to be a bug.
I have an experimental branch on conda-recipe-manager that uses
conda
's MatchSpec module and the networkx library. I can use--untyped-calls-exclude
to prevent type checking on any use of theMatchSpec
class, but I cannot do the same for anything in thenetworkx
library. I have tried just excludingnetworkx
in ourmypy.ini
file and that does not resolve my issue.This is speculation at this point, but
conda
is packaged with apy.typed
file, even though not every module has type annotations.networkx
does not announce or include any typing. I think that might be causing a rule to fire before the exclusion rule takes effect. I say this because everything I've tried causes the following error messages to be emitted, and I do not get these errors when I excludeMatchSpec
:I have run into this issue on
mypy
versions 1.10 and 1.11.Things I have tried but have not gotten to work:
networkx
(either by.mypy.ini
or through the command linedisallow_any_unimported
toFalse
import networkx
without aliasing tonx
networkx.drawing.nx_agraph
in addition and without excludingnetworkx
directlyIf I do not exclude
MatchSpec
, I receive this error upon invoking the constructor:And then a
error: Expression has type "Any" [misc]
on any line referencing the instantiatedMatchSpec
object.To Reproduce
Here is our
.mypy.ini
Expected Behavior
I would expect that any module used from
networkx
would skip type-evaluation. In other words, I would expect using--untyped-calls-exclude
to ignore all usage fromnetworkx
. This appears to be what happens whenMatchSpec
is used with the--untyped-calls-excluded
option.Actual Behavior
mypy
produces many errors whennetworkx
is used in our project because it does not ship with any type annotations.Your Environment
mypy --config-file=.mypy.ini --cache-dir=/dev/null conda_recipe_manager/ tests/ scripts/
mypy.ini
(and other config files): (See above.mypy.ini
)