{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0 0.5\n"
     ]
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib/python3/dist-packages/ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in log\n",
      "  \n",
      "/usr/lib/python3/dist-packages/ipykernel_launcher.py:9: RuntimeWarning: invalid value encountered in log\n",
      "  if __name__ == '__main__':\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f8d4628da58>]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "def func0(x):\n",
    "    return np.log(x)\n",
    "\n",
    "def func1(x):\n",
    "    return np.log(2 - x)\n",
    "\n",
    "x = np.linspace(-m.pi, m.pi, 1000)\n",
    "\n",
    "plt.plot(x, func0(x), 'r') # plotting t, a separately \n",
    "plt.plot(x, func1(x), 'g') # plotting t, b separately "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pylab\n",
    "import numpy as np\n",
    "\n",
    "def draw_a_line(formula, x_range, label=''):  \n",
    "    x = np.array(x_range)  \n",
    "    y = eval(formula)\n",
    "    pylab.plot(x, y, '-', label=label)\n",
    "\n",
    "# draw two lines\n",
    "draw_a_line('-x**4 + x**2  + 2', range(-5, 5))\n",
    "# draw a point\n",
    "#pylab.plot(0, -2, 'bo', label = r'A')\n",
    "#pylab.plot(-2, 0, 'ro', label = r'B')\n",
    "\n",
    "pylab.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.4142135623730951"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "A (0, -2)\n",
    "B (-2, 0)\n",
    "C (x, y)\n",
    "\n",
    "-2(y+2) - 2x\n",
    "/2\n",
    "\n",
    "((-2)*(y+2) - 2x)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'-1'"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from auto_everything.math import Calculator\n",
    "c = Calculator()\n",
    "\n",
    "c.differential('((-2)*(y+2) - 2*x)/2', c.symbol('y'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.58578644 0.5886177  0.59144895 0.59428021 0.59711147 0.59994273\n",
      " 0.60277399 0.60560525 0.6084365  0.61126776 0.61409902 0.61693028\n",
      " 0.61976154 0.6225928  0.62542405 0.62825531 0.63108657 0.63391783\n",
      " 0.63674909 0.63958035 0.64241161 0.64524286 0.64807412 0.65090538\n",
      " 0.65373664 0.6565679  0.65939916 0.66223041 0.66506167 0.66789293\n",
      " 0.67072419 0.67355545 0.67638671 0.67921796 0.68204922 0.68488048\n",
      " 0.68771174 0.690543   0.69337426 0.69620551 0.69903677 0.70186803\n",
      " 0.70469929 0.70753055 0.71036181 0.71319306 0.71602432 0.71885558\n",
      " 0.72168684 0.7245181  0.72734936 0.73018062 0.73301187 0.73584313\n",
      " 0.73867439 0.74150565 0.74433691 0.74716817 0.74999942 0.75283068\n",
      " 0.75566194 0.7584932  0.76132446 0.76415572 0.76698697 0.76981823\n",
      " 0.77264949 0.77548075 0.77831201 0.78114327 0.78397452 0.78680578\n",
      " 0.78963704 0.7924683  0.79529956 0.79813082 0.80096207 0.80379333\n",
      " 0.80662459 0.80945585 0.81228711 0.81511837 0.81794963 0.82078088\n",
      " 0.82361214 0.8264434  0.82927466 0.83210592 0.83493718 0.83776843\n",
      " 0.84059969 0.84343095 0.84626221 0.84909347 0.85192473 0.85475598\n",
      " 0.85758724 0.8604185  0.86324976 0.86608102 0.86891228 0.87174353\n",
      " 0.87457479 0.87740605 0.88023731 0.88306857 0.88589983 0.88873108\n",
      " 0.89156234 0.8943936  0.89722486 0.90005612 0.90288738 0.90571863\n",
      " 0.90854989 0.91138115 0.91421241 0.91704367 0.91987493 0.92270619\n",
      " 0.92553744 0.9283687  0.93119996 0.93403122 0.93686248 0.93969374\n",
      " 0.94252499 0.94535625 0.94818751 0.95101877 0.95385003 0.95668129\n",
      " 0.95951254 0.9623438  0.96517506 0.96800632 0.97083758 0.97366884\n",
      " 0.97650009 0.97933135 0.98216261 0.98499387 0.98782513 0.99065639\n",
      " 0.99348764 0.9963189  0.99915016 1.00198142 1.00481268 1.00764394\n",
      " 1.0104752  1.01330645 1.01613771 1.01896897 1.02180023 1.02463149\n",
      " 1.02746275 1.030294   1.03312526 1.03595652 1.03878778 1.04161904\n",
      " 1.0444503  1.04728155 1.05011281 1.05294407 1.05577533 1.05860659\n",
      " 1.06143785 1.0642691  1.06710036 1.06993162 1.07276288 1.07559414\n",
      " 1.0784254  1.08125665 1.08408791 1.08691917 1.08975043 1.09258169\n",
      " 1.09541295 1.0982442  1.10107546 1.10390672 1.10673798 1.10956924\n",
      " 1.1124005  1.11523176 1.11806301 1.12089427 1.12372553 1.12655679\n",
      " 1.12938805 1.13221931 1.13505056 1.13788182 1.14071308 1.14354434\n",
      " 1.1463756  1.14920686 1.15203811 1.15486937 1.15770063 1.16053189\n",
      " 1.16336315 1.16619441 1.16902566 1.17185692 1.17468818 1.17751944\n",
      " 1.1803507  1.18318196 1.18601321 1.18884447 1.19167573 1.19450699\n",
      " 1.19733825 1.20016951 1.20300077 1.20583202 1.20866328 1.21149454\n",
      " 1.2143258  1.21715706 1.21998832 1.22281957 1.22565083 1.22848209\n",
      " 1.23131335 1.23414461 1.23697587 1.23980712 1.24263838 1.24546964\n",
      " 1.2483009  1.25113216 1.25396342 1.25679467 1.25962593 1.26245719\n",
      " 1.26528845 1.26811971 1.27095097 1.27378222 1.27661348 1.27944474\n",
      " 1.282276   1.28510726 1.28793852 1.29076978 1.29360103 1.29643229\n",
      " 1.29926355 1.30209481 1.30492607 1.30775733 1.31058858 1.31341984\n",
      " 1.3162511  1.31908236 1.32191362 1.32474488 1.32757613 1.33040739\n",
      " 1.33323865 1.33606991 1.33890117 1.34173243 1.34456368 1.34739494\n",
      " 1.3502262  1.35305746 1.35588872 1.35871998 1.36155123 1.36438249\n",
      " 1.36721375 1.37004501 1.37287627 1.37570753 1.37853878 1.38137004\n",
      " 1.3842013  1.38703256 1.38986382 1.39269508 1.39552634 1.39835759\n",
      " 1.40118885 1.40402011 1.40685137 1.40968263 1.41251389 1.41534514\n",
      " 1.4181764  1.42100766 1.42383892 1.42667018 1.42950144 1.43233269\n",
      " 1.43516395 1.43799521 1.44082647 1.44365773 1.44648899 1.44932024\n",
      " 1.4521515  1.45498276 1.45781402 1.46064528 1.46347654 1.46630779\n",
      " 1.46913905 1.47197031 1.47480157 1.47763283 1.48046409 1.48329535\n",
      " 1.4861266  1.48895786 1.49178912 1.49462038 1.49745164 1.5002829\n",
      " 1.50311415 1.50594541 1.50877667 1.51160793 1.51443919 1.51727045\n",
      " 1.5201017  1.52293296 1.52576422 1.52859548 1.53142674 1.534258\n",
      " 1.53708925 1.53992051 1.54275177 1.54558303 1.54841429 1.55124555\n",
      " 1.5540768  1.55690806 1.55973932 1.56257058 1.56540184 1.5682331\n",
      " 1.57106435 1.57389561 1.57672687 1.57955813 1.58238939 1.58522065\n",
      " 1.58805191 1.59088316 1.59371442 1.59654568 1.59937694 1.6022082\n",
      " 1.60503946 1.60787071 1.61070197 1.61353323 1.61636449 1.61919575\n",
      " 1.62202701 1.62485826 1.62768952 1.63052078 1.63335204 1.6361833\n",
      " 1.63901456 1.64184581 1.64467707 1.64750833 1.65033959 1.65317085\n",
      " 1.65600211 1.65883336 1.66166462 1.66449588 1.66732714 1.6701584\n",
      " 1.67298966 1.67582092 1.67865217 1.68148343 1.68431469 1.68714595\n",
      " 1.68997721 1.69280847 1.69563972 1.69847098 1.70130224 1.7041335\n",
      " 1.70696476 1.70979602 1.71262727 1.71545853 1.71828979 1.72112105\n",
      " 1.72395231 1.72678357 1.72961482 1.73244608 1.73527734 1.7381086\n",
      " 1.74093986 1.74377112 1.74660237 1.74943363 1.75226489 1.75509615\n",
      " 1.75792741 1.76075867 1.76358993 1.76642118 1.76925244 1.7720837\n",
      " 1.77491496 1.77774622 1.78057748 1.78340873 1.78623999 1.78907125\n",
      " 1.79190251 1.79473377 1.79756503 1.80039628 1.80322754 1.8060588\n",
      " 1.80889006 1.81172132 1.81455258 1.81738383 1.82021509 1.82304635\n",
      " 1.82587761 1.82870887 1.83154013 1.83437138 1.83720264 1.8400339\n",
      " 1.84286516 1.84569642 1.84852768 1.85135893 1.85419019 1.85702145\n",
      " 1.85985271 1.86268397 1.86551523 1.86834649 1.87117774 1.874009\n",
      " 1.87684026 1.87967152 1.88250278 1.88533404 1.88816529 1.89099655\n",
      " 1.89382781 1.89665907 1.89949033 1.90232159 1.90515284 1.9079841\n",
      " 1.91081536 1.91364662 1.91647788 1.91930914 1.92214039 1.92497165\n",
      " 1.92780291 1.93063417 1.93346543 1.93629669 1.93912794 1.9419592\n",
      " 1.94479046 1.94762172 1.95045298 1.95328424 1.9561155  1.95894675\n",
      " 1.96177801 1.96460927 1.96744053 1.97027179 1.97310305 1.9759343\n",
      " 1.97876556 1.98159682 1.98442808 1.98725934 1.9900906  1.99292185\n",
      " 1.99575311 1.99858437 2.00141563 2.00424689 2.00707815 2.0099094\n",
      " 2.01274066 2.01557192 2.01840318 2.02123444 2.0240657  2.02689695\n",
      " 2.02972821 2.03255947 2.03539073 2.03822199 2.04105325 2.0438845\n",
      " 2.04671576 2.04954702 2.05237828 2.05520954 2.0580408  2.06087206\n",
      " 2.06370331 2.06653457 2.06936583 2.07219709 2.07502835 2.07785961\n",
      " 2.08069086 2.08352212 2.08635338 2.08918464 2.0920159  2.09484716\n",
      " 2.09767841 2.10050967 2.10334093 2.10617219 2.10900345 2.11183471\n",
      " 2.11466596 2.11749722 2.12032848 2.12315974 2.125991   2.12882226\n",
      " 2.13165351 2.13448477 2.13731603 2.14014729 2.14297855 2.14580981\n",
      " 2.14864107 2.15147232 2.15430358 2.15713484 2.1599661  2.16279736\n",
      " 2.16562862 2.16845987 2.17129113 2.17412239 2.17695365 2.17978491\n",
      " 2.18261617 2.18544742 2.18827868 2.19110994 2.1939412  2.19677246\n",
      " 2.19960372 2.20243497 2.20526623 2.20809749 2.21092875 2.21376001\n",
      " 2.21659127 2.21942252 2.22225378 2.22508504 2.2279163  2.23074756\n",
      " 2.23357882 2.23641007 2.23924133 2.24207259 2.24490385 2.24773511\n",
      " 2.25056637 2.25339763 2.25622888 2.25906014 2.2618914  2.26472266\n",
      " 2.26755392 2.27038518 2.27321643 2.27604769 2.27887895 2.28171021\n",
      " 2.28454147 2.28737273 2.29020398 2.29303524 2.2958665  2.29869776\n",
      " 2.30152902 2.30436028 2.30719153 2.31002279 2.31285405 2.31568531\n",
      " 2.31851657 2.32134783 2.32417908 2.32701034 2.3298416  2.33267286\n",
      " 2.33550412 2.33833538 2.34116664 2.34399789 2.34682915 2.34966041\n",
      " 2.35249167 2.35532293 2.35815419 2.36098544 2.3638167  2.36664796\n",
      " 2.36947922 2.37231048 2.37514174 2.37797299 2.38080425 2.38363551\n",
      " 2.38646677 2.38929803 2.39212929 2.39496054 2.3977918  2.40062306\n",
      " 2.40345432 2.40628558 2.40911684 2.41194809 2.41477935 2.41761061\n",
      " 2.42044187 2.42327313 2.42610439 2.42893565 2.4317669  2.43459816\n",
      " 2.43742942 2.44026068 2.44309194 2.4459232  2.44875445 2.45158571\n",
      " 2.45441697 2.45724823 2.46007949 2.46291075 2.465742   2.46857326\n",
      " 2.47140452 2.47423578 2.47706704 2.4798983  2.48272955 2.48556081\n",
      " 2.48839207 2.49122333 2.49405459 2.49688585 2.4997171  2.50254836\n",
      " 2.50537962 2.50821088 2.51104214 2.5138734  2.51670465 2.51953591\n",
      " 2.52236717 2.52519843 2.52802969 2.53086095 2.53369221 2.53652346\n",
      " 2.53935472 2.54218598 2.54501724 2.5478485  2.55067976 2.55351101\n",
      " 2.55634227 2.55917353 2.56200479 2.56483605 2.56766731 2.57049856\n",
      " 2.57332982 2.57616108 2.57899234 2.5818236  2.58465486 2.58748611\n",
      " 2.59031737 2.59314863 2.59597989 2.59881115 2.60164241 2.60447366\n",
      " 2.60730492 2.61013618 2.61296744 2.6157987  2.61862996 2.62146122\n",
      " 2.62429247 2.62712373 2.62995499 2.63278625 2.63561751 2.63844877\n",
      " 2.64128002 2.64411128 2.64694254 2.6497738  2.65260506 2.65543632\n",
      " 2.65826757 2.66109883 2.66393009 2.66676135 2.66959261 2.67242387\n",
      " 2.67525512 2.67808638 2.68091764 2.6837489  2.68658016 2.68941142\n",
      " 2.69224267 2.69507393 2.69790519 2.70073645 2.70356771 2.70639897\n",
      " 2.70923022 2.71206148 2.71489274 2.717724   2.72055526 2.72338652\n",
      " 2.72621778 2.72904903 2.73188029 2.73471155 2.73754281 2.74037407\n",
      " 2.74320533 2.74603658 2.74886784 2.7516991  2.75453036 2.75736162\n",
      " 2.76019288 2.76302413 2.76585539 2.76868665 2.77151791 2.77434917\n",
      " 2.77718043 2.78001168 2.78284294 2.7856742  2.78850546 2.79133672\n",
      " 2.79416798 2.79699923 2.79983049 2.80266175 2.80549301 2.80832427\n",
      " 2.81115553 2.81398679 2.81681804 2.8196493  2.82248056 2.82531182\n",
      " 2.82814308 2.83097434 2.83380559 2.83663685 2.83946811 2.84229937\n",
      " 2.84513063 2.84796189 2.85079314 2.8536244  2.85645566 2.85928692\n",
      " 2.86211818 2.86494944 2.86778069 2.87061195 2.87344321 2.87627447\n",
      " 2.87910573 2.88193699 2.88476824 2.8875995  2.89043076 2.89326202\n",
      " 2.89609328 2.89892454 2.9017558  2.90458705 2.90741831 2.91024957\n",
      " 2.91308083 2.91591209 2.91874335 2.9215746  2.92440586 2.92723712\n",
      " 2.93006838 2.93289964 2.9357309  2.93856215 2.94139341 2.94422467\n",
      " 2.94705593 2.94988719 2.95271845 2.9555497  2.95838096 2.96121222\n",
      " 2.96404348 2.96687474 2.969706   2.97253725 2.97536851 2.97819977\n",
      " 2.98103103 2.98386229 2.98669355 2.9895248  2.99235606 2.99518732\n",
      " 2.99801858 3.00084984 3.0036811  3.00651236 3.00934361 3.01217487\n",
      " 3.01500613 3.01783739 3.02066865 3.02349991 3.02633116 3.02916242\n",
      " 3.03199368 3.03482494 3.0376562  3.04048746 3.04331871 3.04614997\n",
      " 3.04898123 3.05181249 3.05464375 3.05747501 3.06030626 3.06313752\n",
      " 3.06596878 3.06880004 3.0716313  3.07446256 3.07729381 3.08012507\n",
      " 3.08295633 3.08578759 3.08861885 3.09145011 3.09428137 3.09711262\n",
      " 3.09994388 3.10277514 3.1056064  3.10843766 3.11126892 3.11410017\n",
      " 3.11693143 3.11976269 3.12259395 3.12542521 3.12825647 3.13108772\n",
      " 3.13391898 3.13675024 3.1395815  3.14241276 3.14524402 3.14807527\n",
      " 3.15090653 3.15373779 3.15656905 3.15940031 3.16223157 3.16506282\n",
      " 3.16789408 3.17072534 3.1735566  3.17638786 3.17921912 3.18205037\n",
      " 3.18488163 3.18771289 3.19054415 3.19337541 3.19620667 3.19903793\n",
      " 3.20186918 3.20470044 3.2075317  3.21036296 3.21319422 3.21602548\n",
      " 3.21885673 3.22168799 3.22451925 3.22735051 3.23018177 3.23301303\n",
      " 3.23584428 3.23867554 3.2415068  3.24433806 3.24716932 3.25000058\n",
      " 3.25283183 3.25566309 3.25849435 3.26132561 3.26415687 3.26698813\n",
      " 3.26981938 3.27265064 3.2754819  3.27831316 3.28114442 3.28397568\n",
      " 3.28680694 3.28963819 3.29246945 3.29530071 3.29813197 3.30096323\n",
      " 3.30379449 3.30662574 3.309457   3.31228826 3.31511952 3.31795078\n",
      " 3.32078204 3.32361329 3.32644455 3.32927581 3.33210707 3.33493833\n",
      " 3.33776959 3.34060084 3.3434321  3.34626336 3.34909462 3.35192588\n",
      " 3.35475714 3.35758839 3.36041965 3.36325091 3.36608217 3.36891343\n",
      " 3.37174469 3.37457595 3.3774072  3.38023846 3.38306972 3.38590098\n",
      " 3.38873224 3.3915635  3.39439475 3.39722601 3.40005727 3.40288853\n",
      " 3.40571979 3.40855105 3.4113823  3.41421356]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "x = np.linspace(-2**(1/2) + 2, 2**(1/2) + 2, 1000)\n",
    "y = np.sqrt(2 - (x-2)**2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "lists1 = []\n",
    "for a,b in zip(x,y):\n",
    "    r = ((-2)*(b+2) - 2*a)/2\n",
    "    if str(r) != 'nan':\n",
    "        lists1.append(r)\n",
    "        \n",
    "lists2 = []\n",
    "for a,b in zip(x,-y):\n",
    "    r = ((-2)*(b+2) - 2*a)/2\n",
    "    if str(r) != 'nan':\n",
    "        lists2.append(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3.1488098147320764\n",
      "-2.4061817456293353\n"
     ]
    }
   ],
   "source": [
    "print(max(lists1))\n",
    "\n",
    "print(max(lists2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-6.079099744316539\n",
      "-5.41421354129967\n"
     ]
    }
   ],
   "source": [
    "print(min(lists1))\n",
    "\n",
    "print(min(lists2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.242640687119286"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "3*np.sqrt(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.449489742783178"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.75"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "285/60"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.21650635094610965"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(1 - (1/2)**2)  * 1/2 * 1/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "4 * 0.2"
   ]
  },
  {
   "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.10.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
