Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Crash in Windows 10 if polar axis lim is lower than lowest data point. #26765

Closed
jrbrodie77 opened this issue Sep 13, 2023 · 2 comments · Fixed by #26767
Closed

[Bug]: Crash in Windows 10 if polar axis lim is lower than lowest data point. #26765

jrbrodie77 opened this issue Sep 13, 2023 · 2 comments · Fixed by #26767

Comments

@jrbrodie77
Copy link

Bug summary

This example causes matplotlib to silently crash on Windows, but not on Mac. The example below is a minimal example. Looks like important detail is that the data extends below the radial axis minimum limit.

I have another bug related to log scale polar axes, these might be related:

#26485

Code for reproduction

import sys
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np



def plot():
    color_step = 3
    fontsize_y = 8

    # Create a polar plot
    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(111, projection="polar")

    ax.set_rscale("log")

    # KEY LINE!!!!!!!!!!!1
    # Crashes in windows if lower limit is higher than lower datapoint.
    ax.set_rlim(101, 20000)

    n_angles = 3
    n_freqs = 10

    _angles = np.linspace(0, 180, n_angles)
    Angles = _angles[:, np.newaxis] * np.ones(n_freqs)


    # KEY LINE
    # Lower r_axis value is 100, which is lower than low axis limit.
    freqs = np.linspace(100, 1000, n_freqs)
    Freqs = np.ones((n_angles, 1)) * freqs[:, np.newaxis].T
    print(freqs)

    Mags = np.random.rand(*Freqs.shape) * 100


    colormesh = ax.pcolormesh(
        # Angle / 57.29,
        Angles / 57.29,
        Freqs,
        Mags,
        shading="gouraud",
#        cmap=colormap,
 #       vmin=color_lo,
  #      vmax=color_hi,
    )

    plt.show()

if __name__ == "__main__":
    plot()

Actual outcome

Plot window briefly shows, then disappears. I tried a couple version of Python and three backends. Crash occurs on plt.show or plt.savefig

Expected outcome

Plot displays. (works on Mac)

Additional information

No response

Operating system

No response

Matplotlib Version

3.7.3

Matplotlib Backend

QtAgg

Python version

3.8

Jupyter version

No response

Installation

pip

@QuLogic
Copy link
Member

QuLogic commented Sep 13, 2023

This appears to be an infinite loop in Agg;

#74772 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827882, y2=715827882) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74773 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827883, y2=-715827883) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74774 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827882, y2=715827882) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74775 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827883, y2=-715827883) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74776 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827882, y2=715827882) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74777 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827883, y2=-715827883) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74778 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827882, y2=715827882) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74779 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827883, y2=-715827883) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74780 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827882, y2=715827882) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74781 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827884, y2=-715827884) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74782 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827880, y2=715827880) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74783 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827888, y2=-715827888) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74784 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827872, y2=715827872) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74785 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827904, y2=-715827904) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74786 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827840, y2=715827840) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74787 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715827968, y2=-715827968) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74788 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827712, y2=715827712) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74789 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715828224, y2=-715828224) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74790 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715827200, y2=715827200) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74791 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715829248, y2=-715829248) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74792 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715825152, y2=715825152) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74793 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715833343, y2=-715833344) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74794 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715816962, y2=715816961) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74795 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715849724, y2=-715849725) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74796 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715784200, y2=715784199) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74797 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-715915247, y2=-715915249) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74798 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715653155, y2=715653151) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74799 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-716177338, y2=-716177345) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74800 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=715128972, y2=715128958) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74801 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-717225703, y2=-717225732) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74802 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=713032242, y2=713032185) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74803 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-721419164, y2=-721419278) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74804 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=704645320, y2=704645092) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74805 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-738193007, y2=-738193464) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74806 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=671097635, y2=671096720) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74807 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-805288377, y2=-805290208) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74808 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=536906895, y2=536903232) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74809 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=-1073669858, y2=-1073677184) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74810 0x00007fffc31dca4a in agg::rasterizer_cells_aa<agg::cell_aa>::line (this=0x5555561f5c50, x1=<optimized out>, y1=<optimized out>, x2=143933, y2=129280) at extern/agg24-svn/include/agg_rasterizer_cells_aa.h:330
#74811 0x00007fffc31e2b61 in agg::rasterizer_sl_clip<agg::ras_conv_dbl>::line_to<agg::rasterizer_cells_aa<agg::cell_aa> > (this=this@entry=0x5555561f5cd0, ras=..., x2=<optimized out>, y2=<optimized out>)
    at extern/agg24-svn/include/agg_rasterizer_sl_clip.h:228
