{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c5fe29b4",
   "metadata": {},
   "source": [
    "## The minimal order differential equation for the all equal mass multiloop sunset integrals in general dimensions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a363466",
   "metadata": {},
   "source": [
    "\\begin{equation}\n",
    "  \\Omega^{(n-1)}_\\circleddash( t,\\epsilon)={\\Omega^{(n)}_0\\over\n",
    "    \\textbf{F}_{n-1}(t)}\\left(\\textbf{U}_{n-1}^n\\over \\textbf{F}_{n-1}(t)^{n-1}\\right)^\\epsilon\n",
    "\\end{equation}\n",
    "with\n",
    "\\begin{equation}\n",
    "  \\textbf{ U}_{n-1}= x_1\\cdots x_n\\sum_{i=1}^n {1\\over x_i},\\qquad\n",
    "      \\textbf{   F}_{n-1}(t)= \\textbf{U}_{n-1} \\left(\\sum_{i=1}^n x_i\\right)-t x_1\\cdots x_n\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a240515b",
   "metadata": {},
   "source": [
    "<center><h2>The all equal mass case up to 20 loops</h2></center>\n",
    " The Picard-Fuchs operator at loop L is in PF[L]\n",
    " $$\\mathscr{L}^{(l),\\epsilon} I^{(l)}(t,\\epsilon)=-(l+1)! {\\Gamma(1+\\epsilon)^l\\over \\Gamma(1+l\\epsilon)}$$\n",
    " with \n",
    "$$ \\mathscr{L}^{(l),\\epsilon}=\\sum_{r=0}^l \\mathscr{L}^{(l),r} \\epsilon^r$$\n",
    "where $ \\mathscr{L}^{(l),r}$ is differential operator in $t$ of order $l-r$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a5eed4cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "epsilon=var('epsilon')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6a8857a9",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'ore_algebra'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01more_algebra\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m      2\u001b[0m OA, t, Dt \u001b[38;5;241m=\u001b[39m DifferentialOperators(QQ, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m      3\u001b[0m OAepsilon, t, Dt \u001b[38;5;241m=\u001b[39m DifferentialOperators(QQ[epsilon], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'ore_algebra'"
     ]
    }
   ],
   "source": [
    "from ore_algebra import *\n",
    "OA, t, Dt = DifferentialOperators(QQ, 't')\n",
    "OAepsilon, t, Dt = DifferentialOperators(QQ[epsilon], 't')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1529aabc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading result at loop order  1\n",
      "loading result at loop order  2\n",
      "loading result at loop order  3\n",
      "loading result at loop order  4\n",
      "loading result at loop order  5\n",
      "loading result at loop order  6\n",
      "loading result at loop order  7\n",
      "loading result at loop order  8\n",
      "loading result at loop order  9\n",
      "loading result at loop order  10\n",
      "loading result at loop order  11\n",
      "loading result at loop order  12\n",
      "loading result at loop order  13\n",
      "loading result at loop order  14\n",
      "loading result at loop order  15\n",
      "loading result at loop order  16\n",
      "loading result at loop order  17\n",
      "loading result at loop order  18\n",
      "loading result at loop order  19\n",
      "loading result at loop order  20\n"
     ]
    }
   ],
   "source": [
    "# PFEqualMass[l] where l is the loop order  l=1,..,20\n",
    "PFEqualMass=dict()\n",
    "with open(\"PFSunsetEqualMass-1to20.txt\") as f:\n",
    "    for e in f.read().replace(\"\\n\", \"\").split(\";\"):\n",
    "            if e:\n",
    "                name, expr = e.split(\":=\")\n",
    "                num=int(name.strip(\"PFEqualMass\"))\n",
    "                print(\"loading result at loop order \",num)\n",
    "                PFEqualMass[num] =  SR(expr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d20be3c4-4b4c-49f5-92a5-4c203b3c656d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-(t^2 - 4*t)*Dt - epsilon*t - t + 2"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PFEqualMass[1] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "695720ea-a37f-4857-a8f5-8c39cc7d598e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(t^3 - 10*t^2 + 9*t)*Dt^2 + 2*epsilon^2*t + (3*epsilon*t^2 - 10*epsilon*t + 3*t^2 - 9*epsilon - 20*t + 9)*Dt + 2*epsilon^2 + 3*epsilon*t - 5*epsilon + t - 3"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PFEqualMass[2] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4a15bfb1-ec27-46db-a23e-c821b7b67b16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-(t^4 - 20*t^3 + 64*t^2)*Dt^3 - 6*epsilon^3*t - 6*(epsilon*t^3 - 10*epsilon*t^2 + t^3 - 15*t^2 + 32*t)*Dt^2 - 12*epsilon^3 - 11*epsilon^2*t - (11*epsilon^2*t^2 - 28*epsilon^2*t + 18*epsilon*t^2 - 64*epsilon^2 - 120*epsilon*t + 7*t^2 - 68*t + 64)*Dt + 14*epsilon^2 - 6*epsilon*t + 18*epsilon - t + 4"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PFEqualMass[3] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c049edf6-9beb-46bc-8273-656b4b73b35e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath 10.3",
   "language": "sage",
   "name": "sagemath-10.3"
  },
  "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.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}