Skip to content

Re: auto07p IndexError when uses matplotlib 2.0 instead of matplotlib 1.5 #8881

@st970703

Description

@st970703

Bug report

I am recently working on making auto07p work with matplotlib 2.0.

The source code can be found here:
https://sourceforge.net/projects/auto-07p/files/auto07p/0.9/

When using matplotlib 2.0 (or any version greater than 1.5), IndexError: invalid index to scalar variable. appears. I ran into this error using a given equation and auto file. But if you use matplotlib 2.0 and auto07p to plot most graphs in general, you are very likely to get this error if you zoom into the graph.
I would appreciate if anyone can assist me with the error, without changing the matlibplot code but only the auto code. I have read through the code but did not find anything suspicious. Since only two lines in the error stack trace involve code from auto07p. It can be more likely to be caused by matplotlib internal code.

Bug summary

IndexError: invalid index to scalar variable. in ticker.py.

Code for reproduction
Please download the files from Onedrive:
https://1drv.ms/f/s!ArJqyyCr1FQOhkITst8JdVK_mIFV

Put them in auto folder.
Run auto.
and type:

auto("couple2.auto")

It appears that there are only two lines involved. They are from the file /auto/07p/python/graphics/grapher_mpl.py.

The two methods involved are:

 def redraw(self):
        # recalculate label positions
        self.grapher.plotlabels()

        FigureCanvasTkAgg.draw(self)

And

def draw(self):
    ax = self.grapher.ax
    d = {}
    if ax is self.grapher.ax3d:
        [d["minx"], d["maxx"]] = ax.get_xlim3d()
        [d["miny"], d["maxy"]] = ax.get_ylim3d()
        [d["minz"], d["maxz"]] = ax.get_zlim3d()
        d["azimuth"] = ax.azim
        d["elevation"] = ax.elev
        d["cur_lims"] = Axes.get_xlim(ax), Axes.get_ylim(ax)
    else:
        [d["minx"], d["maxx"]] = ax.get_xlim()
        [d["miny"], d["maxy"]] = ax.get_ylim()
    for k in list(d):
        # don't adjust any unchanged settings
        if k == "cur_lims":
            if map(list, d[k]) == map(list, self.grapher._cur_lims):
                del d[k]
        elif d[k] == self.grapher.cget(k):
            del d[k]
    if d != {}:
        if "cur_lims" in d:
            del d["cur_lims"]
        if d != {}:
            self.grapher._configNoDraw(**d)

        self.redraw()
        return
    FigureCanvasTkAgg.draw(self)
# Paste your code here
#
#

Actual outcome

When using matplotlib 2.0 (or any version greater than 1.5), IndexError: invalid index to scalar variable. appears:

/home/ngb/auto/07p/python/Points.py:1086: VisibleDeprecationWarning: `rank` is deprecated; use the `ndim` attribute or function instead. To find the rank of a matrix see `numpy.linalg.matrix_rank`.
  r = rank(array_temp)
Created plot
<graphics.windowPlotter.WindowPlotter2D object at 0x7f9e42007710>
AUTO> Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
    return self.func(*args)
  File "/usr/lib/python3.5/tkinter/__init__.py", line 608, in callit
    func(*args)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 370, in idle_draw
    self.draw()
  File "/home/ngb/auto/07p/python/graphics/grapher_mpl.py", line 92, in draw
    self.redraw()
  File "/home/ngb/auto/07p/python/graphics/grapher_mpl.py", line 65, in redraw
    FigureCanvasTkAgg.draw(self)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 351, in draw
    FigureCanvasAgg.draw(self)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 464, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1143, in draw
    renderer, self, dsu, self.suppressComposite)
  File "/usr/lib/python3/dist-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 2409, in draw
    mimage._draw_list_compositing_images(renderer, self, dsu)
  File "/usr/lib/python3/dist-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1136, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 969, in _update_ticks
    tick_tups = [t for t in self.iter_ticks()]
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 969, in <listcomp>
    tick_tups = [t for t in self.iter_ticks()]
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 912, in iter_ticks
    majorLocs = self.major.locator()
  File "/usr/lib/python3/dist-packages/matplotlib/ticker.py", line 1794, in __call__
    return self.tick_values(vmin, vmax)
  File "/usr/lib/python3/dist-packages/matplotlib/ticker.py", line 1802, in tick_values
    locs = self._raw_ticks(vmin, vmax)
  File "/usr/lib/python3/dist-packages/matplotlib/ticker.py", line 1761, in _raw_ticks
    istep = np.nonzero(steps >= raw_step)[0][0]
IndexError: invalid index to scalar variable.
# If applicable, paste the console output here
#
#

Expected outcome

This program works with matplotlib 1.5 and earlier.
Auto07p could zoom in without giving errors.

Matplotlib version

  • Operating System: Linux Ubuntu 16.04
  • Matplotlib Version: 2.0.2
  • Python Version: 3.5
  • Jupyter Version (if applicable):
  • Other Libraries:

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions