Skip to content

Instantly share code, notes, and snippets.

@defeo
Last active September 30, 2018 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save defeo/4adb727f7608dfd2c75eb7699d670fb7 to your computer and use it in GitHub Desktop.
Save defeo/4adb727f7608dfd2c75eb7699d670fb7 to your computer and use it in GitHub Desktop.
MA2-ace TD 1
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction à Jupyter"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Je suis **gras** ou *italique*\n",
"\n",
"Je peux taper des maths: $\\int_0^\\pi \\cos(x) dx$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- A\n",
"- B\n",
"- C"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction à Sage\n",
"\n",
"Le langage Sage est une variante de Python"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"ename": "IndentationError",
"evalue": "unindent does not match any outer indentation level (<ipython-input-1-b0b9ee5f3daa>, line 3)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-1-b0b9ee5f3daa>\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m Integer(1)+Integer(1) # Mauvaise indentation ici\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unindent does not match any outer indentation level\n"
]
}
],
"source": [
"if 3 > 2:\n",
" print(\"Hello world!\")\n",
" 1+1 # Mauvaise indentation ici\n",
"else:\n",
" print(\"Boooo\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sage permet de manipuler des entiers, des chaînes de caractères, etc., mais aussi des objets mathématiques complexes."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"a = 1"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"a = graphs.PetersenGraph()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"Petersen graph: Graph on 10 vertices"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Perkel Graph: Graph on 57 vertices (use the .plot() method to plot)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"graphs.PerkelGraph()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quelques structures algébriques prédéfinies en Sage"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Rational Field"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"QQ"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Real Field with 53 bits of precision"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RR"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Real Field with 100 bits of precision"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"MonRR = RealField(prec=100)\n",
"MonRR"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sage préfère représenter les objets de façon exacte, si possible. Comparer `3/5` en Sage et en Python"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3/5"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3/5"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Integer Ring"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ZZ"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"a = 3"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<class 'sage.rings.integer.Integer'>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(a)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<class 'sage.rings.rational.Rational'>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(3/5)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"a = 3"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"b = 5"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(a/b).numerator()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"c = a/b"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.numerator().abs()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Accéder à l'aide"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on built-in function ceil:\n",
"\n",
"ceil(...) method of sage.rings.rational.Rational instance\n",
" Rational.ceil(self)\n",
" File: sage/rings/rational.pyx (starting at line 3321)\n",
" \n",
" Return the ceiling of this rational number.\n",
" \n",
" OUTPUT: Integer\n",
" \n",
" If this rational number is an integer, this returns this number,\n",
" otherwise it returns the floor of this number +1.\n",
" \n",
" EXAMPLES::\n",
" \n",
" sage: n = 5/3; n.ceil()\n",
" 2\n",
" sage: n = -17/19; n.ceil()\n",
" 0\n",
" sage: n = -7/2; n.ceil()\n",
" -3\n",
" sage: n = 7/2; n.ceil()\n",
" 4\n",
" sage: n = 10/2; n.ceil()\n",
" 5\n",
"\n"
]
}
],
"source": [
"help(c.ceil)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.ceil()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Parents et éléments"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Integer Ring"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ZZ"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<class 'sage.rings.integer_ring.IntegerRing_class'>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(ZZ)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3 in ZZ"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3/5 in ZZ"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"a = 3"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Integer Ring"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.parent()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ZZ.an_element()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, -1, 2, -2, 3, -3, 4, -4, 5, -5, 6, -6, 7, -7, 8, -8, 9, -9, 10, -10, 11, -11, 12, -12, 13, -13, 14, -14, 15, -15, 16, -16, 17, -17, 18, -18, 19, -19, 20, -20, 21, -21, 22, -22, 23, -23, 24, -24, 25, -25, 26, -26, 27, -27, 28, -28, 29, -29, 30, -30, 31, -31, 32, -32, 33, -33, 34, -34, 35, -35, 36, -36, 37, -37, 38, -38, 39, -39, 40, -40, 41, -41, 42, -42, 43, -43, 44, -44, 45, -45, 46, -46, 47, -47, 48, -48, 49, -49, 50]\n"
]
}
],
"source": [
"print(list(ZZ.some_elements()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Opérations entre parents incompatibles"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"a = GF(11)(2)\n",
"b = GF(13)(3)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2, 3)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a, b"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand parent(s) for +: 'Finite Field of size 11' and 'Finite Field of size 13'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-29-bd58363a63fc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.__add__ (build/cythonized/sage/structure/element.c:10980)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1249\u001b[0m \u001b[0;31m# Left and right are Sage elements => use coercion model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1250\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mBOTH_ARE_ELEMENT\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1251\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcoercion_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbin_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1252\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1253\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce.pyx\u001b[0m in \u001b[0;36msage.structure.coerce.CoercionModel_cache_maps.bin_op (build/cythonized/sage/structure/coerce.c:10879)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1225\u001b[0m \u001b[0;31m# We should really include the underlying error.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1226\u001b[0m \u001b[0;31m# This causes so much headache.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1227\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mbin_op_exception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1228\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1229\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mcanonical_coercion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: unsupported operand parent(s) for +: 'Finite Field of size 11' and 'Finite Field of size 13'"
]
}
],
"source": [
"a + b"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Finite Field of size 11"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.parent()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Finite Field of size 13"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.parent()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Finite Field of size 11"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"k = GF(11)\n",
"k"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Conversions"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"a = 3"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"b = 2/5"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Integer Ring"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.parent()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Rational Field"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.parent()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"17/5"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c = a + b\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Rational Field"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.parent()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.30000000000000"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = (3/4) + 0.55\n",
"d"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Real Field with 53 bits of precision"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.parent()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"a = GF(11)(2)\n",
"b = GF(13)(4)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand parent(s) for +: 'Finite Field of size 11' and 'Finite Field of size 13'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-42-ca730b97bf8a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.__add__ (build/cythonized/sage/structure/element.c:10980)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1249\u001b[0m \u001b[0;31m# Left and right are Sage elements => use coercion model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1250\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mBOTH_ARE_ELEMENT\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1251\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcoercion_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbin_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1252\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1253\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce.pyx\u001b[0m in \u001b[0;36msage.structure.coerce.CoercionModel_cache_maps.bin_op (build/cythonized/sage/structure/coerce.c:10879)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1225\u001b[0m \u001b[0;31m# We should really include the underlying error.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1226\u001b[0m \u001b[0;31m# This causes so much headache.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1227\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mbin_op_exception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1228\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1229\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mcanonical_coercion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: unsupported operand parent(s) for +: 'Finite Field of size 11' and 'Finite Field of size 13'"
]
}
],
"source": [
"a+b"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c = ZZ(a)\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Integer Ring"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.parent()"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ZZ(a) + ZZ(b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Polynômes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La variable prédéfinie `x` du *Symbolic ring*"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'y' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-47-9063a9f0e032>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0my\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'y' is not defined"
]
}
],
"source": [
"y"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Symbolic Ring"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"parent(x)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^2 + 3*x + 4"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = x^2 + 3*x + 4\n",
"p"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"59049"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3^10"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"59049"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3**10"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^2 + 3*x + 4"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Affichage LaTeX"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"%display latex"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}x^{2} + 3 \\, x + 4</script></html>"
],
"text/plain": [
"x^2 + 3*x + 4"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [],
"source": [
"%display plain"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^2 + 3*x + 4"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x^2 + 3*x + 4)^2"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = p^2\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^4 + 6*x^3 + 17*x^2 + 24*x + 16"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Anneaux de polynômes"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"A.<x> = QQ[]"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Rational Field"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"parent(x) is A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Syntaxe longue"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"B = QQ['y']\n",
"y = B.gen()"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in y over Rational Field"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"y"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"C.<z> = PolynomialRing(QQ)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in z over Rational Field"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z in C"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A == B"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand parent(s) for +: 'Univariate Polynomial Ring in x over Rational Field' and 'Univariate Polynomial Ring in z over Rational Field'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-73-2d5f8479e2db>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mz\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/element.pyx\u001b[0m in \u001b[0;36msage.structure.element.Element.__add__ (build/cythonized/sage/structure/element.c:10980)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1249\u001b[0m \u001b[0;31m# Left and right are Sage elements => use coercion model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1250\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mBOTH_ARE_ELEMENT\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1251\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mcoercion_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbin_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1252\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1253\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mlong\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce.pyx\u001b[0m in \u001b[0;36msage.structure.coerce.CoercionModel_cache_maps.bin_op (build/cythonized/sage/structure/coerce.c:10879)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1225\u001b[0m \u001b[0;31m# We should really include the underlying error.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1226\u001b[0m \u001b[0;31m# This causes so much headache.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1227\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mbin_op_exception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1228\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1229\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mcanonical_coercion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: unsupported operand parent(s) for +: 'Univariate Polynomial Ring in x over Rational Field' and 'Univariate Polynomial Ring in z over Rational Field'"
]
}
],
"source": [
"x + z"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [],
"source": [
"A.<x,y,z> = QQ[]"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Multivariate Polynomial Ring in x, y, z over Rational Field"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x + y"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x + y"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"p = x^2 + 3*x + 5"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^2 + 3*x + 5"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^4 + 6*x^3 + 19*x^2 + 30*x + 25"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p^2"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"101 * 103"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"factor(10403)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x^2 + 3*x + 5)^2"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"factor(p^2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exo 1.1"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"A.<x> = QQ[]"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x^6 + 2*x^5 - 2*x^4 + 2*x^2 - 2*x - 1, x^5 + x^4 - 2*x^3 + x^2 + x - 2)"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1 = x^6 + 2*x^5 - 2*x^4 + 2*x^2 - 2*x - 1\n",
"P2 = x^5 + x^4 - 2*x^3 + x^2 + x - 2\n",
"P1, P2"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^11 + 3*x^10 - 2*x^9 - 5*x^8 + 9*x^7 - 2*x^6 - 13*x^5 + 9*x^4 + 2*x^3 - 7*x^2 + 3*x + 2"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P = P1*P2\n",
"P"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.degree()"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.leading_coefficient()"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[2, 3, -7, 2, 9, -13, -2, 9, -5, -2, 3, 1]"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.list()"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x + 1"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1 // P2"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-x^4 + x^3 - x + 1"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1 % P2"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x + 1, -x^4 + x^3 - x + 1)"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1.quo_rem(P2)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^4 - x^3 + x - 1"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gcd(P1, P2)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^4 - x^3 + x - 1"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1.gcd(P2)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x + 2) * (x - 1)^2 * (x + 1)^2 * (x^2 + 3*x + 1) * (x^2 - x + 1)^2"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.factor()"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3564"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exo 1.2"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"A.<x> = ZZ[]"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^11 + x^10 + x^9 + 2*x^8 + 2*x^6 + 2*x^4 + x^3 + x^2 + x"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P = x^11 + x^10 + x^9 + 2*x^8 + 2*x^6 + 2*x^4 + x^3 + x^2 + x\n",
"P"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x * (x^2 + 1) * (x^2 + x + 1) * (x^6 - x^4 + 2*x^3 - x^2 + 1)"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.factor()"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Order in Number Field in I with defining polynomial x^2 + 1"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B.<x> = ZZ[i][]\n",
"B"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x^11 + x^10 + x^9 + 2*x^8 + 2*x^6 + 2*x^4 + x^3 + x^2 + x"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1 = B(P)\n",
"P1"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Order in Number Field in I with defining polynomial x^2 + 1"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1.parent()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sage ne sait pas factorizer des polynômes à coefficients dans $ℤ[i]$. C'est dommage."
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"ename": "NotImplementedError",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_element.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_element.Polynomial.factor (build/cythonized/sage/rings/polynomial/polynomial_element.c:40717)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4308\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4309\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_finite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4310\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcharacteristic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m<<\u001b[0m\u001b[0;36m29\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/ring.pyx\u001b[0m in \u001b[0;36msage.rings.ring.Ring.is_finite (build/cythonized/sage/rings/ring.c:9002)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 915\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 916\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mRing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_finite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 917\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAttributeError\u001b[0m: 'super' object has no attribute 'is_finite'",
"\nDuring handling of the above exception, another exception occurred:\n",
"\u001b[0;31mNotImplementedError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-101-f8a86c9bd1b7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mP1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_element.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_element.Polynomial.factor (build/cythonized/sage/rings/polynomial/polynomial_element.c:41468)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4329\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mF\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4330\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4331\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4332\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4333\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_factor_pari_helper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mG\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNotImplementedError\u001b[0m: "
]
}
],
"source": [
"P1.factor()"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Number Field in I with defining polynomial x^2 + 1"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"QQ[i]"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [],
"source": [
"P2 = P.change_ring(QQ[i])"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Number Field in I with defining polynomial x^2 + 1"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P2.parent()"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(x - I) * x * (x + I) * (x^2 + x + 1) * (x^6 - x^4 + 2*x^3 - x^2 + 1)"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P2.factor()"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"x * (x + 1)^8 * (x^2 + x + 1)"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.change_ring(GF(2)).factor()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ceci semble être un bug (temporaire) de la version déployée sur ce serveur"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "Cannot convert non-integral float to integer",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-107-a6308930077c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mP\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchange_ring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mGF\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInteger\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_element.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_element.Polynomial.change_ring (build/cythonized/sage/rings/polynomial/polynomial_element.c:33595)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3243\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mR\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3244\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3245\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchange_ring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mR\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3246\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3247\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_mpoly_dict_recursive\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvariables\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbase_ring\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36mchange_ring\u001b[0;34m(self, R)\u001b[0m\n\u001b[1;32m 998\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial_ring_constructor\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPolynomialRing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 999\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1000\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mPolynomialRing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mR\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariable_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_sparse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1001\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1002\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mchange_var\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py\u001b[0m in \u001b[0;36mPolynomialRing\u001b[0;34m(base_ring, *args, **kwds)\u001b[0m\n\u001b[1;32m 648\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_multi_variate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase_ring\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 649\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 650\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_single_variate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase_ring\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 651\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 652\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py\u001b[0m in \u001b[0;36m_single_variate\u001b[0;34m(base_ring, name, sparse, implementation, order)\u001b[0m\n\u001b[1;32m 744\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mimplementation\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 745\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"implementation\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimplementation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 746\u001b[0;31m \u001b[0mR\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconstructor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase_ring\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 747\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 748\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mimpl\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mimplementation_names\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, base_ring, name, element_class, implementation)\u001b[0m\n\u001b[1;32m 2226\u001b[0m \u001b[0melement_class\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPolynomial_ZZ_pEX\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2227\u001b[0m PolynomialRing_field.__init__(self, base_ring, sparse=False, name=name,\n\u001b[0;32m-> 2228\u001b[0;31m element_class=element_class)\n\u001b[0m\u001b[1;32m 2229\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2230\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, base_ring, name, sparse, element_class, category)\u001b[0m\n\u001b[1;32m 1833\u001b[0m \u001b[0melement_class\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpolynomial_element_generic\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mPolynomial_generic_dense_field\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1834\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1835\u001b[0;31m \u001b[0mPolynomialRing_integral_domain\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbase_ring\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msparse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msparse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0melement_class\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0melement_class\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcategory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcategory\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1836\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1837\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_ideal_class_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, base_ring, name, sparse, implementation, element_class, category)\u001b[0m\n\u001b[1;32m 1744\u001b[0m \u001b[0melement_class\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPolynomial_integer_dense_flint\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1745\u001b[0m PolynomialRing_commutative.__init__(self, base_ring, name=name,\n\u001b[0;32m-> 1746\u001b[0;31m sparse=sparse, element_class=element_class, category=category)\n\u001b[0m\u001b[1;32m 1747\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_has_singular\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcan_convert_to_singular\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1748\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, base_ring, name, sparse, element_class, category)\u001b[0m\n\u001b[1;32m 1620\u001b[0m \u001b[0mcategory\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpolynomial_default_category\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase_ring\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcategory\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1621\u001b[0m PolynomialRing_general.__init__(self, base_ring, name=name,\n\u001b[0;32m-> 1622\u001b[0;31m sparse=sparse, element_class=element_class, category=category)\n\u001b[0m\u001b[1;32m 1623\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1624\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mquotient_by_principal_ideal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, base_ring, name, sparse, element_class, category)\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[0;31m# since we want to use PolynomialBaseringInjection.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 292\u001b[0m \u001b[0msage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0malgebras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0malgebra\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAlgebra\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbase_ring\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnormalize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcategory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcategory\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 293\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__generator\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melement_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 294\u001b[0m self._populate_coercion_lists_(\n\u001b[1;32m 295\u001b[0m \u001b[0;31m#coerce_list = [base_inject],\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_zz_pex.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_zz_pex.Polynomial_ZZ_pEX.__init__ (build/cythonized/sage/rings/polynomial/polynomial_zz_pex.cpp:15512)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;31m# not do K.coerce(e) but K(e).\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0me\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m \u001b[0md\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_modulus\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mZZ_pE\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0mZZ_pEX_SetCoeff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/finite_rings/element_givaro.pyx\u001b[0m in \u001b[0;36msage.rings.finite_rings.element_givaro.FiniteField_givaroElement.polynomial (build/cythonized/sage/rings/finite_rings/element_givaro.cpp:15428)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1527\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mPolynomialRing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprime_subfield\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1528\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1529\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpolynomial_ring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1530\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1531\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_magma_init_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmagma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/parent.pyx\u001b[0m in \u001b[0;36msage.structure.parent.Parent.__call__ (build/cythonized/sage/structure/parent.c:9727)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 918\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmor\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 919\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mno_extra_args\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 920\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 921\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 922\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4554)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 145\u001b[0;31m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mElement\u001b[0m \u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4422)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mParent\u001b[0m \u001b[0mC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_codomain\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 140\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 141\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mprint_warnings\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_ring.py\u001b[0m in \u001b[0;36m_element_constructor_\u001b[0;34m(self, x, check, is_gen, construct, **kwds)\u001b[0m\n\u001b[1;32m 405\u001b[0m \u001b[0mC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melement_class\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 406\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 407\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcheck\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconstruct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 408\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 409\u001b[0m return C(self, list(x), check=check, is_gen=False,\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_gf2x.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_gf2x.Polynomial_GF2X.__init__ (build/cythonized/sage/rings/polynomial/polynomial_gf2x.cpp:13861)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m \u001b[0mPolynomial_template\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mget_unsafe\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mPy_ssize_t\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_template.pxi\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_gf2x.Polynomial_template.__init__ (build/cythonized/sage/rings/polynomial/polynomial_gf2x.cpp:6474)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;31m# r += parent(e)*power\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0mcelement_pow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmonomial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdeg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNULL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mPolynomial_template\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cparent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m \u001b[0mcelement_mul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmonomial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m&\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mPolynomial_template\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmonomial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mPolynomial_template\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cparent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0mcelement_add\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m&\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m&\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmonomial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mPolynomial_template\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cparent\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0mdeg\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_gf2x.pyx\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_gf2x.Polynomial_GF2X.__init__ (build/cythonized/sage/rings/polynomial/polynomial_gf2x.cpp:13861)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m \u001b[0mPolynomial_template\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mget_unsafe\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mPy_ssize_t\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/polynomial/polynomial_template.pxi\u001b[0m in \u001b[0;36msage.rings.polynomial.polynomial_gf2x.Polynomial_template.__init__ (build/cythonized/sage/rings/polynomial/polynomial_gf2x.cpp:7355)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 174\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcheck\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mis_gen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconstruct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 176\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase_ring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 177\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcheck\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_gen\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mis_gen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconstruct\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconstruct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/parent.pyx\u001b[0m in \u001b[0;36msage.structure.parent.Parent.__call__ (build/cythonized/sage/structure/parent.c:9727)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 918\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmor\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 919\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mno_extra_args\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 920\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 921\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 922\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4554)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 145\u001b[0;31m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mElement\u001b[0m \u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4422)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mParent\u001b[0m \u001b[0mC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_codomain\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 140\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 141\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mprint_warnings\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/finite_rings/integer_mod_ring.py\u001b[0m in \u001b[0;36m_element_constructor_\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 1165\u001b[0m \"\"\"\n\u001b[1;32m 1166\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1167\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0minteger_mod\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mIntegerMod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1168\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mNotImplementedError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mPariError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1169\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"error coercing to finite field\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/finite_rings/integer_mod.pyx\u001b[0m in \u001b[0;36msage.rings.finite_rings.integer_mod.IntegerMod (build/cythonized/sage/rings/finite_rings/integer_mod.c:4556)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 195\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 196\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodulus\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melement_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 197\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 198\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 199\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/finite_rings/integer_mod.pyx\u001b[0m in \u001b[0;36msage.rings.finite_rings.integer_mod.IntegerMod_abstract.__init__ (build/cythonized/sage/rings/finite_rings/integer_mod.c:5829)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 364\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 366\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minteger_ring\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mZ\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 367\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_from_mpz\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/parent.pyx\u001b[0m in \u001b[0;36msage.structure.parent.Parent.__call__ (build/cythonized/sage/structure/parent.c:9727)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 918\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmor\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 919\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mno_extra_args\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 920\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 921\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 922\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4554)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 144\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 145\u001b[0;31m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0mcpdef\u001b[0m \u001b[0mElement\u001b[0m \u001b[0m_call_with_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/structure/coerce_maps.pyx\u001b[0m in \u001b[0;36msage.structure.coerce_maps.DefaultConvertMap_unique._call_ (build/cythonized/sage/structure/coerce_maps.c:4416)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0mcdef\u001b[0m \u001b[0mParent\u001b[0m \u001b[0mC\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_codomain\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 140\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_element_constructor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 141\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mprint_warnings\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/sage/rings/integer.pyx\u001b[0m in \u001b[0;36msage.rings.integer.Integer.__init__ (build/cythonized/sage/rings/integer.c:6013)\u001b[0;34m()\u001b[0m\n\u001b[1;32m 686\u001b[0m \u001b[0mmpz_set_pylong\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 687\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 688\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Cannot convert non-integral float to integer\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 689\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 690\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpari_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: Cannot convert non-integral float to integer"
]
}
],
"source": [
"P.change_ring(GF(4)).factor()"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Integer Ring"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.parent()"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [],
"source": [
"P1 = P.change_ring(ZZ[i])"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Integer Ring"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P.parent()"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Univariate Polynomial Ring in x over Order in Number Field in I with defining polynomial x^2 + 1"
]
},
"execution_count": 111,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P1.parent()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath 8.3",
"language": "",
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment