diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index b61f183b767b..633f69b22d8b 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -1288,6 +1288,7 @@ def tk_window_focus(): default_test_modules = [ 'matplotlib.tests.test_agg', + 'matplotlib.tests.test_animation', 'matplotlib.tests.test_arrow_patches', 'matplotlib.tests.test_artist', 'matplotlib.tests.test_axes', diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py index 9854ca2527f6..6cb593f00614 100644 --- a/lib/matplotlib/animation.py +++ b/lib/matplotlib/animation.py @@ -1000,7 +1000,8 @@ def __init__(self, fig, func, frames=None, init_func=None, fargs=None, self._iter_gen = frames elif iterable(frames): self._iter_gen = lambda: iter(frames) - self.save_count = len(frames) + if hasattr(frames, '__len__'): + self.save_count = len(frames) else: self._iter_gen = lambda: xrange(frames).__iter__() self.save_count = frames diff --git a/lib/matplotlib/tests/test_animation.py b/lib/matplotlib/tests/test_animation.py index 04fb65291b5b..2f5495643c03 100644 --- a/lib/matplotlib/tests/test_animation.py +++ b/lib/matplotlib/tests/test_animation.py @@ -52,6 +52,25 @@ def animate(i): anim.save(F.name, fps=30, writer=writer) +@cleanup +def test_no_length_frames(): + fig, ax = plt.subplots() + line, = ax.plot([], []) + + def init(): + line.set_data([], []) + return line, + + def animate(i): + x = np.linspace(0, 10, 100) + y = np.sin(x + i) + line.set_data(x, y) + return line, + + anim = animation.FuncAnimation(fig, animate, init_func=init, + frames=iter(range(5))) + + if __name__ == "__main__": import nose nose.runmodule(argv=['-s', '--with-doctest'], exit=False)