#74812 0x00007fffc31e2f2f in agg::rasterizer_scanline_aa<agg::rasterizer_sl_clip<agg::ras_conv_dbl> >::line_to_d (y=<optimized out>, x=<optimized out>, this=0x5555561f5c50) at extern/agg24-svn/include/agg_rasterizer_scanline_aa.h:372
#74813 agg::rasterizer_scanline_aa<agg::rasterizer_sl_clip<agg::ras_conv_dbl> >::add_vertex (this=0x5555561f5c50, x=<optimized out>, y=<optimized out>, cmd=<optimized out>) at extern/agg24-svn/include/agg_rasterizer_scanline_aa.h:391
#74814 0x00007fffc31f0a2f in agg::rasterizer_scanline_aa<agg::rasterizer_sl_clip<agg::ras_conv_dbl> >::add_path<agg::span_gouraud_rgba<agg::rgba8T<agg::linear> > > (path_id=0, vs=..., this=0x5555561f5c50)
    at extern/agg24-svn/include/agg_rasterizer_scanline_aa.h:169
#74815 RendererAgg::_draw_gouraud_triangle<numpy::array_view<double const, 2>, numpy::array_view<double const, 2> > (this=this@entry=0x5555561f5ac0, points=..., colors=..., trans=..., has_clippath=has_clippath@entry=true) at src/_backend_agg.h:1209
#74816 0x00007fffc31f19e5 in RendererAgg::draw_gouraud_triangles<numpy::array_view<double const, 3>, numpy::array_view<double const, 3> > (trans=..., colors=..., points=..., gc=..., this=0x5555561f5ac0) at src/_backend_agg.h:1255
#74817 PyRendererAgg_draw_gouraud_triangles (self=<optimized out>, args=<optimized out>) at src/_backend_agg_wrapper.cpp:522
#74818 0x00007ffff7bcced8 in cfunction_call (func=0x7fffc30d9ee0, args=<optimized out>, kwargs=<optimized out>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Objects/methodobject.c:553
#74819 0x00007ffff7bb0953 in _PyObject_MakeTpCall (tstate=0x7ffff7f0dbf8 <_PyRuntime+166328>, callable=0x7fffc30d9ee0, args=<optimized out>, nargs=4, keywords=<optimized out>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Objects/call.c:214
#74820 0x00007ffff7bb92a8 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:4774
#74821 0x00007ffff7bb536a in _PyEval_EvalFrame (throwflag=0, frame=0x7ffff7f98500, tstate=0x7ffff7f0dbf8 <_PyRuntime+166328>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Include/internal/pycore_ceval.h:73
#74822 _PyEval_Vector (tstate=0x7ffff7f0dbf8 <_PyRuntime+166328>, func=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>)
    at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:6439
#74823 0x00007ffff7bbd055 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:5381
#74824 0x00007ffff7bb536a in _PyEval_EvalFrame (throwflag=0, frame=0x7ffff7f98280, tstate=0x7ffff7f0dbf8 <_PyRuntime+166328>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Include/internal/pycore_ceval.h:73
#74825 _PyEval_Vector (tstate=0x7ffff7f0dbf8 <_PyRuntime+166328>, func=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>)
    at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:6439
