{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Timelike geodesic in Kerr spacetime\n", "## Computation with `kerrgeodesic_gw`\n", "\n", "This Jupyter notebook requires [SageMath](http://www.sagemath.org/) (version $\\geq$ 8.2), with the package [kerrgeodesic_gw](https://github.com/BlackHolePerturbationToolkit/kerrgeodesic_gw). To install it, simply run `sage -pip install kerrgeodesic_gw` " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'SageMath version 9.4, Release Date: 2021-08-22'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "version()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we set up the notebook to use LaTeX-formatted display:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%display latex" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and we ask for CPU demanding computations to be performed in parallel on 8 processes:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "Parallelism().set(nproc=8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Kerr black bole is entirely defined by two parameters $(m, a)$, where $m$ is the black hole mass and $a$ is the black hole angular momentum divided by $m$.\n", "In this notebook, we shall set $m=1$ and we denote the angular momentum parameter $a$ by the symbolic variable `a`, using `a0` for a specific numerical value:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "a = var('a')\n", "a0 = 0.998" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The spacetime object is created as an instance of the class `KerrBH`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kerr spacetime M\n" ] } ], "source": [ "from kerrgeodesic_gw import KerrBH\n", "M = KerrBH(a)\n", "print(M)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The object `M` is endowed with many methods, which can be discovered via the TAB key:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# M." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of them returns the Boyer-Lindquist coordinate $r$ of the event horizon:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\sqrt{-a^{2} + 1} + 1\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\sqrt{-a^{2} + 1} + 1$$" ], "text/plain": [ "sqrt(-a^2 + 1) + 1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rH = M.event_horizon_radius()\n", "rH" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}1.06321392251712\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}1.06321392251712$$" ], "text/plain": [ "1.06321392251712" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rH0 = rH.subs({a: a0})\n", "rH0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another one returns the chart $X$ of Boyer-Lindquist coordinates and allows the user to instanciate the Python variables `(t, r, th, ph)` to the coordinates $(t,r,\\theta,\\phi)$:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(M,(t, r, {\\theta}, {\\phi})\\right)\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(M,(t, r, {\\theta}, {\\phi})\\right)$$" ], "text/plain": [ "Chart (M, (t, r, th, ph))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X. = M.boyer_lindquist_coordinates()\n", "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The metric tensor is naturally returned by the method `metric()`:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}g = \\left( -\\frac{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2} - 2 \\, r}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} t\\otimes \\mathrm{d} t + \\left( -\\frac{2 \\, a r \\sin\\left({\\theta}\\right)^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} t\\otimes \\mathrm{d} {\\phi} + \\left( \\frac{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}}{a^{2} + r^{2} - 2 \\, r} \\right) \\mathrm{d} r\\otimes \\mathrm{d} r + \\left( a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2} \\right) \\mathrm{d} {\\theta}\\otimes \\mathrm{d} {\\theta} + \\left( -\\frac{2 \\, a r \\sin\\left({\\theta}\\right)^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} {\\phi}\\otimes \\mathrm{d} t + \\left( \\frac{2 \\, a^{2} r \\sin\\left({\\theta}\\right)^{4} + {\\left(a^{2} r^{2} + r^{4} + {\\left(a^{4} + a^{2} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} {\\phi}\\otimes \\mathrm{d} {\\phi}\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}g = \\left( -\\frac{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2} - 2 \\, r}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} t\\otimes \\mathrm{d} t + \\left( -\\frac{2 \\, a r \\sin\\left({\\theta}\\right)^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} t\\otimes \\mathrm{d} {\\phi} + \\left( \\frac{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}}{a^{2} + r^{2} - 2 \\, r} \\right) \\mathrm{d} r\\otimes \\mathrm{d} r + \\left( a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2} \\right) \\mathrm{d} {\\theta}\\otimes \\mathrm{d} {\\theta} + \\left( -\\frac{2 \\, a r \\sin\\left({\\theta}\\right)^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} {\\phi}\\otimes \\mathrm{d} t + \\left( \\frac{2 \\, a^{2} r \\sin\\left({\\theta}\\right)^{4} + {\\left(a^{2} r^{2} + r^{4} + {\\left(a^{4} + a^{2} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\right) \\mathrm{d} {\\phi}\\otimes \\mathrm{d} {\\phi}$$" ], "text/plain": [ "g = -(a^2*cos(th)^2 + r^2 - 2*r)/(a^2*cos(th)^2 + r^2) dt⊗dt - 2*a*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dt⊗dph + (a^2*cos(th)^2 + r^2)/(a^2 + r^2 - 2*r) dr⊗dr + (a^2*cos(th)^2 + r^2) dth⊗dth - 2*a*r*sin(th)^2/(a^2*cos(th)^2 + r^2) dph⊗dt + (2*a^2*r*sin(th)^4 + (a^2*r^2 + r^4 + (a^4 + a^2*r^2)*cos(th)^2)*sin(th)^2)/(a^2*cos(th)^2 + r^2) dph⊗dph" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g = M.metric()\n", "g.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Christoffel symbols of $g$ with respect to the default coordinates (here the Boyer-Lindquist coordinates given by the chart `X`) are computed and printed as follows (by default, only the nonzero and nonredundant ones are printed):" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\begin{array}{lcl} \\Gamma_{ \\phantom{\\, t} \\, t \\, r }^{ \\, t \\phantom{\\, t} \\phantom{\\, r} } & = & -\\frac{a^{4} - r^{4} - {\\left(a^{4} + a^{2} r^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, t} \\, t \\, {\\theta} }^{ \\, t \\phantom{\\, t} \\phantom{\\, {\\theta}} } & = & -\\frac{2 \\, a^{2} r \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{4} \\cos\\left({\\theta}\\right)^{4} + 2 \\, a^{2} r^{2} \\cos\\left({\\theta}\\right)^{2} + r^{4}} \\\\ \\Gamma_{ \\phantom{\\, t} \\, r \\, {\\phi} }^{ \\, t \\phantom{\\, r} \\phantom{\\, {\\phi}} } & = & -\\frac{{\\left(a^{3} r^{2} + 3 \\, a r^{4} - {\\left(a^{5} - a^{3} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, t} \\, {\\theta} \\, {\\phi} }^{ \\, t \\phantom{\\, {\\theta}} \\phantom{\\, {\\phi}} } & = & -\\frac{2 \\, {\\left(a^{5} r \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)^{5} - {\\left(a^{5} r + a^{3} r^{3}\\right)} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)^{3}\\right)}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, t \\, t }^{ \\, r \\phantom{\\, t} \\phantom{\\, t} } & = & \\frac{a^{2} r^{2} + r^{4} - 2 \\, r^{3} - {\\left(a^{4} + a^{2} r^{2} - 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{2}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, t \\, {\\phi} }^{ \\, r \\phantom{\\, t} \\phantom{\\, {\\phi}} } & = & -\\frac{{\\left(a^{3} r^{2} + a r^{4} - 2 \\, a r^{3} - {\\left(a^{5} + a^{3} r^{2} - 2 \\, a^{3} r\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, r \\, r }^{ \\, r \\phantom{\\, r} \\phantom{\\, r} } & = & \\frac{{\\left(a^{2} r - a^{2}\\right)} \\sin\\left({\\theta}\\right)^{2} + a^{2} - r^{2}}{a^{2} r^{2} + r^{4} - 2 \\, r^{3} + {\\left(a^{4} + a^{2} r^{2} - 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, r \\, {\\theta} }^{ \\, r \\phantom{\\, r} \\phantom{\\, {\\theta}} } & = & -\\frac{a^{2} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, {\\theta} \\, {\\theta} }^{ \\, r \\phantom{\\, {\\theta}} \\phantom{\\, {\\theta}} } & = & -\\frac{a^{2} r + r^{3} - 2 \\, r^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, {\\phi} \\, {\\phi} }^{ \\, r \\phantom{\\, {\\phi}} \\phantom{\\, {\\phi}} } & = & \\frac{{\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3} - {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{4} - {\\left(a^{2} r^{5} + r^{7} - 2 \\, r^{6} + {\\left(a^{6} r + a^{4} r^{3} - 2 \\, a^{4} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{3} + a^{2} r^{5} - 2 \\, a^{2} r^{4}\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, t \\, t }^{ \\, {\\theta} \\phantom{\\, t} \\phantom{\\, t} } & = & -\\frac{2 \\, a^{2} r \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, t \\, {\\phi} }^{ \\, {\\theta} \\phantom{\\, t} \\phantom{\\, {\\phi}} } & = & \\frac{2 \\, {\\left(a^{3} r + a r^{3}\\right)} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, r \\, r }^{ \\, {\\theta} \\phantom{\\, r} \\phantom{\\, r} } & = & \\frac{a^{2} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{2} r^{2} + r^{4} - 2 \\, r^{3} + {\\left(a^{4} + a^{2} r^{2} - 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, r \\, {\\theta} }^{ \\, {\\theta} \\phantom{\\, r} \\phantom{\\, {\\theta}} } & = & \\frac{r}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, {\\theta} \\, {\\theta} }^{ \\, {\\theta} \\phantom{\\, {\\theta}} \\phantom{\\, {\\theta}} } & = & -\\frac{a^{2} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, {\\phi} \\, {\\phi} }^{ \\, {\\theta} \\phantom{\\, {\\phi}} \\phantom{\\, {\\phi}} } & = & -\\frac{{\\left({\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{5} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{3} + {\\left(a^{2} r^{4} + r^{6} + 2 \\, a^{4} r + 4 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)\\right)} \\sin\\left({\\theta}\\right)}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, t \\, r }^{ \\, {\\phi} \\phantom{\\, t} \\phantom{\\, r} } & = & -\\frac{a^{3} \\cos\\left({\\theta}\\right)^{2} - a r^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, t \\, {\\theta} }^{ \\, {\\phi} \\phantom{\\, t} \\phantom{\\, {\\theta}} } & = & -\\frac{2 \\, a r \\cos\\left({\\theta}\\right)}{{\\left(a^{4} \\cos\\left({\\theta}\\right)^{4} + 2 \\, a^{2} r^{2} \\cos\\left({\\theta}\\right)^{2} + r^{4}\\right)} \\sin\\left({\\theta}\\right)} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, r \\, {\\phi} }^{ \\, {\\phi} \\phantom{\\, r} \\phantom{\\, {\\phi}} } & = & \\frac{r^{5} + {\\left(a^{4} r - a^{4}\\right)} \\cos\\left({\\theta}\\right)^{4} - a^{2} r^{2} - 2 \\, r^{4} + {\\left(2 \\, a^{2} r^{3} + a^{4} - a^{2} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, {\\theta} \\, {\\phi} }^{ \\, {\\phi} \\phantom{\\, {\\theta}} \\phantom{\\, {\\phi}} } & = & \\frac{a^{4} \\cos\\left({\\theta}\\right)^{5} + 2 \\, {\\left(a^{2} r^{2} - a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{3} + {\\left(r^{4} + 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)}{{\\left(a^{4} \\cos\\left({\\theta}\\right)^{4} + 2 \\, a^{2} r^{2} \\cos\\left({\\theta}\\right)^{2} + r^{4}\\right)} \\sin\\left({\\theta}\\right)} \\end{array}\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\begin{array}{lcl} \\Gamma_{ \\phantom{\\, t} \\, t \\, r }^{ \\, t \\phantom{\\, t} \\phantom{\\, r} } & = & -\\frac{a^{4} - r^{4} - {\\left(a^{4} + a^{2} r^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, t} \\, t \\, {\\theta} }^{ \\, t \\phantom{\\, t} \\phantom{\\, {\\theta}} } & = & -\\frac{2 \\, a^{2} r \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{4} \\cos\\left({\\theta}\\right)^{4} + 2 \\, a^{2} r^{2} \\cos\\left({\\theta}\\right)^{2} + r^{4}} \\\\ \\Gamma_{ \\phantom{\\, t} \\, r \\, {\\phi} }^{ \\, t \\phantom{\\, r} \\phantom{\\, {\\phi}} } & = & -\\frac{{\\left(a^{3} r^{2} + 3 \\, a r^{4} - {\\left(a^{5} - a^{3} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, t} \\, {\\theta} \\, {\\phi} }^{ \\, t \\phantom{\\, {\\theta}} \\phantom{\\, {\\phi}} } & = & -\\frac{2 \\, {\\left(a^{5} r \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)^{5} - {\\left(a^{5} r + a^{3} r^{3}\\right)} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)^{3}\\right)}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, t \\, t }^{ \\, r \\phantom{\\, t} \\phantom{\\, t} } & = & \\frac{a^{2} r^{2} + r^{4} - 2 \\, r^{3} - {\\left(a^{4} + a^{2} r^{2} - 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{2}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, t \\, {\\phi} }^{ \\, r \\phantom{\\, t} \\phantom{\\, {\\phi}} } & = & -\\frac{{\\left(a^{3} r^{2} + a r^{4} - 2 \\, a r^{3} - {\\left(a^{5} + a^{3} r^{2} - 2 \\, a^{3} r\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, r \\, r }^{ \\, r \\phantom{\\, r} \\phantom{\\, r} } & = & \\frac{{\\left(a^{2} r - a^{2}\\right)} \\sin\\left({\\theta}\\right)^{2} + a^{2} - r^{2}}{a^{2} r^{2} + r^{4} - 2 \\, r^{3} + {\\left(a^{4} + a^{2} r^{2} - 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, r \\, {\\theta} }^{ \\, r \\phantom{\\, r} \\phantom{\\, {\\theta}} } & = & -\\frac{a^{2} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, {\\theta} \\, {\\theta} }^{ \\, r \\phantom{\\, {\\theta}} \\phantom{\\, {\\theta}} } & = & -\\frac{a^{2} r + r^{3} - 2 \\, r^{2}}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, r} \\, {\\phi} \\, {\\phi} }^{ \\, r \\phantom{\\, {\\phi}} \\phantom{\\, {\\phi}} } & = & \\frac{{\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3} - {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{4} - {\\left(a^{2} r^{5} + r^{7} - 2 \\, r^{6} + {\\left(a^{6} r + a^{4} r^{3} - 2 \\, a^{4} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{3} + a^{2} r^{5} - 2 \\, a^{2} r^{4}\\right)} \\cos\\left({\\theta}\\right)^{2}\\right)} \\sin\\left({\\theta}\\right)^{2}}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, t \\, t }^{ \\, {\\theta} \\phantom{\\, t} \\phantom{\\, t} } & = & -\\frac{2 \\, a^{2} r \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, t \\, {\\phi} }^{ \\, {\\theta} \\phantom{\\, t} \\phantom{\\, {\\phi}} } & = & \\frac{2 \\, {\\left(a^{3} r + a r^{3}\\right)} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, r \\, r }^{ \\, {\\theta} \\phantom{\\, r} \\phantom{\\, r} } & = & \\frac{a^{2} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{2} r^{2} + r^{4} - 2 \\, r^{3} + {\\left(a^{4} + a^{2} r^{2} - 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, r \\, {\\theta} }^{ \\, {\\theta} \\phantom{\\, r} \\phantom{\\, {\\theta}} } & = & \\frac{r}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, {\\theta} \\, {\\theta} }^{ \\, {\\theta} \\phantom{\\, {\\theta}} \\phantom{\\, {\\theta}} } & = & -\\frac{a^{2} \\cos\\left({\\theta}\\right) \\sin\\left({\\theta}\\right)}{a^{2} \\cos\\left({\\theta}\\right)^{2} + r^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\theta}} \\, {\\phi} \\, {\\phi} }^{ \\, {\\theta} \\phantom{\\, {\\phi}} \\phantom{\\, {\\phi}} } & = & -\\frac{{\\left({\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{5} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{3} + {\\left(a^{2} r^{4} + r^{6} + 2 \\, a^{4} r + 4 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)\\right)} \\sin\\left({\\theta}\\right)}{a^{6} \\cos\\left({\\theta}\\right)^{6} + 3 \\, a^{4} r^{2} \\cos\\left({\\theta}\\right)^{4} + 3 \\, a^{2} r^{4} \\cos\\left({\\theta}\\right)^{2} + r^{6}} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, t \\, r }^{ \\, {\\phi} \\phantom{\\, t} \\phantom{\\, r} } & = & -\\frac{a^{3} \\cos\\left({\\theta}\\right)^{2} - a r^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, t \\, {\\theta} }^{ \\, {\\phi} \\phantom{\\, t} \\phantom{\\, {\\theta}} } & = & -\\frac{2 \\, a r \\cos\\left({\\theta}\\right)}{{\\left(a^{4} \\cos\\left({\\theta}\\right)^{4} + 2 \\, a^{2} r^{2} \\cos\\left({\\theta}\\right)^{2} + r^{4}\\right)} \\sin\\left({\\theta}\\right)} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, r \\, {\\phi} }^{ \\, {\\phi} \\phantom{\\, r} \\phantom{\\, {\\phi}} } & = & \\frac{r^{5} + {\\left(a^{4} r - a^{4}\\right)} \\cos\\left({\\theta}\\right)^{4} - a^{2} r^{2} - 2 \\, r^{4} + {\\left(2 \\, a^{2} r^{3} + a^{4} - a^{2} r^{2}\\right)} \\cos\\left({\\theta}\\right)^{2}}{a^{2} r^{4} + r^{6} - 2 \\, r^{5} + {\\left(a^{6} + a^{4} r^{2} - 2 \\, a^{4} r\\right)} \\cos\\left({\\theta}\\right)^{4} + 2 \\, {\\left(a^{4} r^{2} + a^{2} r^{4} - 2 \\, a^{2} r^{3}\\right)} \\cos\\left({\\theta}\\right)^{2}} \\\\ \\Gamma_{ \\phantom{\\, {\\phi}} \\, {\\theta} \\, {\\phi} }^{ \\, {\\phi} \\phantom{\\, {\\theta}} \\phantom{\\, {\\phi}} } & = & \\frac{a^{4} \\cos\\left({\\theta}\\right)^{5} + 2 \\, {\\left(a^{2} r^{2} - a^{2} r\\right)} \\cos\\left({\\theta}\\right)^{3} + {\\left(r^{4} + 2 \\, a^{2} r\\right)} \\cos\\left({\\theta}\\right)}{{\\left(a^{4} \\cos\\left({\\theta}\\right)^{4} + 2 \\, a^{2} r^{2} \\cos\\left({\\theta}\\right)^{2} + r^{4}\\right)} \\sin\\left({\\theta}\\right)} \\end{array}$$" ], "text/plain": [ "Gam^t_t,r = -(a^4 - r^4 - (a^4 + a^2*r^2)*sin(th)^2)/(a^2*r^4 + r^6 - 2*r^5 + (a^6 + a^4*r^2 - 2*a^4*r)*cos(th)^4 + 2*(a^4*r^2 + a^2*r^4 - 2*a^2*r^3)*cos(th)^2) \n", "Gam^t_t,th = -2*a^2*r*cos(th)*sin(th)/(a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4) \n", "Gam^t_r,ph = -(a^3*r^2 + 3*a*r^4 - (a^5 - a^3*r^2)*cos(th)^2)*sin(th)^2/(a^2*r^4 + r^6 - 2*r^5 + (a^6 + a^4*r^2 - 2*a^4*r)*cos(th)^4 + 2*(a^4*r^2 + a^2*r^4 - 2*a^2*r^3)*cos(th)^2) \n", "Gam^t_th,ph = -2*(a^5*r*cos(th)*sin(th)^5 - (a^5*r + a^3*r^3)*cos(th)*sin(th)^3)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_t,t = (a^2*r^2 + r^4 - 2*r^3 - (a^4 + a^2*r^2 - 2*a^2*r)*cos(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_t,ph = -(a^3*r^2 + a*r^4 - 2*a*r^3 - (a^5 + a^3*r^2 - 2*a^3*r)*cos(th)^2)*sin(th)^2/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^r_r,r = ((a^2*r - a^2)*sin(th)^2 + a^2 - r^2)/(a^2*r^2 + r^4 - 2*r^3 + (a^4 + a^2*r^2 - 2*a^2*r)*cos(th)^2) \n", "Gam^r_r,th = -a^2*cos(th)*sin(th)/(a^2*cos(th)^2 + r^2) \n", "Gam^r_th,th = -(a^2*r + r^3 - 2*r^2)/(a^2*cos(th)^2 + r^2) \n", "Gam^r_ph,ph = ((a^4*r^2 + a^2*r^4 - 2*a^2*r^3 - (a^6 + a^4*r^2 - 2*a^4*r)*cos(th)^2)*sin(th)^4 - (a^2*r^5 + r^7 - 2*r^6 + (a^6*r + a^4*r^3 - 2*a^4*r^2)*cos(th)^4 + 2*(a^4*r^3 + a^2*r^5 - 2*a^2*r^4)*cos(th)^2)*sin(th)^2)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_t,t = -2*a^2*r*cos(th)*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_t,ph = 2*(a^3*r + a*r^3)*cos(th)*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^th_r,r = a^2*cos(th)*sin(th)/(a^2*r^2 + r^4 - 2*r^3 + (a^4 + a^2*r^2 - 2*a^2*r)*cos(th)^2) \n", "Gam^th_r,th = r/(a^2*cos(th)^2 + r^2) \n", "Gam^th_th,th = -a^2*cos(th)*sin(th)/(a^2*cos(th)^2 + r^2) \n", "Gam^th_ph,ph = -((a^6 + a^4*r^2 - 2*a^4*r)*cos(th)^5 + 2*(a^4*r^2 + a^2*r^4 - 2*a^2*r^3)*cos(th)^3 + (a^2*r^4 + r^6 + 2*a^4*r + 4*a^2*r^3)*cos(th))*sin(th)/(a^6*cos(th)^6 + 3*a^4*r^2*cos(th)^4 + 3*a^2*r^4*cos(th)^2 + r^6) \n", "Gam^ph_t,r = -(a^3*cos(th)^2 - a*r^2)/(a^2*r^4 + r^6 - 2*r^5 + (a^6 + a^4*r^2 - 2*a^4*r)*cos(th)^4 + 2*(a^4*r^2 + a^2*r^4 - 2*a^2*r^3)*cos(th)^2) \n", "Gam^ph_t,th = -2*a*r*cos(th)/((a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4)*sin(th)) \n", "Gam^ph_r,ph = (r^5 + (a^4*r - a^4)*cos(th)^4 - a^2*r^2 - 2*r^4 + (2*a^2*r^3 + a^4 - a^2*r^2)*cos(th)^2)/(a^2*r^4 + r^6 - 2*r^5 + (a^6 + a^4*r^2 - 2*a^4*r)*cos(th)^4 + 2*(a^4*r^2 + a^2*r^4 - 2*a^2*r^3)*cos(th)^2) \n", "Gam^ph_th,ph = (a^4*cos(th)^5 + 2*(a^2*r^2 - a^2*r)*cos(th)^3 + (r^4 + 2*a^2*r)*cos(th))/((a^4*cos(th)^4 + 2*a^2*r^2*cos(th)^2 + r^4)*sin(th)) " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.christoffel_symbols_display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us choose the point of Boyer-Lindquist coordinates $\\left(0, 6, \\frac{\\pi}{2}, 0\\right)$ as the initial point $p_0$ for the geodesic, as well as some initial velocity timelike vector $v_0$:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}v_0 = 2 \\frac{\\partial}{\\partial t } + 0.0300000000000000 \\frac{\\partial}{\\partial {\\theta} } + 0.100000000000000 \\frac{\\partial}{\\partial {\\phi} }\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}v_0 = 2 \\frac{\\partial}{\\partial t } + 0.0300000000000000 \\frac{\\partial}{\\partial {\\theta} } + 0.100000000000000 \\frac{\\partial}{\\partial {\\phi} }$$" ], "text/plain": [ "v_0 = 2 ∂/∂t + 0.0300000000000000 ∂/∂th + 0.100000000000000 ∂/∂ph" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p0 = M.point((0, 6, pi/2, 0), name='p_0')\n", "v0 = M.tangent_space(p0)((2, 0, 0.03, 0.1), name='v_0')\n", "v0.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check that $v_0$ is a timelike vector:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}0.0133333333333333 \\, a^{2} - 0.133333333333333 \\, a - 2.27426666666667\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}0.0133333333333333 \\, a^{2} - 0.133333333333333 \\, a - 2.27426666666667$$" ], "text/plain": [ "0.0133333333333333*a^2 - 0.133333333333333*a - 2.27426666666667" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.at(p0)(v0, v0)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}-2.39405328000000\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}-2.39405328000000$$" ], "text/plain": [ "-2.39405328000000" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_.subs({a: a0})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The geodesic object is created by the method `integrated_geodesic`, $s$ denoting the affine parameter associated with $v_0$, assumed to range between $0$ and $200$. The numerical resolution of the geodesic equation is performed by the \n", "the method `'ode_int'`, which involves Scipy's function [scipy.integrate.odeint](https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.integrate.odeint.html), taking avantage of the fact that Scipy is fully integrated in Sage:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "s = var('s')\n", "geod = M.integrated_geodesic(g, (s, 0, 200), v0)\n", "sol = geod.solve(step=0.1, method='ode_int', parameters_values={a: a0})\n", "interp = geod.interpolate() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To plot the obtained curve, we introduce a map from the spacetime $M$ to the Euclidean space $\\mathbb{E}^3$:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\\[\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{E}^{3} \\\\ & \\left(t, r, {\\theta}, {\\phi}\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(r \\cos\\left({\\phi}\\right) \\sin\\left({\\theta}\\right), r \\sin\\left({\\phi}\\right) \\sin\\left({\\theta}\\right), r \\cos\\left({\\theta}\\right)\\right) \\end{array}\\]" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\begin{array}{llcl} & M & \\longrightarrow & \\mathbb{E}^{3} \\\\ & \\left(t, r, {\\theta}, {\\phi}\\right) & \\longmapsto & \\left(x, y, z\\right) = \\left(r \\cos\\left({\\phi}\\right) \\sin\\left({\\theta}\\right), r \\sin\\left({\\phi}\\right) \\sin\\left({\\theta}\\right), r \\cos\\left({\\theta}\\right)\\right) \\end{array}$$" ], "text/plain": [ "M → E^3\n", " (t, r, th, ph) ↦ (x, y, z) = (r*cos(ph)*sin(th), r*sin(ph)*sin(th), r*cos(th))" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E3. = EuclideanSpace()\n", "X3 = E3.cartesian_coordinates()\n", "to_E3 = M.diff_map(E3, {(X, X3): [r*sin(th)*cos(ph), \n", " r*sin(th)*sin(ph), r*cos(th)]})\n", "to_E3.display()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we can plot the geodesic in term of the canonical chart $X3=(x,y,z)$ of\n", "$\\mathbb{E}^3$:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "Graphics3d Object" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "graph = geod.plot_integrated(chart=X3, mapping=to_E3, plot_points=2000, \n", " thickness=2, label_axes=False) # the geodesic\n", "graph += p0.plot(chart=X3, mapping=to_E3, size=40) # the starting point\n", "graph += v0.plot(chart=X3, mapping=to_E3, color='green', # the tangent vector\n", " scale=3)\n", "graph += sphere(size=rH0, color='grey') # the event horizon\n", "graph" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.4", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }