pylint icon indicating copy to clipboard operation
pylint copied to clipboard

pyreverse -c option causes stack overflow

Open AnasTaherGit opened this issue 1 year ago • 1 comments

Bug description

I'm using pyreverse on one of my python project to generate the UML diagram of a specific class so i use the c option but it takes too long and memory usage get bigger and bigger and throw :

Fatal Python error: Cannot recover from stack overflow. Current thread 0x000092b0 (most recent call first): File "c:\python37\lib\site-packages\astroid\bases.py", line 134 in getattr File "c:\python37\lib\site-packages\astroid\nodes\node_classes.py", line 1929 in getattr File "c:\python37\lib\site-packages\astroid\decorators.py", line 34 in cached File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in call File "c:\python37\lib\site-packages\astroid\nodes\node_classes.py", line 1181 in _get_assign_nodes File "c:\python37\lib\site-packages\astroid\decorators.py", line 40 in cached File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in call File "c:\python37\lib\site-packages\astroid\nodes_base_nodes.py", line 202 in File "c:\python37\lib\site-packages\astroid\nodes_base_nodes.py", line 204 in _get_assign_nodes File "c:\python37\lib\site-packages\astroid\decorators.py", line 40 in cached File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in call File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 3080 in File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 3082 in _get_assign_nodes File "c:\python37\lib\site-packages\astroid\decorators.py", line 40 in cached File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in call File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 1444 in extra_decorators File "c:\python37\lib\site-packages\astroid\decorators.py", line 86 in get File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 1477 in type File "c:\python37\lib\site-packages\astroid\decorators.py", line 86 in get File "c:\python37\lib\site-packages\astroid\protocols.py", line 359 in _arguments_infer_argname File "c:\python37\lib\site-packages\astroid\inference.py", line 1063 in infer_assign File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 182 in infer File "c:\python37\lib\site-packages\astroid\bases.py", line 165 in _infer_stmts File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 169 in infer File "c:\python37\lib\site-packages\astroid\builder.py", line 227 in delayed_assattr File "c:\python37\lib\site-packages\astroid\builder.py", line 157 in _post_build File "c:\python37\lib\site-packages\astroid\builder.py", line 141 in string_build File "c:\python37\lib\site-packages\astroid\builder.py", line 282 in parse File "c:\python37\lib\site-packages\astroid\builder.py", line 424 in extract_node File "c:\python37\lib\site-packages\astroid\brain\brain_numpy_ndarray.py", line 147 in infer_numpy_ndarray File "c:\python37\lib\site-packages\astroid\inference_tip.py", line 45 in _inference_tip_cached File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 567 in call File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 159 in infer File "c:\python37\lib\site-packages\astroid\inference.py", line 255 in infer_call File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 182 in infer File "c:\python37\lib\site-packages\astroid\bases.py", line 165 in _infer_stmts File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 169 in infer File "c:\python37\lib\site-packages\pylint\pyreverse\utils.py", line 197 in get_annotation File "c:\python37\lib\site-packages\pylint\pyreverse\utils.py", line 219 in infer_node File "c:\python37\lib\site-packages\pylint\pyreverse\inspector.py", line 253 in handle_assignattr_type File "c:\python37\lib\site-packages\pylint\pyreverse\inspector.py", line 184 in visit_classdef File "c:\python37\lib\site-packages\pylint\pyreverse\utils.py", line 162 in visit File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 77 in add_class File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 113 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes

Configuration

No response

Command used

pyreverse -o pdf --class src.FL.SuperFrame ./src

Pylint output

Format png is not supported natively. Pyreverse will try to generate it using Graphviz...
parsing ./src\__init__.py...
parsing C:\Users\cawoo\OneDrive\Altys\LDACS\src\channel.py...
parsing C:\Users\cawoo\OneDrive\Altys\LDACS\src\FL.py...
parsing C:\Users\cawoo\OneDrive\Altys\LDACS\src\PHY_PARAM.py...
parsing C:\Users\cawoo\OneDrive\Altys\LDACS\src\utils.py...
parsing C:\Users\cawoo\OneDrive\Altys\LDACS\src\viterbi.py...
parsing C:\Users\cawoo\OneDrive\Altys\LDACS\src\__init__.py...
Fatal Python error: Cannot recover from stack overflow.

Current thread 0x000092b0 (most recent call first):
  File "c:\python37\lib\site-packages\astroid\bases.py", line 134 in __getattr__
  File "c:\python37\lib\site-packages\astroid\nodes\node_classes.py", line 1929 in __getattr__
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 34 in cached
  File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in __call__
  File "c:\python37\lib\site-packages\astroid\nodes\node_classes.py", line 1181 in _get_assign_nodes
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 40 in cached
  File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in __call__
  File "c:\python37\lib\site-packages\astroid\nodes\_base_nodes.py", line 202 in <genexpr>
  File "c:\python37\lib\site-packages\astroid\nodes\_base_nodes.py", line 204 in _get_assign_nodes
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 40 in cached
  File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in __call__
  File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 3080 in <genexpr>
  File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 3082 in _get_assign_nodes
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 40 in cached
  File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 606 in __call__
  File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 1444 in extra_decorators
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 86 in __get__
  File "c:\python37\lib\site-packages\astroid\nodes\scoped_nodes\scoped_nodes.py", line 1477 in type
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 86 in __get__
  File "c:\python37\lib\site-packages\astroid\protocols.py", line 359 in _arguments_infer_argname
  File "c:\python37\lib\site-packages\astroid\inference.py", line 1063 in infer_assign
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred
  File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 182 in infer
  File "c:\python37\lib\site-packages\astroid\bases.py", line 165 in _infer_stmts
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred
  File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 169 in infer
  File "c:\python37\lib\site-packages\astroid\builder.py", line 227 in delayed_assattr
  File "c:\python37\lib\site-packages\astroid\builder.py", line 157 in _post_build
  File "c:\python37\lib\site-packages\astroid\builder.py", line 141 in string_build
  File "c:\python37\lib\site-packages\astroid\builder.py", line 282 in parse
  File "c:\python37\lib\site-packages\astroid\builder.py", line 424 in extract_node
  File "c:\python37\lib\site-packages\astroid\brain\brain_numpy_ndarray.py", line 147 in infer_numpy_ndarray
  File "c:\python37\lib\site-packages\astroid\inference_tip.py", line 45 in _inference_tip_cached
  File "C:\Users\cawoo\AppData\Roaming\Python\Python37\site-packages\wrapt\wrappers.py", line 567 in __call__
  File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 159 in infer
  File "c:\python37\lib\site-packages\astroid\inference.py", line 255 in infer_call
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred
  File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 182 in infer
  File "c:\python37\lib\site-packages\astroid\bases.py", line 165 in _infer_stmts
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 108 in wrapped
  File "c:\python37\lib\site-packages\astroid\decorators.py", line 139 in raise_if_nothing_inferred
  File "c:\python37\lib\site-packages\astroid\nodes\node_ng.py", line 169 in infer
  File "c:\python37\lib\site-packages\pylint\pyreverse\utils.py", line 197 in get_annotation
  File "c:\python37\lib\site-packages\pylint\pyreverse\utils.py", line 219 in infer_node
  File "c:\python37\lib\site-packages\pylint\pyreverse\inspector.py", line 253 in handle_assignattr_type
  File "c:\python37\lib\site-packages\pylint\pyreverse\inspector.py", line 184 in visit_classdef
  File "c:\python37\lib\site-packages\pylint\pyreverse\utils.py", line 162 in visit
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 77 in add_class
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 113 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes
  File "c:\python37\lib\site-packages\pylint\pyreverse\diadefslib.py", line 119 in extract_classes

Expected behavior

return a pdf file of the UML diagram for the class SuperFrame

Pylint version

pylint 2.14.0

OS / Environment

Windows 11

Additional dependencies

No response

AnasTaherGit avatar Aug 31 '22 11:08 AnasTaherGit

I think I face the same error with pylint 2.15.3 and astroid 2.12.10.: Here is a MRE using xarray library:

import xarray as xr

class A(xr.DataArray):
 ...

If this code is in a standalone file, say mre.py, pylint runs fine (with the command pylint mre.py). However, if it's within a __init__.py file or in a file imported in a __init__.py, it crashes with the recursion error of @AnasTaherGit (with the command pylint my_lib/__init__.py)

bzah avatar Sep 21 '22 13:09 bzah