# Animations in EinsteinPy¶

## Importing required modules¶

[1]:

import numpy as np

from einsteinpy.geodesic import Timelike
from einsteinpy.plotting import StaticGeodesicPlotter

Matplotlib is building the font cache; this may take a moment.


## Defining various parameters¶

• Initial position & momentum of the test partcle

• Spin of the Kerr Black Hole in metric_params

• Other solver parameters

Note that, we are working in M-Units ($$G = c = M = 1$$).

[2]:

# Constant Radius Orbit
position = [4, np.pi / 3, 0.]
momentum = [0., 0.767851, 2.]
a = 0.99
steps = 400.
delta = 0.5


## Calculating geodesic¶

[3]:

geod = Timelike(
metric="Kerr",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
return_cartesian=True
)


## Animating¶

[4]:

%matplotlib nbagg
sgpl = StaticGeodesicPlotter()
sgpl.animate(geod, interval=1)
sgpl.show()


## Saving animation as .gif¶

[5]:

sgpl.ani.save('animation.gif', writer='imagemagick', fps=60)

MovieWriter stderr:
convert-im6.q16: no images defined animation.gif' @ error/convert.c/ConvertImageCommand/3258.


---------------------------------------------------------------------------
BrokenPipeError                           Traceback (most recent call last)
~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in saving(self, fig, outfile, dpi, *args, **kwargs)
235         try:
--> 236             yield self
237         finally:

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs, progress_callback)
1176                         frame_number += 1
-> 1177                 writer.grab_frame(**savefig_kwargs)
1178

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in grab_frame(self, **savefig_kwargs)
355         # Save the figure data to the sink, using the frame format and dpi.
--> 356         self.fig.savefig(self._proc.stdin, format=self.frame_format,
357                          dpi=self.dpi, **savefig_kwargs)

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/figure.py in savefig(self, fname, transparent, **kwargs)
2961
-> 2962         self.canvas.print_figure(fname, **kwargs)
2963

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
2254                 with cbook._setattr_cm(self.figure, dpi=dpi):
-> 2255                     result = print_method(
2256                         filename,

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/backend_bases.py in wrapper(*args, **kwargs)
1668
-> 1669         return func(*args, **kwargs)
1670

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py in print_raw(self, filename_or_obj, *args)
454         with cbook.open_file_cm(filename_or_obj, "wb") as fh:
--> 455             fh.write(renderer.buffer_rgba())
456

BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

CalledProcessError                        Traceback (most recent call last)
<ipython-input-5-35b43486ec2f> in <module>
----> 1 sgpl.ani.save('animation.gif', writer='imagemagick', fps=60)

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs, progress_callback)
1175                         progress_callback(frame_number, total_frames)
1176                         frame_number += 1
-> 1177                 writer.grab_frame(**savefig_kwargs)
1178
1179     def _step(self, *args):

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/contextlib.py in __exit__(self, type, value, traceback)
129                 value = type()
130             try:
--> 131                 self.gen.throw(type, value, traceback)
132             except StopIteration as exc:
133                 # Suppress StopIteration *unless* it's the same exception that

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in saving(self, fig, outfile, dpi, *args, **kwargs)
236             yield self
237         finally:
--> 238             self.finish()
239
240

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in finish(self)
345             overridden_cleanup()
346         else:
--> 347             self._cleanup()  # Inline _cleanup() once cleanup() is removed.
348
349     def grab_frame(self, **savefig_kwargs):

~/Softwares/miniconda3/envs/einsteinpy3.8/lib/python3.8/site-packages/matplotlib/animation.py in _cleanup(self)
376                 "MovieWriter stderr:\n%s", err)
377         if self._proc.returncode:
--> 378             raise subprocess.CalledProcessError(
379                 self._proc.returncode, self._proc.args, out, err)
380

CalledProcessError: Command '['convert', '-size', '750x750', '-depth', '8', '-delay', '1.6666666666666667', '-loop', '0', 'rgba:-', 'animation.gif']' returned non-zero exit status 1.
`