{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# L3 E - S5 2018-19 --- TD ordinateurs --- séance 6\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Probabilités"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On note la nouvelle manière d'importer les bibliothèques :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from matplotlib.pyplot import *\n",
    "from random import *\n",
    "import numpy as np\n",
    "import pylab as pl"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Et, toujours pour enregistrer des fichiers dans son  propre répertoire, on note le chemin qui mène au répertoire dans lequel on est en train de travailler :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'/Users/ef_mac2/Desktop/cloud/enseigne/maths-sur-ordi/lgge_PYTHON/TDO_18-19/TDO-6-probas'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: '..................................'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-4-c45a618f0ddc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchdir\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[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '..................................'"
     ]
    }
   ],
   "source": [
    "import os \n",
    "os.chdir('..................................')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Pile ou face"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pile ou face..., c'est l'expérience la plus basique. En voici une simulation :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def pile_ou_face(n):                      ### On fera n lancers\n",
    "    Res=[randint(0,1) for k in range(n)]  ###  randint(0,1) renvoie aléatoirement 0 ou 1\n",
    "    return([(Res.count(i)/float(n)) for i in range(0,2)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "print (pile_ou_face(1))\n",
    "print (pile_ou_face(10))\n",
    "print (pile_ou_face(100))\n",
    "print (pile_ou_face(1000))\n",
    "print (pile_ou_face(10000))\n",
    "print (pile_ou_face(100000))\n",
    "print (pile_ou_face(1000000))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Et un jeu de dés...\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def des(n):                               ### On fera n lancers\n",
    "    Res=[randint(1,6) for k in range(n)]  ###  randint(1,6) renvoie aléatoirement 1,2,3,4,5 ou 6\n",
    "    return([(Res.count(i)/float(n)) for i in range(1,7)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "des(234)        ##### un test avec 234 lancers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Et des histogrammes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On peut préférer représenter ces résultats sous la forme d'histogrammes :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "lancers=[randint(1,6) for k in range(1000)]\n",
    "\n",
    "pl.hist(lancers,range = (0.5, 6.5), bins = 6)  ### on prend les valeurs de 0.5 à 6.5\n",
    "                                               ### et on compte 6 intervalles\n",
    "pl.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On peut compléter, modifier, agrémenter, commenter, enregistrer cet histogramme... :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "combien de lancers de dés voulez-vous ?\n",
      "456\n"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'randint' 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-1-01027596a4d2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"combien de lancers de dés voulez-vous ?\\n\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mlancers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mrandint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\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      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m pl.hist(lancers,range = (0.5, 6.5), bins = 6,\n",
      "\u001b[0;32m<ipython-input-1-01027596a4d2>\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"combien de lancers de dés voulez-vous ?\\n\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mlancers\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mrandint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\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      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m pl.hist(lancers,range = (0.5, 6.5), bins = 6,\n",
      "\u001b[0;31mNameError\u001b[0m: name 'randint' is not defined"
     ]
    }
   ],
   "source": [
    "n=int(input(\"combien de lancers de dés voulez-vous ?\\n\"))\n",
    "\n",
    "lancers=[randint(1,6) for k in range(n)]\n",
    "\n",
    "pl.hist(lancers,range = (0.5, 6.5), bins = 6,\n",
    "        color = 'orange',edgecolor = 'red',\n",
    "        hatch = 'x', rwidth = 0.4 ) \n",
    "\n",
    "pl.axis([0, 7, 0, n/5])      ### précise la fenêtre d'observation choisie\n",
    "pl.grid(True)                ### ajoute un repère \n",
    "\n",
    "xlabel(\"les valeurs possibles du dé\")\n",
    "ylabel(\"nombres de jets pour chaque valeur\")\n",
    "title(\"simulation de %g lancers de dés\"%n) \n",
    "savefig(\"simulation-lancers-de-%g-des.pdf\"%n)\n",
    "pl.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Faisons à  présent une suite de 4 lancers et comptons le nombre de \"face\" apparus"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n=500       ##### n est le nombre de séries de 4 lancers que l'on souhaite faire\n",
    "Res=[]              ###### Res : le compteur des résultats de chaque lancer \n",
    "                    ######        Ce sera une liste\n",
    "                    ######        Res[0] comptera les \"pile\"\n",
    "                    ######        Res[1] comptera les \"face\"\n",
    "for k in range(n):\n",
    "    nb_de_F=0 \n",
    "    for j in range(4):\n",
    "        nb_de_F += randint(0,1)               ### \"x += a\", c'est comme \"x = x+a\"\n",
    "    Res.append(nb_de_F)  \n",
    "Resultat=[(Res.count(i)) for i in range(5)]   ### on utilise la fonction count\n",
    "\n",
    "\n",
    "figure(figsize = (12,8))               ### pour faire des figures séparées\n",
    "                                       ### et en précisant l'espace qu'on veut occuper\n",
    "subplot(2, 3, 1)       ### la 1ère figure\n",
    "\n",
    "####### subplot(1,2,2) :  il y a 2 lignes, 3 colonnes et ce dessin sera en 1ère position\n",
    "\n",
    "print (\"frequences=\",[k/float(n) for k in Resultat])\n",
    "pl.hist(Res,range = (-0.5, 4.5), bins = 5, \n",
    "        color = 'green',edgecolor = 'blue',\n",
    "        hatch = '/', rwidth = 0.7 ) \n",
    "title(\"nombre de faces \\n avec %g series de\\n 4 lancers consecutifs\"%n)\n",
    "savefig(\"nb-de-faces-avec-%g-series-de-4-lancers-consecutifs.pdf\"%n)\n",
    "\n",
    "\n",
    "subplot(2, 3, 2)        ### la 2ème figure\n",
    "\n",
    "####### subplot(1,2,2) : il y a 2 lignes, 3 colonnes et ce dessin sera en 2ème position\n",
    "\n",
    "\n",
    "pl.hist(Res,range = (-0.5, 4.5), bins = 5, \n",
    "        normed=1,                                ##### on ramène la somme à 1\n",
    "        color = 'green',edgecolor = 'blue',\n",
    "        hatch = '/', rwidth = 0.7) \n",
    "title(\"\\n\\n proportions de faces\\n avec %g series de \\n 4 lancers consecutifs\"%n)\n",
    "savefig(\"proportions-de-faces-avec-%g-series-de-4-lancers-consecutifs.pdf\"%n)\n",
    "\n",
    "\n",
    "\n",
    "subplot(2, 3, 6)        ### la 3ème figure\n",
    "\n",
    "####### subplot(2,3,2) il y a 2 lignes, 3 colonnes et ce dessin sera en 6ème position\n",
    "\n",
    "\n",
    "pl.hist(Res,range = (-0.5, 4.5), bins = 5, \n",
    "        normed=1,                                ##### on ramène la somme à 1\n",
    "        color = 'yellow',edgecolor = 'red',\n",
    "        hatch = '*', rwidth = 0.5 ) \n",
    "title(\"\\n\\n proportions de faces\\n avec %g series de \\n 4 lancers consecutifs\"%n)\n",
    "savefig(\"proportions-de-faces-avec-%g-series-de-4-lancers-consecutifs.pdf\"%n)\n",
    "\n",
    "pl.show()\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Représentation en camembert "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "Toujours sur les mêmes données, la représentation en camenbert :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "name = ['0', '1', '2', '3','4']\n",
    "data = Resultat\n",
    "print(Resultat)\n",
    "\n",
    "explode=(0, 0.15 , 0 , 0 , 0.3)\n",
    "pl.pie(data, explode=explode, labels=name, autopct='%1.1f%%', startangle=90, shadow=True)\n",
    "pl.axis('equal')\n",
    "title(\"nombre de F pour %g series de 4 lancers consécutifs \\n sous la forme d'un camenbert\"%n)\n",
    "savefig(\"nb-de-F-pour-%g-series-4-lancers-consec_camenbert.pdf\"%n)\n",
    "\n",
    "\n",
    "pl.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Probabilités d'évènements"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Toujours avec des lancers de dés : "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "lancers = [ randint(1, 6) for _ in range(10000)]\n",
    "\n",
    "evt1 = [ x for x in lancers if x % 2 == 0]\n",
    "evt2 = [ x for x in lancers if x // 3 == 1]\n",
    "evt3 = [ x for x in lancers if x > 2]\n",
    "evt4 = [ x for x in lancers if x % 2 == 0 and x > 2]\n",
    "evt5 = [ x for x in lancers if x in evt1 and x in evt3]\n",
    "\n",
    "print(len(evt1) / len(lancers))\n",
    "print(len(evt2) / len(lancers))\n",
    "print(len(evt3) / len(lancers))\n",
    "print(len(evt4) / len(lancers))\n",
    "print(len(evt5) / len(lancers))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## La fonction choice"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La fonction choice permet d'étendre le choix aléatoire à des listes quelconques :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for k in range(10):\n",
    "    print(choice(\"abcdefghijklmeopqrstuvwxyz\"))\n",
    "    print(choice([\"abcdefghijklmeopqrstuvwxyz\",\"blublu\",421]))\n",
    "print('\\n\\n')\n",
    "\n",
    "people = [\"je\", \"tu\", \"elle\", \"ils\",\"on\",\"nous\",\"vous\",\"elles\",\"ils\",\n",
    "          \"eux\",\"et moi, et moi, et moi\"]\n",
    "for k in range(20):\n",
    "    print(choice(people))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "L'exemple suivant montre que l'on peut affecter des probabilités particulières aux différents évènements :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from numpy.random import choice\n",
    "qui = [\"elle\",\"lui\",\"il\",\"eux\",\"elles\",\"ils\"]\n",
    "probabilities = [0.1, 0.2, 0.1, 0.3, 0.1,0.2]\n",
    "\n",
    "result=[]\n",
    "Res=[choice(qui, p=probabilities) for k in range(10000)]  \n",
    "print([(Res.count(i)/float(1000)) for i in qui])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "qui2 = [\"elle\",\"lui\",\"lui\",\"il\",\"eux\",\"eux\",\"eux\",\"elles\",\"ils\",\"ils\"]\n",
    "\n",
    "result=[]\n",
    "Res=[choice(qui2) for k in range(10000)]  \n",
    "print([(Res.count(i)/float(1000)) for i in qui])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Exercice 1 : lancers de dés\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On lance un dé à 6 faces 3 fois d'affilée et on note la somme des nombres obtenus. \n",
    "Ecrire un programme qui trace l'histogramme ds différentes sommes possibles\n",
    "pour un nombre N de séries de 3 lancers donné à l'avance.\n",
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercice 2 : tirages dans une urne"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Trois urnes $U_1$, $U_2$ et $U_3$ contiennent des boules rouges et noires. L'urne $U_1$ (resp. $U_2$, resp. $U_3$) contient 4 (resp.6, resp.3) boules rouges et 6 (resp.7, resp.9) boules noires.\n",
    "\n",
    "On tire une boule dans chaque urne.\n",
    " \n",
    "\n",
    "\n",
    " 1. A partir de simulations, estimer la probabilité $p_k$ d'obtenir $k$ boules rouges avec $k\\in \\{0,1,2,3\\}$.\n",
    "\n",
    " 2. Représenter le résultat à l'aide d'un camembert.\n",
    "\n",
    " 3. Comparer avec les valeurs données par la théorie."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercice 3 : la loi binomiale"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Définir une fonction ${\\rm \\texttt{LoiBinomiale(n,p)}}$\n",
    "qui simule la loi binomiale ${\\mathcal B}(n,p)$.    \n",
    "\n",
    "Représenter l'histogramme de cette simulation pour différentes valeurs de $n$ et $p$ (on rappelle que ${\\rm \\texttt{random()}}$ renvoie  un nombre pris au hasard entre 0 et 1).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercice 4 : le jeu de Saint Petersbourg"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pierre et Paul joue au jeu suivant : Pierre lance une pièce jusqu'à ce qu'il obtienne un \"Face\" (et le jeu s'arrête au premier \"Face\" obtenu).  Alors, si ce premier \"Face\" a été au $n$-ème lancer, Pierre donne $2^{n}$ euros à Paul.\n",
    "\n",
    "\n",
    " 1. Simuler ce jeu répété un très grand nombre de fois (par exemple, 100 fois, puis 1000 fois).\n",
    "\n",
    " 2. Combien Pierre donnera-t'il en moyenne à Paul selon cette simulation ? Est-ce que la moyenne obtenue dépend du nombre de fois que l'on a répété la partie dans la simulation choisie ?\n",
    "\n",
    " 3. Combien Pierre donnera-t'il en moyenne à  Paul selon la théorie ?\n",
    "\n",
    " 4. Combien Paul doit-il donner à Pierre pour que Pierre accepte de jouer à ce jeu ? "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercice 5 : le jeu de Monty Hall"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Extrait de la page wikipedia (titre : \"Problème de Monty Hall\") :\n",
    "\n",
    "Le problème de Monty Hall est un casse-tête probabiliste librement \n",
    "inspiré du jeu télévisé américain \"Let's Make a Deal\". \n",
    "Il est simple dans son énoncé, mais non intuitif dans sa résolution \n",
    "et c'est pourquoi on parle parfois à son sujet de \"paradoxe de Monty Hall\". \n",
    "Il porte le nom de celui qui a présenté ce jeu aux Etats-Unis \n",
    "pendant treize ans, Monty Hall.\n",
    "(...)\n",
    "\n",
    "«Supposez que vous êtes sur le plateau d'un jeu télévisé, \n",
    "face à trois portes et que vous devez choisir d'en ouvrir une seule, \n",
    "en sachant que derrière l'une d'elles se trouve une voiture et derrière \n",
    "les deux autres des chèvres. Vous choisissez une porte, disons la numéro 1, \n",
    "et le présentateur, qui sait, lui, ce qu'il y a derrière chaque porte, \n",
    "ouvre une autre porte, disons la numéro 3, porte qui une fois ouverte \n",
    "découvre une chèvre. Il vous demande alors : \n",
    "\"désirez-vous ouvrir la porte numéro 2 ?\". A votre avis, \n",
    "est-ce à votre avantage de changer de choix et \n",
    "d'ouvrir la porte 2 plutôt que la porte 1 initialement \n",
    "choisie ?»\n",
    "\n",
    "\n",
    "Simulez cette expérience pour vous aider à trouver la réponse. \n",
    "\n"
   ]
  }
 ],
 "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.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
