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.