{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ZeroDivisionError is introducing error\n", "And we're all too lazy to see it for what it is: **infinity** (**∞**)\n", "\n", "- Are there solutions we cannot find because we're not using symbolic algebra systems (CAS: Computer Algebra Systems)?\n", "- Also: What should we understand about precision?\n", " - ``Decimal('0.3') != Decimal(0.3)``" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "from __future__ import division\n", "import collections\n", "import itertools\n", "from decimal import Decimal\n", "\n", "import pandas as pd\n", "from sympy import init_printing, limit, oo\n", "from sympy.abc import x\n", "init_printing(use_unicode=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## range functions" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "#seq = range(-1,-0.1,0.1) + range(0.1,1,0.1)\n", "# import numpy as np\n", "# np.arange(-1, 1, 0.1)\n", "\n", "\n", "def irange_(start, stop, step=1):\n", " cur = start\n", " step = step\n", " while cur <= stop:\n", " yield cur\n", " cur += step\n", "\n", "\n", "def irange(start, stop, step=1):\n", " cur = start\n", " step = step\n", " i = 1\n", " while cur <= stop:\n", " yield cur\n", " cur = start + i*step\n", " i += 1\n", "\n", "\n", "def drange_(start, stop, step=1):\n", " cur = Decimal(start)\n", " step = Decimal(step)\n", " while cur <= stop:\n", " yield cur\n", " cur += step\n", "\n", "\n", "def drange(start, stop, step=1):\n", " cur = Decimal(str(start)) # note the cast to str first\n", " step = Decimal(str(step)) # note the cast to str first\n", " while cur <= stop:\n", " yield cur\n", " cur += step\n", "\n", "\n", "def frange(start, stop, step=1):\n", " cur = float(start)\n", " step = step\n", " while cur <= stop:\n", " yield cur\n", " cur += step" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import unittest\n", "\n", "class Test_drange(unittest.TestCase):\n", "\n", " def test_drange(self):\n", " output = list(drange(-1,1, 0.5))\n", " self.assertEqual(output, [-1, -0.5, 0, 0.5, 1])\n", "\n", " def _TODO_FIXME_test_drange_2(self):\n", " # TODO FIXME XXX\n", " output = list(drange(-1,1, 0.3))\n", " expected = [-1, -0.7, -0.4, -0.1, 0.2, 0.5, 0.8,]\n", " self.assertAlmostEqual(output, expected)\n", " self.assertEqual(output, [Decimal(x) for x in expected])\n", " self.assertEqual(output, expected)\n", " \n", "# unittest.main() # TODO: nbval?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "## f(x)=1/x and ZeroDvisionError" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Decimal('-1'), Decimal('-1'))\n", "(Decimal('-0.9'), Decimal('-1.111111111111111111111111111'))\n", "(Decimal('-0.8'), Decimal('-1.25'))\n", "(Decimal('-0.7'), Decimal('-1.428571428571428571428571429'))\n", "(Decimal('-0.6'), Decimal('-1.666666666666666666666666667'))\n", "(Decimal('-0.5'), Decimal('-2'))\n", "(Decimal('-0.4'), Decimal('-2.5'))\n", "(Decimal('-0.3'), Decimal('-3.333333333333333333333333333'))\n", "(Decimal('-0.2'), Decimal('-5'))\n", "(Decimal('-0.1'), Decimal('-1E+1'))\n", "(Decimal('0.0'), 'infinity (ZeroDivisionError)')\n", "(Decimal('0.1'), Decimal('1E+1'))\n", "(Decimal('0.2'), Decimal('5'))\n", "(Decimal('0.3'), Decimal('3.333333333333333333333333333'))\n", "(Decimal('0.4'), Decimal('2.5'))\n", "(Decimal('0.5'), Decimal('2'))\n", "(Decimal('0.6'), Decimal('1.666666666666666666666666667'))\n", "(Decimal('0.7'), Decimal('1.428571428571428571428571429'))\n", "(Decimal('0.8'), Decimal('1.25'))\n", "(Decimal('0.9'), Decimal('1.111111111111111111111111111'))\n", "(Decimal('1.0'), Decimal('1'))\n" ] } ], "source": [ "def f(x):\n", " try:\n", " return 1 / x\n", " except ZeroDivisionError:\n", " #return 'ZeroDivisionError'\n", " return float('inf')\n", " except TypeError:\n", " if x is None:\n", " return None\n", " raise\n", "\n", "\n", "def my_point_was():\n", " seq = drange(-1, 1, 0.1)\n", " # seq = frange(-1, 1, 0.1)\n", " #seq = irange_(-1, 1, 0.1)\n", " for x in seq:\n", " if x != 0:\n", " y = f(x)\n", " print((x, y))\n", " else:\n", " print((x, 'infinity (ZeroDivisionError)'))\n", "my_point_was()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## sympy.limit(1/x, x, 0, '+'/'-')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/x\n", "oo\n", "-oo\n", "oo\n", "nan\n" ] } ], "source": [ "def sympy_says():\n", " \"\"\"what is the limit of f(x)=1/x as x approaches 0? oo\"\"\"\n", " expr = (1/x)\n", " limit_positive = limit(expr, x, 0, '+')\n", " limit_negative = limit(expr, x, 0, '-')\n", " print(expr)\n", " print(limit_positive)\n", " print(limit_negative)\n", "\n", " print(10*oo / 2*oo) # if oo is just a symbol, this is 5*oo\n", " print((10*oo / 2*oo) / oo) # if oo is just a symbol, this is 5\n", "sympy_says()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparing the precision of ints, floats, and Decimals" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def thing(start, stop, step=1):\n", " args = (start, stop, step)\n", " funcs = [irange, irange_, frange, drange, drange_]\n", " data = collections.OrderedDict(\n", " ((func.__name__, func(*args)) for func in funcs))\n", " # print(data)\n", "\n", " df = pd.DataFrame.from_records(\n", " itertools.zip_longest(*data.values()),\n", " columns=data.keys())\n", " pd.set_option('expand_frame_repr', False)\n", " print(df)\n", " pd.set_option('expand_frame_repr', True)\n", " print(df.T)\n", "\n", " for func in funcs:\n", " name = func.__name__\n", " df['f(%s)' % name] = df[name].apply(f)\n", " print(df)\n", " print(df.T) # TODO: why is this skipping 10?\n", "\n", " def to_decimal(n):\n", " return Decimal(str(n))\n", "\n", " for f1, f2 in itertools.combinations(funcs, 2):\n", " f1_name, f2_name = 'f(%s)' % f1.__name__, 'f(%s)' % f2.__name__\n", " name = \"%s-%s\" % (f1_name, f2_name)\n", " print(('name', name))\n", " # print(df[f1_name])\n", " if 'drange' in f1_name:\n", " #print(df[f2_name].astype(Decimal))\n", " df[name] = df[f1_name] - df[f2_name].apply(to_decimal)\n", " elif 'drange' in f2_name:\n", " #print(df[f1_name].astype(Decimal))\n", " df[name] = df[f1_name].apply(to_decimal) - df[f2_name]\n", " else:\n", " df[name] = df[f1_name] - df[f2_name]\n", "\n", " print(df)\n", " print(df.T)\n", " return df" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Decimal('-1'), Decimal('-1'))\n", "(Decimal('-0.9'), Decimal('-1.111111111111111111111111111'))\n", "(Decimal('-0.8'), Decimal('-1.25'))\n", "(Decimal('-0.7'), Decimal('-1.428571428571428571428571429'))\n", "(Decimal('-0.6'), Decimal('-1.666666666666666666666666667'))\n", "(Decimal('-0.5'), Decimal('-2'))\n", "(Decimal('-0.4'), Decimal('-2.5'))\n", "(Decimal('-0.3'), Decimal('-3.333333333333333333333333333'))\n", "(Decimal('-0.2'), Decimal('-5'))\n", "(Decimal('-0.1'), Decimal('-1E+1'))\n", "(Decimal('0.0'), 'infinity (ZeroDivisionError)')\n", "(Decimal('0.1'), Decimal('1E+1'))\n", "(Decimal('0.2'), Decimal('5'))\n", "(Decimal('0.3'), Decimal('3.333333333333333333333333333'))\n", "(Decimal('0.4'), Decimal('2.5'))\n", "(Decimal('0.5'), Decimal('2'))\n", "(Decimal('0.6'), Decimal('1.666666666666666666666666667'))\n", "(Decimal('0.7'), Decimal('1.428571428571428571428571429'))\n", "(Decimal('0.8'), Decimal('1.25'))\n", "(Decimal('0.9'), Decimal('1.111111111111111111111111111'))\n", "(Decimal('1.0'), Decimal('1'))\n", "---\n", "1/x\n", "oo\n", "-oo\n", "oo\n", "nan\n", "----\n", " irange irange_ frange drange drange_\n", "0 -1.0 -1.000000e+00 -1.000000e+00 -1 -1\n", "1 -0.9 -9.000000e-01 -9.000000e-01 -0.9 -0.8999999999999999944488848769\n", "2 -0.8 -8.000000e-01 -8.000000e-01 -0.8 -0.7999999999999999888977697538\n", "3 -0.7 -7.000000e-01 -7.000000e-01 -0.7 -0.6999999999999999833466546307\n", "4 -0.6 -6.000000e-01 -6.000000e-01 -0.6 -0.5999999999999999777955395076\n", "5 -0.5 -5.000000e-01 -5.000000e-01 -0.5 -0.4999999999999999722444243845\n", "6 -0.4 -4.000000e-01 -4.000000e-01 -0.4 -0.3999999999999999666933092614\n", "7 -0.3 -3.000000e-01 -3.000000e-01 -0.3 -0.2999999999999999611421941383\n", "8 -0.2 -2.000000e-01 -2.000000e-01 -0.2 -0.1999999999999999555910790152\n", "9 -0.1 -1.000000e-01 -1.000000e-01 -0.1 -0.09999999999999995003996389207\n", "10 0.0 -1.387779e-16 -1.387779e-16 0.0 5.551115123105578270211815834E-17\n", "11 0.1 1.000000e-01 1.000000e-01 0.1 0.1000000000000000610622663542\n", "12 0.2 2.000000e-01 2.000000e-01 0.2 0.2000000000000000666133814773\n", "13 0.3 3.000000e-01 3.000000e-01 0.3 0.3000000000000000721644966004\n", "14 0.4 4.000000e-01 4.000000e-01 0.4 0.4000000000000000777156117235\n", "15 0.5 5.000000e-01 5.000000e-01 0.5 0.5000000000000000832667268466\n", "16 0.6 6.000000e-01 6.000000e-01 0.6 0.6000000000000000888178419697\n", "17 0.7 7.000000e-01 7.000000e-01 0.7 0.7000000000000000943689570928\n", "18 0.8 8.000000e-01 8.000000e-01 0.8 0.8000000000000000999200722159\n", "19 0.9 9.000000e-01 9.000000e-01 0.9 0.9000000000000001054711873390\n", "20 1.0 1.000000e+00 1.000000e+00 1.0 None\n", " 0 1 2 \\\n", "irange -1 -0.9 -0.8 \n", "irange_ -1 -0.9 -0.8 \n", "frange -1 -0.9 -0.8 \n", "drange -1 -0.9 -0.8 \n", "drange_ -1 -0.8999999999999999944488848769 -0.7999999999999999888977697538 \n", "\n", " 3 4 \\\n", "irange -0.7 -0.6 \n", "irange_ -0.7 -0.6 \n", "frange -0.7 -0.6 \n", "drange -0.7 -0.6 \n", "drange_ -0.6999999999999999833466546307 -0.5999999999999999777955395076 \n", "\n", " 5 6 \\\n", "irange -0.5 -0.4 \n", "irange_ -0.5 -0.4 \n", "frange -0.5 -0.4 \n", "drange -0.5 -0.4 \n", "drange_ -0.4999999999999999722444243845 -0.3999999999999999666933092614 \n", "\n", " 7 8 \\\n", "irange -0.3 -0.2 \n", "irange_ -0.3 -0.2 \n", "frange -0.3 -0.2 \n", "drange -0.3 -0.2 \n", "drange_ -0.2999999999999999611421941383 -0.1999999999999999555910790152 \n", "\n", " 9 ... \\\n", "irange -0.1 ... \n", "irange_ -0.1 ... \n", "frange -0.1 ... \n", "drange -0.1 ... \n", "drange_ -0.09999999999999995003996389207 ... \n", "\n", " 11 12 \\\n", "irange 0.1 0.2 \n", "irange_ 0.1 0.2 \n", "frange 0.1 0.2 \n", "drange 0.1 0.2 \n", "drange_ 0.1000000000000000610622663542 0.2000000000000000666133814773 \n", "\n", " 13 14 \\\n", "irange 0.3 0.4 \n", "irange_ 0.3 0.4 \n", "frange 0.3 0.4 \n", "drange 0.3 0.4 \n", "drange_ 0.3000000000000000721644966004 0.4000000000000000777156117235 \n", "\n", " 15 16 \\\n", "irange 0.5 0.6 \n", "irange_ 0.5 0.6 \n", "frange 0.5 0.6 \n", "drange 0.5 0.6 \n", "drange_ 0.5000000000000000832667268466 0.6000000000000000888178419697 \n", "\n", " 17 18 \\\n", "irange 0.7 0.8 \n", "irange_ 0.7 0.8 \n", "frange 0.7 0.8 \n", "drange 0.7 0.8 \n", "drange_ 0.7000000000000000943689570928 0.8000000000000000999200722159 \n", "\n", " 19 20 \n", "irange 0.9 1 \n", "irange_ 0.9 1 \n", "frange 0.9 1 \n", "drange 0.9 1.0 \n", "drange_ 0.9000000000000001054711873390 None \n", "\n", "[5 rows x 21 columns]\n", " irange irange_ frange drange \\\n", "0 -1.0 -1.000000e+00 -1.000000e+00 -1 \n", "1 -0.9 -9.000000e-01 -9.000000e-01 -0.9 \n", "2 -0.8 -8.000000e-01 -8.000000e-01 -0.8 \n", "3 -0.7 -7.000000e-01 -7.000000e-01 -0.7 \n", "4 -0.6 -6.000000e-01 -6.000000e-01 -0.6 \n", "5 -0.5 -5.000000e-01 -5.000000e-01 -0.5 \n", "6 -0.4 -4.000000e-01 -4.000000e-01 -0.4 \n", "7 -0.3 -3.000000e-01 -3.000000e-01 -0.3 \n", "8 -0.2 -2.000000e-01 -2.000000e-01 -0.2 \n", "9 -0.1 -1.000000e-01 -1.000000e-01 -0.1 \n", "10 0.0 -1.387779e-16 -1.387779e-16 0.0 \n", "11 0.1 1.000000e-01 1.000000e-01 0.1 \n", "12 0.2 2.000000e-01 2.000000e-01 0.2 \n", "13 0.3 3.000000e-01 3.000000e-01 0.3 \n", "14 0.4 4.000000e-01 4.000000e-01 0.4 \n", "15 0.5 5.000000e-01 5.000000e-01 0.5 \n", "16 0.6 6.000000e-01 6.000000e-01 0.6 \n", "17 0.7 7.000000e-01 7.000000e-01 0.7 \n", "18 0.8 8.000000e-01 8.000000e-01 0.8 \n", "19 0.9 9.000000e-01 9.000000e-01 0.9 \n", "20 1.0 1.000000e+00 1.000000e+00 1.0 \n", "\n", " drange_ f(irange) f(irange_) f(frange) \\\n", "0 -1 -1.000000 -1.000000e+00 -1.000000e+00 \n", "1 -0.8999999999999999944488848769 -1.111111 -1.111111e+00 -1.111111e+00 \n", "2 -0.7999999999999999888977697538 -1.250000 -1.250000e+00 -1.250000e+00 \n", "3 -0.6999999999999999833466546307 -1.428571 -1.428571e+00 -1.428571e+00 \n", "4 -0.5999999999999999777955395076 -1.666667 -1.666667e+00 -1.666667e+00 \n", "5 -0.4999999999999999722444243845 -2.000000 -2.000000e+00 -2.000000e+00 \n", "6 -0.3999999999999999666933092614 -2.500000 -2.500000e+00 -2.500000e+00 \n", "7 -0.2999999999999999611421941383 -3.333333 -3.333333e+00 -3.333333e+00 \n", "8 -0.1999999999999999555910790152 -5.000000 -5.000000e+00 -5.000000e+00 \n", "9 -0.09999999999999995003996389207 -10.000000 -1.000000e+01 -1.000000e+01 \n", "10 5.551115123105578270211815834E-17 inf -7.205759e+15 -7.205759e+15 \n", "11 0.1000000000000000610622663542 10.000000 1.000000e+01 1.000000e+01 \n", "12 0.2000000000000000666133814773 5.000000 5.000000e+00 5.000000e+00 \n", "13 0.3000000000000000721644966004 3.333333 3.333333e+00 3.333333e+00 \n", "14 0.4000000000000000777156117235 2.500000 2.500000e+00 2.500000e+00 \n", "15 0.5000000000000000832667268466 2.000000 2.000000e+00 2.000000e+00 \n", "16 0.6000000000000000888178419697 1.666667 1.666667e+00 1.666667e+00 \n", "17 0.7000000000000000943689570928 1.428571 1.428571e+00 1.428571e+00 \n", "18 0.8000000000000000999200722159 1.250000 1.250000e+00 1.250000e+00 \n", "19 0.9000000000000001054711873390 1.111111 1.111111e+00 1.111111e+00 \n", "20 None 1.000000 1.000000e+00 1.000000e+00 \n", "\n", " f(drange) f(drange_) \n", "0 -1 -1 \n", "1 -1.111111111111111111111111111 -1.111111111111111117964339658 \n", "2 -1.25 -1.250000000000000017347234760 \n", "3 -1.428571428571428571428571429 -1.428571428571428605414990550 \n", "4 -1.666666666666666666666666667 -1.666666666666666728345723590 \n", "5 -2 -2.000000000000000111022302462 \n", "6 -2.5 -2.500000000000000208166817116 \n", "7 -3.333333333333333333333333333 -3.333333333333333765086731797 \n", "8 -5 -5.000000000000001110223024620 \n", "9 -1E+1 -10.00000000000000499600361079 \n", "10 inf 18014398509547551.13019760304 \n", "11 1E+1 9.999999999999993893773364580 \n", "12 5 4.999999999999998334665463068 \n", "13 3.333333333333333333333333333 3.333333333333332531505593329 \n", "14 2.5 2.499999999999999514277426728 \n", "15 2 1.999999999999999666933092614 \n", "16 1.666666666666666666666666667 1.666666666666666419950438973 \n", "17 1.428571428571428571428571429 1.428571428571428378838863076 \n", "18 1.25 1.249999999999999843874887163 \n", "19 1.111111111111111111111111111 1.111111111111110980899768717 \n", "20 1 None \n", " 0 1 \\\n", "irange -1 -0.9 \n", "irange_ -1 -0.9 \n", "frange -1 -0.9 \n", "drange -1 -0.9 \n", "drange_ -1 -0.8999999999999999944488848769 \n", "f(irange) -1 -1.11111 \n", "f(irange_) -1 -1.11111 \n", "f(frange) -1 -1.11111 \n", "f(drange) -1 -1.111111111111111111111111111 \n", "f(drange_) -1 -1.111111111111111117964339658 \n", "\n", " 2 3 \\\n", "irange -0.8 -0.7 \n", "irange_ -0.8 -0.7 \n", "frange -0.8 -0.7 \n", "drange -0.8 -0.7 \n", "drange_ -0.7999999999999999888977697538 -0.6999999999999999833466546307 \n", "f(irange) -1.25 -1.42857 \n", "f(irange_) -1.25 -1.42857 \n", "f(frange) -1.25 -1.42857 \n", "f(drange) -1.25 -1.428571428571428571428571429 \n", "f(drange_) -1.250000000000000017347234760 -1.428571428571428605414990550 \n", "\n", " 4 5 \\\n", "irange -0.6 -0.5 \n", "irange_ -0.6 -0.5 \n", "frange -0.6 -0.5 \n", "drange -0.6 -0.5 \n", "drange_ -0.5999999999999999777955395076 -0.4999999999999999722444243845 \n", "f(irange) -1.66667 -2 \n", "f(irange_) -1.66667 -2 \n", "f(frange) -1.66667 -2 \n", "f(drange) -1.666666666666666666666666667 -2 \n", "f(drange_) -1.666666666666666728345723590 -2.000000000000000111022302462 \n", "\n", " 6 7 \\\n", "irange -0.4 -0.3 \n", "irange_ -0.4 -0.3 \n", "frange -0.4 -0.3 \n", "drange -0.4 -0.3 \n", "drange_ -0.3999999999999999666933092614 -0.2999999999999999611421941383 \n", "f(irange) -2.5 -3.33333 \n", "f(irange_) -2.5 -3.33333 \n", "f(frange) -2.5 -3.33333 \n", "f(drange) -2.5 -3.333333333333333333333333333 \n", "f(drange_) -2.500000000000000208166817116 -3.333333333333333765086731797 \n", "\n", " 8 9 \\\n", "irange -0.2 -0.1 \n", "irange_ -0.2 -0.1 \n", "frange -0.2 -0.1 \n", "drange -0.2 -0.1 \n", "drange_ -0.1999999999999999555910790152 -0.09999999999999995003996389207 \n", "f(irange) -5 -10 \n", "f(irange_) -5 -10 \n", "f(frange) -5 -10 \n", "f(drange) -5 -1E+1 \n", "f(drange_) -5.000000000000001110223024620 -10.00000000000000499600361079 \n", "\n", " ... 11 \\\n", "irange ... 0.1 \n", "irange_ ... 0.1 \n", "frange ... 0.1 \n", "drange ... 0.1 \n", "drange_ ... 0.1000000000000000610622663542 \n", "f(irange) ... 10 \n", "f(irange_) ... 10 \n", "f(frange) ... 10 \n", "f(drange) ... 1E+1 \n", "f(drange_) ... 9.999999999999993893773364580 \n", "\n", " 12 13 \\\n", "irange 0.2 0.3 \n", "irange_ 0.2 0.3 \n", "frange 0.2 0.3 \n", "drange 0.2 0.3 \n", "drange_ 0.2000000000000000666133814773 0.3000000000000000721644966004 \n", "f(irange) 5 3.33333 \n", "f(irange_) 5 3.33333 \n", "f(frange) 5 3.33333 \n", "f(drange) 5 3.333333333333333333333333333 \n", "f(drange_) 4.999999999999998334665463068 3.333333333333332531505593329 \n", "\n", " 14 15 \\\n", "irange 0.4 0.5 \n", "irange_ 0.4 0.5 \n", "frange 0.4 0.5 \n", "drange 0.4 0.5 \n", "drange_ 0.4000000000000000777156117235 0.5000000000000000832667268466 \n", "f(irange) 2.5 2 \n", "f(irange_) 2.5 2 \n", "f(frange) 2.5 2 \n", "f(drange) 2.5 2 \n", "f(drange_) 2.499999999999999514277426728 1.999999999999999666933092614 \n", "\n", " 16 17 \\\n", "irange 0.6 0.7 \n", "irange_ 0.6 0.7 \n", "frange 0.6 0.7 \n", "drange 0.6 0.7 \n", "drange_ 0.6000000000000000888178419697 0.7000000000000000943689570928 \n", "f(irange) 1.66667 1.42857 \n", "f(irange_) 1.66667 1.42857 \n", "f(frange) 1.66667 1.42857 \n", "f(drange) 1.666666666666666666666666667 1.428571428571428571428571429 \n", "f(drange_) 1.666666666666666419950438973 1.428571428571428378838863076 \n", "\n", " 18 19 \\\n", "irange 0.8 0.9 \n", "irange_ 0.8 0.9 \n", "frange 0.8 0.9 \n", "drange 0.8 0.9 \n", "drange_ 0.8000000000000000999200722159 0.9000000000000001054711873390 \n", "f(irange) 1.25 1.11111 \n", "f(irange_) 1.25 1.11111 \n", "f(frange) 1.25 1.11111 \n", "f(drange) 1.25 1.111111111111111111111111111 \n", "f(drange_) 1.249999999999999843874887163 1.111111111111110980899768717 \n", "\n", " 20 \n", "irange 1 \n", "irange_ 1 \n", "frange 1 \n", "drange 1.0 \n", "drange_ None \n", "f(irange) 1 \n", "f(irange_) 1 \n", "f(frange) 1 \n", "f(drange) 1 \n", "f(drange_) None \n", "\n", "[10 rows x 21 columns]\n", "('name', 'f(irange)-f(irange_)')\n", "('name', 'f(irange)-f(frange)')\n", "('name', 'f(irange)-f(drange)')\n" ] }, { "ename": "TypeError", "evalue": "unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mna_op\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 675\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 676\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexpressions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr_rep\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[0meval_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 677\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/computation/expressions.py\u001b[0m in \u001b[0;36mevaluate\u001b[0;34m(op, op_str, a, b, use_numexpr, **eval_kwargs)\u001b[0m\n\u001b[1;32m 203\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0muse_numexpr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 204\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_evaluate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0meval_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 205\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_evaluate_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/computation/expressions.py\u001b[0m in \u001b[0;36m_evaluate_standard\u001b[0;34m(op, op_str, a, b, **eval_kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merrstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'ignore'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 64\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'decimal.Decimal' and 'float'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36msafe_na_op\u001b[0;34m(lvalues, rvalues)\u001b[0m\n\u001b[1;32m 699\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merrstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'ignore'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 700\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mna_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 701\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[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mna_op\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 681\u001b[0m \u001b[0mmask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnotna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0mnotna\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[0;32m--> 682\u001b[0;31m \u001b[0mresult\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m]\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[0mmask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_values_from_object\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmask\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 683\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[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\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 type(s) for -: 'decimal.Decimal' and 'float'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\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[1;32m 6\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mthing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mmain\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\u001b[0m in \u001b[0;36mmain\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0msympy_says\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\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----> 6\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mthing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mmain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mthing\u001b[0;34m(start, stop, step)\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0;34m'drange'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mf2_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0;31m#print(df[f1_name].astype(Decimal))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 35\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mf1_name\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_decimal\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mf2_name\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 36\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mf1_name\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mf2_name\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(left, right, name, na_op)\u001b[0m\n\u001b[1;32m 737\u001b[0m \u001b[0mlvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 738\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 739\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwrap_results\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msafe_na_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrvalues\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 740\u001b[0m return construct_result(\n\u001b[1;32m 741\u001b[0m \u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36msafe_na_op\u001b[0;34m(lvalues, rvalues)\u001b[0m\n\u001b[1;32m 708\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_object_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 709\u001b[0m return libalgos.arrmap_object(lvalues,\n\u001b[0;32m--> 710\u001b[0;31m lambda x: op(x, rvalues))\n\u001b[0m\u001b[1;32m 711\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 712\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32mpandas/_libs/algos_common_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.algos.arrmap_object\u001b[0;34m()\u001b[0m\n", "\u001b[0;32m~/-wrk/-ce27/maths/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36m\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 708\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_object_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 709\u001b[0m return libalgos.arrmap_object(lvalues,\n\u001b[0;32m--> 710\u001b[0;31m lambda x: op(x, rvalues))\n\u001b[0m\u001b[1;32m 711\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 712\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'decimal.Decimal' and 'float'" ] } ], "source": [ "def main():\n", " my_point_was()\n", " print('---')\n", " sympy_says()\n", " print('----')\n", " return thing(-1, 1, 0.1)\n", "main()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.0" } }, "nbformat": 4, "nbformat_minor": 2 }