#74826 0x00007ffff7bbd055 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:5381
#74827 0x00007ffff7bb536a in _PyEval_EvalFrame (throwflag=0, frame=0x7ffff7f98020, tstate=0x7ffff7f0dbf8 <_PyRuntime+166328>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Include/internal/pycore_ceval.h:73
#74828 _PyEval_Vector (tstate=tstate@entry=0x7ffff7f0dbf8 <_PyRuntime+166328>, func=func@entry=0x7ffff77160c0, locals=locals@entry=0x7ffff7736c80, args=args@entry=0x0, argcount=argcount@entry=0, kwnames=kwnames@entry=0x0)
    at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:6439
#74829 0x00007ffff7c397ac in PyEval_EvalCode (co=0x7ffff76b7220, globals=<optimized out>, locals=0x7ffff7736c80) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/ceval.c:1154
#74830 0x00007ffff7c57053 in run_eval_code_obj (tstate=tstate@entry=0x7ffff7f0dbf8 <_PyRuntime+166328>, co=co@entry=0x7ffff76b7220, globals=globals@entry=0x7ffff7736c80, locals=locals@entry=0x7ffff7736c80)
    at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/pythonrun.c:1714
#74831 0x00007ffff7c536ea in run_mod (mod=mod@entry=0x55555561fcc0, filename=filename@entry=0x7ffff76722c0, globals=globals@entry=0x7ffff7736c80, locals=locals@entry=0x7ffff7736c80, flags=flags@entry=0x7fffffffd708, arena=arena@entry=0x7ffff765f7b0)
    at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/pythonrun.c:1735
#74832 0x00007ffff7c693f2 in pyrun_file (fp=fp@entry=0x55555557f5e0, filename=filename@entry=0x7ffff76722c0, start=start@entry=257, globals=globals@entry=0x7ffff7736c80, locals=locals@entry=0x7ffff7736c80, closeit=closeit@entry=1, flags=0x7fffffffd708)
    at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/pythonrun.c:1630
#74833 0x00007ffff7c68ba8 in _PyRun_SimpleFileObject (fp=0x55555557f5e0, filename=0x7ffff76722c0, closeit=1, flags=0x7fffffffd708) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/pythonrun.c:440
#74834 0x00007ffff7c68808 in _PyRun_AnyFileObject (fp=0x55555557f5e0, filename=0x7ffff76722c0, closeit=1, flags=0x7fffffffd708) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Python/pythonrun.c:79
#74835 0x00007ffff7c6274c in pymain_run_file_obj (skip_source_first_line=0, filename=0x7ffff76722c0, program_name=0x7ffff7736e70) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Modules/main.c:360
#74836 pymain_run_file (config=0x7ffff7ef3c40 <_PyRuntime+59904>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Modules/main.c:379
#74837 pymain_run_python (exitcode=0x7fffffffd700) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Modules/main.c:601
#74838 Py_RunMain () at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Modules/main.c:680
#74839 0x00007ffff7c2977b in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/python3.11-3.11.4-1.fc38.x86_64/Modules/main.c:734
#74840 0x00007ffff7849b4a in __libc_start_call_main (main=main@entry=0x555555555160 <main>, argc=argc@entry=2, argv=argv@entry=0x7fffffffd968) at ../sysdeps/nptl/libc_start_call_main.h:58
#74841 0x00007ffff7849c0b in __libc_start_main_impl (main=0x555555555160 <main>, argc=2, argv=0x7fffffffd968, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd958) at ../csu/libc-start.c:360
#74842 0x0000555555555095 in _start ()

@QuLogic
Copy link
Member

QuLogic commented Sep 13, 2023

It looks like some NaN are getting through to Agg, which is producing some bad behaviour:

(gdb) fr 74815
#74815 RendererAgg::_draw_gouraud_triangle<numpy::array_view<double const, 2>, numpy::array_view<double const, 2> > (this=this@entry=0x5555561f5ac0, points=..., colors=..., trans=..., has_clippath=has_clippath@entry=true) at src/_backend_agg.h:1209
1209        theRasterizer.add_path(span_gen);
(gdb) p tpoints
$4 = {{nan(0x8000000000000), nan(0x8000000000000)}, {562.23761945071726, 505}, {nan(0x8000000000000), nan(0x8000000000000)}}

I think in most cases, we ignore segments of paths that have a NaN, so we should be doing the same for such triangles.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants