{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1+1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(\"/home/marc/tmp/ore_algebra-analytic/src\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from ore_algebra import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "Pols.<z> = PolynomialRing(QQ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "z^2 - 1"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(z + 1)*(z-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z.degree()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "DiffOps.<Dz> = OreAlgebra(Pols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "z*Dz + 1"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Dz*z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "dop = (z*Dz-2)*(z*Dz-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "z^2*Dz^2 - 4*z*Dz + 6"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(z^2,), (z^3,)]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dop.polynomial_solutions()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +/- 8.93e-103] + [+/- 1.29e-107]*I"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(Dz - 1).numerical_solution(ini=[1], path=[0, i*pi], eps=1e-100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "z*Dz^2 + Dz"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dop = Dz*z*Dz; dop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dop(log(z))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[+/- 4.28e-17] + [6.2831853071795865 +/- 6.63e-17]*I"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dop.numerical_solution([0, 1], [1, i, -1, -i, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "from ore_algebra.analytic.examples import fcc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9*z^10 + 186*z^9 + 1393*z^8 + 4608*z^7 + 6156*z^6 - 256*z^5 - 7488*z^4 - 4608*z^3)*Dz^4 + (126*z^9 + 2304*z^8 + 15322*z^7 + 46152*z^6 + 61416*z^5 + 15584*z^4 - 39168*z^3 - 27648*z^2)*Dz^3 + (486*z^8 + 7716*z^7 + 44592*z^6 + 119388*z^5 + 151716*z^4 + 66480*z^3 - 31488*z^2 - 32256*z)*Dz^2 + (540*z^7 + 7248*z^6 + 35268*z^5 + 80808*z^4 + 91596*z^3 + 44592*z^2 + 2688*z - 4608)*Dz + 108*z^6 + 1176*z^5 + 4584*z^4 + 8424*z^3 + 7584*z^2 + 3072*z"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fcc.dop4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1/6*log(z)^3 + 1/12*z*log(z)^2 + 1/8*z*log(z) - 1/4*z + 1/144*z^2*log(z)^3 + 5/144*z^2*log(z)^2 + 17/768*z^2*log(z) - 19/2304*z^2 + 1/432*z^3*log(z)^3 + 227/10368*z^3*log(z)^2 + 1531/41472*z^3*log(z) - 3173/124416*z^3 + 47/27648*z^4*log(z)^3 + 2161/165888*z^4*log(z)^2 + 299593/15925248*z^4*log(z) - 231785/31850496*z^4 + 5/4608*z^5*log(z)^3 + 15703/1658880*z^5*log(z)^2 + 4909967/298598400*z^5*log(z) - 71264197/11943936000*z^5 + 4745/5971968*z^6*log(z)^3 + 1936843/286654464*z^6*log(z)^2 + 44274137/3822059520*z^6*log(z) - 410844379/128994508800*z^6,\n",
       " 1/2*log(z)^2 + 1/6*z*log(z) + 1/8*z + 1/48*z^2*log(z)^2 + 5/72*z^2*log(z) + 17/768*z^2 + 1/144*z^3*log(z)^2 + 227/5184*z^3*log(z) + 1531/41472*z^3 + 47/9216*z^4*log(z)^2 + 2161/82944*z^4*log(z) + 299593/15925248*z^4 + 5/1536*z^5*log(z)^2 + 15703/829440*z^5*log(z) + 4909967/298598400*z^5 + 4745/1990656*z^6*log(z)^2 + 1936843/143327232*z^6*log(z) + 44274137/3822059520*z^6,\n",
       " log(z) + 1/6*z + 1/24*z^2*log(z) + 5/72*z^2 + 1/72*z^3*log(z) + 227/5184*z^3 + 47/4608*z^4*log(z) + 2161/82944*z^4 + 5/768*z^5*log(z) + 15703/829440*z^5 + 4745/995328*z^6*log(z) + 1936843/143327232*z^6,\n",
       " 1 + 1/24*z^2 + 1/72*z^3 + 47/4608*z^4 + 5/768*z^5 + 4745/995328*z^6]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fcc.dop4.local_basis_expansions(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "ini = [0, 0, 0, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1.1058437979212048 +/- 4.10e-17] + [+/- 1.38e-29]*I"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fcc.dop4.numerical_solution(ini, [0, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1 - 11/196*(z - 1)^3 + 81257/889056*(z - 1)^4 - 41272547/373403520*(z - 1)^5 + 3405514171/28229306112*(z - 1)^6,\n",
       " (z - 1)*log(z - 1) - (z - 1)^2*log(z - 1) + 8/9*(z - 1)^3*log(z - 1) - 1369/31752*(z - 1)^3 - 85/108*(z - 1)^4*log(z - 1) + 1204963/16003008*(z - 1)^4 + 127/180*(z - 1)^5*log(z - 1) - 3209322269/33606316800*(z - 1)^5 - 173/270*(z - 1)^6*log(z - 1) + 1373084335097/12703187750400*(z - 1)^6,\n",
       " z - 1 - 439/756*(z - 1)^3 + 327325/381024*(z - 1)^4 - 158424103/160030080*(z - 1)^5 + 317483690087/302456851200*(z - 1)^6,\n",
       " (z - 1)^2 - 1111/756*(z - 1)^3 + 627205/381024*(z - 1)^4 - 54266843/32006016*(z - 1)^5 + 511280116967/302456851200*(z - 1)^6]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fcc.dop4.local_basis_expansions(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath 8.1",
   "language": "",
   "name": "sagemath"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14+"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
