\n"
541 | ]
542 | }
543 | ]
544 | },
545 | {
546 | "cell_type": "code",
547 | "source": [
548 | "from datetime import date\n",
549 | "today = date.today()\n",
550 | "print(today.year)\n",
551 | "print(today.month)\n",
552 | "print(today.day)"
553 | ],
554 | "metadata": {
555 | "id": "YXOot21Vkrq5",
556 | "colab": {
557 | "base_uri": "https://localhost:8080/"
558 | },
559 | "outputId": "564b6ca7-86c8-402b-db32-58ea2b453d5e"
560 | },
561 | "execution_count": null,
562 | "outputs": [
563 | {
564 | "output_type": "stream",
565 | "name": "stdout",
566 | "text": [
567 | "2022\n",
568 | "9\n",
569 | "21\n"
570 | ]
571 | }
572 | ]
573 | },
574 | {
575 | "cell_type": "markdown",
576 | "source": [
577 | "### Funcion para Calcular la edad a partir de la **Fecha de Nacimiento**"
578 | ],
579 | "metadata": {
580 | "id": "oVFGkSgvSu53"
581 | }
582 | },
583 | {
584 | "cell_type": "code",
585 | "source": [
586 | "# Python3 code to calculate age in years\n",
587 | "\n",
588 | "from datetime import date\n",
589 | "\n",
590 | "def calcularEdad(FechaNacimiento):\n",
591 | " today = date.today()\n",
592 | " edad = today.year - FechaNacimiento.year - ((today.month, today.day) < (FechaNacimiento.month, FechaNacimiento.day))\n",
593 | " return edad\n",
594 | "\t\n",
595 | "# Driver code\n",
596 | "print(calcularEdad(date(2005, 9, 26)), \"Years\")\n"
597 | ],
598 | "metadata": {
599 | "colab": {
600 | "base_uri": "https://localhost:8080/"
601 | },
602 | "id": "lC95WhkoS4TX",
603 | "outputId": "afaad01f-11fb-44a5-df1b-7ff91453d0dc"
604 | },
605 | "execution_count": null,
606 | "outputs": [
607 | {
608 | "output_type": "stream",
609 | "name": "stdout",
610 | "text": [
611 | "17 Years\n"
612 | ]
613 | }
614 | ]
615 | }
616 | ]
617 | }
--------------------------------------------------------------------------------
/Worshop Python # 7: Ficheros/files.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Manejo de archivos"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## import de librerias"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 1,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "import io\n",
24 | "import os\n",
25 | "import struct\n",
26 | "import time"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "### Clase para el tratamiento de datos"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": 2,
39 | "metadata": {},
40 | "outputs": [],
41 | "source": [
42 | "file_read: str = \"iris_df.csv\"\n",
43 | "file_bk: str = \"iris_bk.csv\"\n",
44 | "file_created: str = \"iris_created.csv\"\n",
45 | "iris_binary: str = \"iris_binary.bin\"\n",
46 | "iris_bk_test: str = \"iris_bk_test.csv\"\n",
47 | "\n",
48 | "os.remove(file_created)\n",
49 | "\n",
50 | "class IrisClass:\n",
51 | " def __init__(\n",
52 | " self,\n",
53 | " sepal_length: str,\n",
54 | " sepal_width: str,\n",
55 | " petal_length: str,\n",
56 | " petal_width: str,\n",
57 | " class_type: str\n",
58 | " ) -> None:\n",
59 | " self.sepal_length = float(sepal_length)\n",
60 | " self.sepal_width = float(sepal_width)\n",
61 | " self.petal_length = float(petal_length)\n",
62 | " self.petal_width = float(petal_width)\n",
63 | " self.class_type = class_type.replace(\"\\n\", \"\")\n",
64 | "\n",
65 | " def transform_class_type(self) -> str:\n",
66 | " mapper = {\n",
67 | " \"Iris-setosa\": 1,\n",
68 | " \"Iris-versicolor\": 2,\n",
69 | " \"Iris-virginica\": 3,\n",
70 | " }\n",
71 | " n_class_type = mapper[self.class_type]\n",
72 | "\n",
73 | " return (\n",
74 | " f'{self.sepal_length},'\n",
75 | " f'{self.sepal_width},'\n",
76 | " f'{self.petal_length},'\n",
77 | " f'{self.petal_width},'\n",
78 | " f'{n_class_type}'\n",
79 | " )\n",
80 | "\n",
81 | " def return_list_numbers(self) -> list:\n",
82 | " mapper = {\n",
83 | " \"Iris-setosa\": 1,\n",
84 | " \"Iris-versicolor\": 2,\n",
85 | " \"Iris-virginica\": 3,\n",
86 | " }\n",
87 | " n_class_type = mapper[self.class_type]\n",
88 | "\n",
89 | " return [\n",
90 | " self.sepal_length,\n",
91 | " self.sepal_width,\n",
92 | " self.petal_length,\n",
93 | " self.petal_width,\n",
94 | " n_class_type,\n",
95 | " ]\n",
96 | "\n",
97 | " def __str__(self) -> str:\n",
98 | " return (\n",
99 | " f'Class Flower: {self.class_type}\\n'\n",
100 | " f'Sepal Size: [{self.sepal_length}, {self.sepal_width}]\\n'\n",
101 | " f'Petal Size: [{self.petal_length}, {self.petal_width}]\\n'\n",
102 | " )\n",
103 | "\n",
104 | " def __repr__(self) -> str:\n",
105 | " return (\n",
106 | " f'Class Flower: {self.class_type}\\n'\n",
107 | " f'Sepal Length: {self.sepal_length}\\n'\n",
108 | " f'Sepal Width: {self.sepal_width}\\n'\n",
109 | " f'Petal Length: {self.petal_length}\\n'\n",
110 | " f'Petal Width: {self.petal_width}\\n'\n",
111 | " )"
112 | ]
113 | },
114 | {
115 | "cell_type": "markdown",
116 | "metadata": {},
117 | "source": [
118 | "## Funciones para abrir archivos\n",
119 | "\n",
120 | " Existen dos maneras de abrir los archivos:\n",
121 | "
\n",
122 | " - open y close de forma tradicional
\n",
123 | " - open usando contexto, en este no se usa close el mismo contexto lo aplica
\n",
124 | "
\n",
125 | ""
126 | ]
127 | },
128 | {
129 | "cell_type": "markdown",
130 | "metadata": {},
131 | "source": [
132 | "### Forma tradicional"
133 | ]
134 | },
135 | {
136 | "cell_type": "code",
137 | "execution_count": 3,
138 | "metadata": {},
139 | "outputs": [
140 | {
141 | "name": "stdout",
142 | "output_type": "stream",
143 | "text": [
144 | "5.1,3.5,1.4,0.2,Iris-setosa\n",
145 | "4.9,3.0,1.4,0.2,Iris-setosa\n",
146 | "4.7,3.2,1.3,0.2,Iris-setosa\n",
147 | "4.6,3.1,1.5,0.2,Iris-setosa\n",
148 | "5.0,3.6,1.4,0.2,Iris-setosa\n"
149 | ]
150 | }
151 | ],
152 | "source": [
153 | "f = open(file_read, \"r\", encoding=\"utf-8\")\n",
154 | "lines = 5\n",
155 | "count = 0\n",
156 | "\n",
157 | "for line in f:\n",
158 | " count += 1\n",
159 | " print(line.replace(\"\\n\", \"\"))\n",
160 | "\n",
161 | " if count == lines:\n",
162 | " break\n",
163 | "\n",
164 | "f.close()"
165 | ]
166 | },
167 | {
168 | "cell_type": "markdown",
169 | "metadata": {},
170 | "source": [
171 | "### Usando open como contexto"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": 4,
177 | "metadata": {},
178 | "outputs": [
179 | {
180 | "name": "stdout",
181 | "output_type": "stream",
182 | "text": [
183 | "5.1,3.5,1.4,0.2,Iris-setosa\n",
184 | "4.9,3.0,1.4,0.2,Iris-setosa\n",
185 | "4.7,3.2,1.3,0.2,Iris-setosa\n",
186 | "4.6,3.1,1.5,0.2,Iris-setosa\n",
187 | "5.0,3.6,1.4,0.2,Iris-setosa\n"
188 | ]
189 | }
190 | ],
191 | "source": [
192 | "with open(file_read, \"r\", encoding=\"utf-8\") as f:\n",
193 | " lines = 5\n",
194 | " count = 0\n",
195 | "\n",
196 | " for line in f:\n",
197 | " count += 1\n",
198 | " print(line.replace(\"\\n\", \"\"))\n",
199 | "\n",
200 | " if count == lines:\n",
201 | " break"
202 | ]
203 | },
204 | {
205 | "cell_type": "markdown",
206 | "metadata": {},
207 | "source": [
208 | "## Leyendo un archivo\n",
209 | "\n",
210 | " Se pueden leer los archivos de dos formas:\n",
211 | "
\n",
212 | " - usando `readlines` para leer el archivo completo
\n",
213 | " - usando el `objeto File` como iterador para leer linea por linea
\n",
214 | "
\n",
215 | ""
216 | ]
217 | },
218 | {
219 | "cell_type": "markdown",
220 | "metadata": {},
221 | "source": [
222 | "#### Todas las lineas"
223 | ]
224 | },
225 | {
226 | "cell_type": "code",
227 | "execution_count": 5,
228 | "metadata": {},
229 | "outputs": [
230 | {
231 | "name": "stdout",
232 | "output_type": "stream",
233 | "text": [
234 | "Muestra de lineas: ['5.1,3.5,1.4,0.2,Iris-setosa\\n', '4.9,3.0,1.4,0.2,Iris-setosa\\n', '4.7,3.2,1.3,0.2,Iris-setosa\\n', '4.6,3.1,1.5,0.2,Iris-setosa\\n', '5.0,3.6,1.4,0.2,Iris-setosa\\n']\n",
235 | "Numero de lineas en el archivo 151\n"
236 | ]
237 | }
238 | ],
239 | "source": [
240 | "with open(file_read, \"r\", encoding=\"utf-8\") as f:\n",
241 | " all_lines = f.readlines()\n",
242 | " print(\"Muestra de lineas: \", all_lines[:5])\n",
243 | " print(\"Numero de lineas en el archivo\", len(all_lines))"
244 | ]
245 | },
246 | {
247 | "cell_type": "markdown",
248 | "metadata": {},
249 | "source": [
250 | "### Linea por linea"
251 | ]
252 | },
253 | {
254 | "cell_type": "code",
255 | "execution_count": 6,
256 | "metadata": {},
257 | "outputs": [
258 | {
259 | "name": "stdout",
260 | "output_type": "stream",
261 | "text": [
262 | "['5.1,3.5,1.4,0.2,Iris-setosa\\n', '4.9,3.0,1.4,0.2,Iris-setosa\\n', '4.7,3.2,1.3,0.2,Iris-setosa\\n', '4.6,3.1,1.5,0.2,Iris-setosa\\n', '5.0,3.6,1.4,0.2,Iris-setosa\\n']\n",
263 | "151\n",
264 | "********************************************************************************\n",
265 | "['5.1,3.5,1.4,0.2,Iris-setosa\\n', '4.9,3.0,1.4,0.2,Iris-setosa\\n', '4.7,3.2,1.3,0.2,Iris-setosa\\n', '4.6,3.1,1.5,0.2,Iris-setosa\\n', '5.0,3.6,1.4,0.2,Iris-setosa\\n', '5.4,3.9,1.7,0.4,Iris-setosa\\n']\n"
266 | ]
267 | }
268 | ],
269 | "source": [
270 | "num_read_lines = 5\n",
271 | "\n",
272 | "with open(file_read, \"r\", encoding=\"utf-8\") as f:\n",
273 | " # Leyendo todo el archivo usando el iterador\n",
274 | " other_lines = []\n",
275 | " all_lines = [line for line in f]\n",
276 | " print(all_lines[:5])\n",
277 | " print(len(all_lines))\n",
278 | " print(\"*\" * 80)\n",
279 | " # este metodo sirve para regresar el apuntador del archivo al principio\n",
280 | " f.seek(0)\n",
281 | "\n",
282 | " # leyendo solo 5 lineas del archivo\n",
283 | " for i, line in enumerate(f):\n",
284 | " other_lines.append(line)\n",
285 | "\n",
286 | " if i == num_read_lines:\n",
287 | " break\n",
288 | "\n",
289 | " print(other_lines)"
290 | ]
291 | },
292 | {
293 | "cell_type": "markdown",
294 | "metadata": {},
295 | "source": [
296 | "## Escribiendo un archivo\n",
297 | "\n",
298 | " Para escribir un archivo podemos hacer uso de estos 3 modos:\n",
299 | "
\n",
300 | " - `w` - sirve para crear el archivo, pero si existe lo borra
\n",
301 | " - `a` - sirve para agregar nuevos elementos al archivo
\n",
302 | " - `x` - sirve solo para crear el archivo, falla si el archivo existe
\n",
303 | "
\n",
304 | "\n",
305 | "\n",
306 | "\n",
307 | " De igual manera para agregar texto al archivo se usa:\n",
308 | "
\n",
309 | " - `write` - se usa para escribir solo una linea en el archivo
\n",
310 | " - `writelines` - se usa para escribir multiples lineas (list) en el archivo
\n",
311 | "
\n",
312 | ""
313 | ]
314 | },
315 | {
316 | "cell_type": "markdown",
317 | "metadata": {},
318 | "source": [
319 | "### Leyendo el archivo para reescrirlo"
320 | ]
321 | },
322 | {
323 | "cell_type": "code",
324 | "execution_count": 7,
325 | "metadata": {},
326 | "outputs": [
327 | {
328 | "name": "stdout",
329 | "output_type": "stream",
330 | "text": [
331 | "['5.1,3.5,1.4,0.2,Iris-setosa\\n', '4.9,3.0,1.4,0.2,Iris-setosa\\n', '4.7,3.2,1.3,0.2,Iris-setosa\\n', '4.6,3.1,1.5,0.2,Iris-setosa\\n', '5.0,3.6,1.4,0.2,Iris-setosa\\n']\n",
332 | "********************************************************************************\n",
333 | "[['5.1', '3.5', '1.4', '0.2', 'Iris-setosa\\n'], ['4.9', '3.0', '1.4', '0.2', 'Iris-setosa\\n'], ['4.7', '3.2', '1.3', '0.2', 'Iris-setosa\\n'], ['4.6', '3.1', '1.5', '0.2', 'Iris-setosa\\n'], ['5.0', '3.6', '1.4', '0.2', 'Iris-setosa\\n']]\n",
334 | "5\n",
335 | "Class Flower: Iris-setosa\n",
336 | "Sepal Size: [5.1, 3.5]\n",
337 | "Petal Size: [1.4, 0.2]\n",
338 | "\n"
339 | ]
340 | }
341 | ],
342 | "source": [
343 | "with open(file_read, \"r\", encoding=\"utf-8\") as f:\n",
344 | " all_lines = f.readlines()\n",
345 | " print(all_lines[:5])\n",
346 | "\n",
347 | "print(\"*\" * 80)\n",
348 | "clean_lines = [line.split(\",\") for line in all_lines]\n",
349 | "print(clean_lines[:5])\n",
350 | "print(len(clean_lines[0]))\n",
351 | "# Creando clase para parseo\n",
352 | "iris_class = [\n",
353 | " IrisClass(line[0], line[1], line[2], line[3], line[4])\n",
354 | " for line in clean_lines\n",
355 | " if len(line) == 5\n",
356 | "]\n",
357 | "print(iris_class[0])"
358 | ]
359 | },
360 | {
361 | "cell_type": "markdown",
362 | "metadata": {},
363 | "source": [
364 | "### Reescribiendo el archivo (cambiando el valor del tipo de Iris a numerico)"
365 | ]
366 | },
367 | {
368 | "cell_type": "markdown",
369 | "metadata": {},
370 | "source": [
371 | "#### Usando `write`"
372 | ]
373 | },
374 | {
375 | "cell_type": "code",
376 | "execution_count": 8,
377 | "metadata": {},
378 | "outputs": [
379 | {
380 | "name": "stdout",
381 | "output_type": "stream",
382 | "text": [
383 | "Is not possible read file `not readable`\n"
384 | ]
385 | }
386 | ],
387 | "source": [
388 | "with open(file_bk, \"w\", encoding=\"utf-8\") as f:\n",
389 | " try:\n",
390 | " f.readlines()\n",
391 | " except io.UnsupportedOperation as uo:\n",
392 | " print(\"Is not possible read file `%s`\" % str(uo))\n",
393 | "\n",
394 | " for iris in iris_class:\n",
395 | " f.write(iris.transform_class_type() + \"\\n\")"
396 | ]
397 | },
398 | {
399 | "cell_type": "markdown",
400 | "metadata": {},
401 | "source": [
402 | "#### Usando `writelines`"
403 | ]
404 | },
405 | {
406 | "cell_type": "code",
407 | "execution_count": 9,
408 | "metadata": {},
409 | "outputs": [],
410 | "source": [
411 | "with open(file_bk, \"w\", encoding=\"utf-8\") as f:\n",
412 | " all_lines_w = [iris.transform_class_type() + \"\\n\" for iris in iris_class]\n",
413 | " f.writelines(all_lines_w)"
414 | ]
415 | },
416 | {
417 | "cell_type": "markdown",
418 | "metadata": {},
419 | "source": [
420 | "#### Usando `a` para agregar nuevas lineas"
421 | ]
422 | },
423 | {
424 | "cell_type": "markdown",
425 | "metadata": {},
426 | "source": [
427 | "##### Usando `write`"
428 | ]
429 | },
430 | {
431 | "cell_type": "code",
432 | "execution_count": 10,
433 | "metadata": {},
434 | "outputs": [
435 | {
436 | "name": "stdout",
437 | "output_type": "stream",
438 | "text": [
439 | "Is not possible read file `not readable`\n"
440 | ]
441 | }
442 | ],
443 | "source": [
444 | "with open(file_bk, \"a\", encoding=\"utf-8\") as f:\n",
445 | " try:\n",
446 | " f.readlines()\n",
447 | " except io.UnsupportedOperation as uo:\n",
448 | " print(\"Is not possible read file `%s`\" % str(uo))\n",
449 | "\n",
450 | " new_lines = [\n",
451 | " iris.transform_class_type() + \"\\n\" for iris in iris_class\n",
452 | " ][:5]\n",
453 | "\n",
454 | " for line in new_lines:\n",
455 | " f.write(line)"
456 | ]
457 | },
458 | {
459 | "cell_type": "markdown",
460 | "metadata": {},
461 | "source": [
462 | "#### Usando `writelines`"
463 | ]
464 | },
465 | {
466 | "cell_type": "code",
467 | "execution_count": 11,
468 | "metadata": {},
469 | "outputs": [],
470 | "source": [
471 | "with open(file_bk, \"a\", encoding=\"utf-8\") as f:\n",
472 | " new_lines = [\n",
473 | " iris.transform_class_type() + \"\\n\" for iris in iris_class\n",
474 | " ][:5]\n",
475 | "\n",
476 | " f.writelines(new_lines)"
477 | ]
478 | },
479 | {
480 | "cell_type": "markdown",
481 | "metadata": {},
482 | "source": [
483 | "#### Usando `x`"
484 | ]
485 | },
486 | {
487 | "cell_type": "code",
488 | "execution_count": 12,
489 | "metadata": {},
490 | "outputs": [],
491 | "source": [
492 | "with open(file_created, \"x\", encoding=\"utf-8\") as f:\n",
493 | " new_lines = [\n",
494 | " iris.transform_class_type() + \"\\n\" for iris in iris_class\n",
495 | " ][:5]\n",
496 | "\n",
497 | " f.writelines(new_lines)\n",
498 | "\n",
499 | " for line in new_lines:\n",
500 | " f.write(line)"
501 | ]
502 | },
503 | {
504 | "cell_type": "code",
505 | "execution_count": 13,
506 | "metadata": {},
507 | "outputs": [
508 | {
509 | "name": "stdout",
510 | "output_type": "stream",
511 | "text": [
512 | "[Errno 17] File exists: 'iris_created.csv'\n"
513 | ]
514 | }
515 | ],
516 | "source": [
517 | "try:\n",
518 | " with open(file_created, \"x\", encoding=\"utf-8\") as f:\n",
519 | " new_lines = [\n",
520 | " iris.transform_class_type() + \"\\n\" for iris in iris_class\n",
521 | " ][:5]\n",
522 | "\n",
523 | " f.writelines(new_lines)\n",
524 | "except FileExistsError as fee:\n",
525 | " print(fee)"
526 | ]
527 | },
528 | {
529 | "cell_type": "markdown",
530 | "metadata": {},
531 | "source": [
532 | "### Creando y leyendo un archivo binario\n",
533 | "\n",
534 | "\n",
535 | " Para este ejemplo se usa el mismo dataset, debido a que se usan numeros de punto flotante\n",
536 | " se debe de hacer un empaquetado con la libreria `struct` nativa de python.\n",
537 | "
\n",
538 | "\n",
539 | " Para la parte de leer se tiene que hacer el proceso inverso, en este caso por ser de\n",
540 | " tipo flotante se debe declarar un buffer de 4 bytes:\n",
541 | " https://docs.python.org/3/library/struct.html#format-characters\n",
542 | "
"
543 | ]
544 | },
545 | {
546 | "cell_type": "code",
547 | "execution_count": 14,
548 | "metadata": {},
549 | "outputs": [],
550 | "source": [
551 | "with open(iris_binary, \"wb\") as f:\n",
552 | " new_lines = [\n",
553 | " struct.pack(\n",
554 | " '%sf' % len(iris.return_list_numbers()),\n",
555 | " *iris.return_list_numbers(),\n",
556 | " )\n",
557 | " for iris in iris_class\n",
558 | " ]\n",
559 | "\n",
560 | " f.writelines(new_lines)"
561 | ]
562 | },
563 | {
564 | "cell_type": "code",
565 | "execution_count": 15,
566 | "metadata": {},
567 | "outputs": [
568 | {
569 | "name": "stdout",
570 | "output_type": "stream",
571 | "text": [
572 | "[[5.099999904632568, 3.5, 1.399999976158142, 0.20000000298023224, 1.0], [4.900000095367432, 3.0, 1.399999976158142, 0.20000000298023224, 1.0], [4.699999809265137, 3.200000047683716, 1.2999999523162842, 0.20000000298023224, 1.0], [4.599999904632568, 3.0999999046325684, 1.5, 0.20000000298023224, 1.0], [5.0, 3.5999999046325684, 1.399999976158142, 0.20000000298023224, 1.0]]\n"
573 | ]
574 | }
575 | ],
576 | "source": [
577 | "with open(iris_binary, \"rb\") as f:\n",
578 | " array_complete = []\n",
579 | " simple_array = []\n",
580 | "\n",
581 | " while (buff := f.read(4)):\n",
582 | " simple_array.append(struct.unpack(\"f\", buff)[0])\n",
583 | "\n",
584 | " if len(simple_array) == 5:\n",
585 | " array_complete.append(simple_array)\n",
586 | " simple_array = []\n",
587 | "\n",
588 | "print(array_complete[:5])"
589 | ]
590 | },
591 | {
592 | "cell_type": "markdown",
593 | "metadata": {},
594 | "source": [
595 | "#### usando `+`"
596 | ]
597 | },
598 | {
599 | "cell_type": "markdown",
600 | "metadata": {},
601 | "source": [
602 | "#### Escribiendo el archivo"
603 | ]
604 | },
605 | {
606 | "cell_type": "code",
607 | "execution_count": 16,
608 | "metadata": {},
609 | "outputs": [
610 | {
611 | "name": "stdout",
612 | "output_type": "stream",
613 | "text": [
614 | "********************************************************************************\n",
615 | "[]\n",
616 | "********************************************************************************\n",
617 | "********************************************************************************\n",
618 | "['5.1,3.5,1.4,0.2,1\\n', '4.9,3.0,1.4,0.2,1\\n', '4.7,3.2,1.3,0.2,1\\n', '4.6,3.1,1.5,0.2,1\\n', '5.0,3.6,1.4,0.2,1\\n']\n",
619 | "********************************************************************************\n"
620 | ]
621 | }
622 | ],
623 | "source": [
624 | "with open(iris_bk_test, \"w+\") as f:\n",
625 | " lines = f.readlines()\n",
626 | " print(\"*\" * 80)\n",
627 | " print(lines)\n",
628 | " print(\"*\" * 80)\n",
629 | " new_lines = [\n",
630 | " iris.transform_class_type() + \"\\n\" for iris in iris_class\n",
631 | " ]\n",
632 | " time.sleep(20)\n",
633 | " f.writelines(new_lines)\n",
634 | " f.seek(0)\n",
635 | " lines = f.readlines()\n",
636 | " print(\"*\" * 80)\n",
637 | " print(lines[:5])\n",
638 | " print(\"*\" * 80)"
639 | ]
640 | },
641 | {
642 | "cell_type": "markdown",
643 | "metadata": {},
644 | "source": [
645 | "#### Leyendo el archivo"
646 | ]
647 | },
648 | {
649 | "cell_type": "code",
650 | "execution_count": 17,
651 | "metadata": {},
652 | "outputs": [
653 | {
654 | "name": "stdout",
655 | "output_type": "stream",
656 | "text": [
657 | "['5.1,3.5,1.4,0.2,1\\n', '4.9,3.0,1.4,0.2,1\\n', '4.7,3.2,1.3,0.2,1\\n', '4.6,3.1,1.5,0.2,1\\n', '5.0,3.6,1.4,0.2,1\\n']\n"
658 | ]
659 | }
660 | ],
661 | "source": [
662 | "with open(iris_bk_test, \"r+\") as f:\n",
663 | " lines = f.readlines()\n",
664 | " print(lines[:5])\n",
665 | " f.writelines(lines[:5])"
666 | ]
667 | }
668 | ],
669 | "metadata": {
670 | "kernelspec": {
671 | "display_name": "Python 3 (ipykernel)",
672 | "language": "python",
673 | "name": "python3"
674 | },
675 | "language_info": {
676 | "codemirror_mode": {
677 | "name": "ipython",
678 | "version": 3
679 | },
680 | "file_extension": ".py",
681 | "mimetype": "text/x-python",
682 | "name": "python",
683 | "nbconvert_exporter": "python",
684 | "pygments_lexer": "ipython3",
685 | "version": "3.9.13"
686 | },
687 | "vscode": {
688 | "interpreter": {
689 | "hash": "4ae1d9573f36c5ea85e81284a590ce02170bd3f6f3d77e6fc9900e8410b6db09"
690 | }
691 | }
692 | },
693 | "nbformat": 4,
694 | "nbformat_minor": 4
695 | }
696 |
--------------------------------------------------------------------------------
/Worshop Python # 5: Operadores/Taller_Operadores_-_Python_1.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "0a43afe9-fc81-47cc-932d-33fad5f71207",
6 | "metadata": {},
7 | "source": [
8 | "Taller Introduccion Python - Operadores"
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "id": "3e851977-2219-413e-bf6a-3f2b906f7faf",
14 | "metadata": {},
15 | "source": [
16 | "Entrada y salida de datos"
17 | ]
18 | },
19 | {
20 | "cell_type": "code",
21 | "execution_count": 12,
22 | "id": "c481d900-f2fe-4dd2-b332-b810e0b7d45e",
23 | "metadata": {},
24 | "outputs": [
25 | {
26 | "name": "stdout",
27 | "output_type": "stream",
28 | "text": [
29 | "Hola 'Data Engineering Latam' hoy les presentamos el taller Python: Operadores\n",
30 | "Hola 'Data Engineering Latam' hoy les presentamos el taller Python: Operadores\n",
31 | "Hola 'Data Engineering Latam' hoy les presentamos el taller Python: Operadores\n"
32 | ]
33 | }
34 | ],
35 | "source": [
36 | "comunidad = \"'Data Engineering Latam'\"\n",
37 | "taller = \"Python: Operadores\"\n",
38 | "\n",
39 | "print(\"Hola\", comunidad, \"hoy les presentamos el taller\", taller)\n",
40 | "print(f\"Hola {comunidad} hoy les presentamos el taller {taller}\")\n",
41 | "print(\"Hola {} hoy les presentamos el taller {}\".format(comunidad, taller))"
42 | ]
43 | },
44 | {
45 | "cell_type": "code",
46 | "execution_count": 17,
47 | "id": "f65a1355-d269-4a2a-bd8e-a564f87abee8",
48 | "metadata": {},
49 | "outputs": [
50 | {
51 | "name": "stdin",
52 | "output_type": "stream",
53 | "text": [
54 | " Tulio\n",
55 | " 30\n"
56 | ]
57 | },
58 | {
59 | "name": "stdout",
60 | "output_type": "stream",
61 | "text": [
62 | "130\n"
63 | ]
64 | }
65 | ],
66 | "source": [
67 | "nombre = input()\n",
68 | "edad = int(input())\n",
69 | "print(edad + 100)"
70 | ]
71 | },
72 | {
73 | "cell_type": "markdown",
74 | "id": "8cd43c8f-70ee-43b7-b097-c73d41b11115",
75 | "metadata": {},
76 | "source": [
77 | "Operadores Aritmeticos"
78 | ]
79 | },
80 | {
81 | "cell_type": "markdown",
82 | "id": "9b381319-a805-413a-abab-094c337c326e",
83 | "metadata": {},
84 | "source": [
85 | "SUma (+)"
86 | ]
87 | },
88 | {
89 | "cell_type": "code",
90 | "execution_count": 3,
91 | "id": "3b2ade4b-426b-4640-a383-d173059764b9",
92 | "metadata": {},
93 | "outputs": [
94 | {
95 | "data": {
96 | "text/plain": [
97 | "27"
98 | ]
99 | },
100 | "execution_count": 3,
101 | "metadata": {},
102 | "output_type": "execute_result"
103 | }
104 | ],
105 | "source": [
106 | "22 + 5 "
107 | ]
108 | },
109 | {
110 | "cell_type": "code",
111 | "execution_count": 9,
112 | "id": "6f1335b9-7484-4b80-a2ac-52a378364806",
113 | "metadata": {},
114 | "outputs": [
115 | {
116 | "name": "stdout",
117 | "output_type": "stream",
118 | "text": [
119 | "150\n"
120 | ]
121 | }
122 | ],
123 | "source": [
124 | "entero_1 = 100 \n",
125 | "entero_2 = 50\n",
126 | "flotante = 5.5\n",
127 | "suma = entero_1 + entero_2\n",
128 | "print (suma) "
129 | ]
130 | },
131 | {
132 | "cell_type": "code",
133 | "execution_count": 13,
134 | "id": "9885824f-0ab1-4334-8045-b124d684db4f",
135 | "metadata": {},
136 | "outputs": [
137 | {
138 | "name": "stdout",
139 | "output_type": "stream",
140 | "text": [
141 | "105.5\n"
142 | ]
143 | }
144 | ],
145 | "source": [
146 | "suma_2 = entero_1 + flotante \n",
147 | "print(suma_2)"
148 | ]
149 | },
150 | {
151 | "cell_type": "code",
152 | "execution_count": 14,
153 | "id": "560914b0-779f-4988-b1b4-6ef756aa77aa",
154 | "metadata": {},
155 | "outputs": [
156 | {
157 | "name": "stdout",
158 | "output_type": "stream",
159 | "text": [
160 | " La suma de 100 + 50 es 150\n"
161 | ]
162 | }
163 | ],
164 | "source": [
165 | "print(f' La suma de {entero_1} + {entero_2} es {suma}')"
166 | ]
167 | },
168 | {
169 | "cell_type": "code",
170 | "execution_count": 15,
171 | "id": "cdbe1f38-658b-43ae-a78b-818ddf7c94f7",
172 | "metadata": {},
173 | "outputs": [
174 | {
175 | "name": "stdout",
176 | "output_type": "stream",
177 | "text": [
178 | "La suma de 100 + 5.5 es 105.5\n"
179 | ]
180 | }
181 | ],
182 | "source": [
183 | "print(f'La suma de {entero_1} + {flotante} es {suma_2}')"
184 | ]
185 | },
186 | {
187 | "cell_type": "markdown",
188 | "id": "10258f68-965b-41c7-9097-617b94490254",
189 | "metadata": {},
190 | "source": [
191 | "Resta (-)"
192 | ]
193 | },
194 | {
195 | "cell_type": "code",
196 | "execution_count": 17,
197 | "id": "3e4cf033-d14a-4b27-84c6-c826af4162c0",
198 | "metadata": {},
199 | "outputs": [
200 | {
201 | "name": "stdout",
202 | "output_type": "stream",
203 | "text": [
204 | "50\n"
205 | ]
206 | }
207 | ],
208 | "source": [
209 | "resta = entero_1 - entero_2 \n",
210 | "print(resta)"
211 | ]
212 | },
213 | {
214 | "cell_type": "markdown",
215 | "id": "3ef0c0d5-0523-4608-ac83-81ec87d5fae2",
216 | "metadata": {},
217 | "source": [
218 | "Multiplicacion (*)"
219 | ]
220 | },
221 | {
222 | "cell_type": "code",
223 | "execution_count": 18,
224 | "id": "59b045a0-fdb3-4e0a-bea1-12df97850041",
225 | "metadata": {},
226 | "outputs": [
227 | {
228 | "name": "stdout",
229 | "output_type": "stream",
230 | "text": [
231 | "550.0\n"
232 | ]
233 | }
234 | ],
235 | "source": [
236 | "multiplicacion = entero_1 * flotante\n",
237 | "print (multiplicacion)"
238 | ]
239 | },
240 | {
241 | "cell_type": "markdown",
242 | "id": "8728d013-baf5-4091-b672-a0a28c052044",
243 | "metadata": {},
244 | "source": [
245 | "Division (/)"
246 | ]
247 | },
248 | {
249 | "cell_type": "code",
250 | "execution_count": 21,
251 | "id": "42e21f4e-95b5-41d3-be5e-cb26fc61d394",
252 | "metadata": {},
253 | "outputs": [
254 | {
255 | "name": "stdout",
256 | "output_type": "stream",
257 | "text": [
258 | "2.0\n"
259 | ]
260 | }
261 | ],
262 | "source": [
263 | "Division = entero_1 / entero_2\n",
264 | "print(Division)"
265 | ]
266 | },
267 | {
268 | "cell_type": "markdown",
269 | "id": "ab3ee2b7-0335-4af9-8496-26ab747fbf68",
270 | "metadata": {},
271 | "source": [
272 | "Divion entera a la baja (//)"
273 | ]
274 | },
275 | {
276 | "cell_type": "code",
277 | "execution_count": 162,
278 | "id": "24a262e1-b256-45a2-86ae-35e59fda0682",
279 | "metadata": {},
280 | "outputs": [
281 | {
282 | "name": "stdout",
283 | "output_type": "stream",
284 | "text": [
285 | "4\n"
286 | ]
287 | }
288 | ],
289 | "source": [
290 | "print(9//2)"
291 | ]
292 | },
293 | {
294 | "cell_type": "markdown",
295 | "id": "0676e59b-9794-4b76-b34c-e96096b3de51",
296 | "metadata": {},
297 | "source": [
298 | "Residuo (%)"
299 | ]
300 | },
301 | {
302 | "cell_type": "code",
303 | "execution_count": 22,
304 | "id": "285d98af-8237-42fd-9cc0-c35e018627ae",
305 | "metadata": {},
306 | "outputs": [
307 | {
308 | "name": "stdout",
309 | "output_type": "stream",
310 | "text": [
311 | "0\n",
312 | "2\n"
313 | ]
314 | }
315 | ],
316 | "source": [
317 | "print ( 30 % 6)\n",
318 | "print (20 % 3 )"
319 | ]
320 | },
321 | {
322 | "cell_type": "markdown",
323 | "id": "b12589ce-9fac-46d5-a493-82f1d78f3d69",
324 | "metadata": {},
325 | "source": [
326 | "Exponente (**)"
327 | ]
328 | },
329 | {
330 | "cell_type": "code",
331 | "execution_count": 24,
332 | "id": "10501e1b-cefb-43f7-ad00-cbded8540d1b",
333 | "metadata": {},
334 | "outputs": [
335 | {
336 | "name": "stdout",
337 | "output_type": "stream",
338 | "text": [
339 | "8\n",
340 | "27\n"
341 | ]
342 | }
343 | ],
344 | "source": [
345 | "print ( 2 ** 3 )\n",
346 | "print (3 ** 3)"
347 | ]
348 | },
349 | {
350 | "cell_type": "markdown",
351 | "id": "2db40d10-5a5b-47e6-bc83-f54890c77f34",
352 | "metadata": {},
353 | "source": [
354 | "Parentesis ()"
355 | ]
356 | },
357 | {
358 | "cell_type": "markdown",
359 | "id": "7f7e65cc-0c86-4e57-b567-0450d7c9202b",
360 | "metadata": {},
361 | "source": [
362 | "Orden/Prioridad de Operadores aritmeticos - PEMDAS\n",
363 | "- Parentesis, exponentes, multiplicacion-division, adicion-resta"
364 | ]
365 | },
366 | {
367 | "cell_type": "code",
368 | "execution_count": 26,
369 | "id": "b04ed73b-93cb-4a1a-9ea6-0219f190ab46",
370 | "metadata": {},
371 | "outputs": [
372 | {
373 | "name": "stdout",
374 | "output_type": "stream",
375 | "text": [
376 | "106.0\n",
377 | "150.0\n"
378 | ]
379 | }
380 | ],
381 | "source": [
382 | "Operacion1 = 100 + 50 / 5 - 4\n",
383 | "Operacion2 = (100 + 50 / (5 - 4))\n",
384 | "print (Operacion1) \n",
385 | "print (Operacion2)"
386 | ]
387 | },
388 | {
389 | "cell_type": "markdown",
390 | "id": "f37f9e0c-31d9-4ca1-ac5b-838c58c4dd6d",
391 | "metadata": {},
392 | "source": [
393 | "Explicacion: Operacion1\n",
394 | "100 + 10 - 4\n",
395 | "106\n",
396 | "Operacion2\n",
397 | "100 + 50 / 1\n",
398 | "100 + 50\n",
399 | "150"
400 | ]
401 | },
402 | {
403 | "cell_type": "markdown",
404 | "id": "bff1c9b8-bb43-4738-9df2-4a1e53d05266",
405 | "metadata": {},
406 | "source": [
407 | "Operadores de Asignacion: Asignar valores a una variable"
408 | ]
409 | },
410 | {
411 | "cell_type": "code",
412 | "execution_count": 151,
413 | "id": "6a726a7d-aa66-4a5e-87c3-a12ef0aaed67",
414 | "metadata": {},
415 | "outputs": [
416 | {
417 | "name": "stdout",
418 | "output_type": "stream",
419 | "text": [
420 | "10\n",
421 | "numero\n",
422 | "numero_2\n",
423 | "\n"
424 | ]
425 | }
426 | ],
427 | "source": [
428 | "numero = 10\n",
429 | "print(numero)\n",
430 | "print(\"numero\")\n",
431 | "print('numero_2')\n",
432 | "print(type(numero))"
433 | ]
434 | },
435 | {
436 | "cell_type": "markdown",
437 | "id": "8c807f24-6746-4fce-afed-d1492a96300c",
438 | "metadata": {},
439 | "source": [
440 | "Asignacion ( = )"
441 | ]
442 | },
443 | {
444 | "cell_type": "code",
445 | "execution_count": 10,
446 | "id": "0b0c02d5-cb93-4363-a64f-801318372383",
447 | "metadata": {},
448 | "outputs": [],
449 | "source": [
450 | "comunidad = \"Data Engineering Latam\"\n",
451 | "comunidad_abr = 'DEL'\n",
452 | "numero = 100 "
453 | ]
454 | },
455 | {
456 | "cell_type": "code",
457 | "execution_count": 61,
458 | "id": "245b11a5-f449-4299-9c7c-bcc1b3300836",
459 | "metadata": {},
460 | "outputs": [
461 | {
462 | "name": "stdout",
463 | "output_type": "stream",
464 | "text": [
465 | "Data Engineering Latam\n",
466 | "DEL\n",
467 | "100\n"
468 | ]
469 | }
470 | ],
471 | "source": [
472 | "print (comunidad)\n",
473 | "print (comunidad_abr)\n",
474 | "print (numero)"
475 | ]
476 | },
477 | {
478 | "cell_type": "code",
479 | "execution_count": 55,
480 | "id": "804d5da4-ac96-4f0b-b5d7-ce13faf5ca47",
481 | "metadata": {},
482 | "outputs": [
483 | {
484 | "name": "stdout",
485 | "output_type": "stream",
486 | "text": [
487 | "150\n"
488 | ]
489 | }
490 | ],
491 | "source": [
492 | "suma = numero + 50\n",
493 | "print(suma) "
494 | ]
495 | },
496 | {
497 | "cell_type": "markdown",
498 | "id": "91c52565-c96e-4abb-8200-704428637714",
499 | "metadata": {},
500 | "source": [
501 | "Suma en Asignacion (+=)"
502 | ]
503 | },
504 | {
505 | "cell_type": "code",
506 | "execution_count": 11,
507 | "id": "bd88e253-a05e-4270-8456-cde9d03e5704",
508 | "metadata": {},
509 | "outputs": [
510 | {
511 | "name": "stdout",
512 | "output_type": "stream",
513 | "text": [
514 | "150\n"
515 | ]
516 | }
517 | ],
518 | "source": [
519 | "#numero = numero + 50\n",
520 | "numero += 50\n",
521 | "print(numero)"
522 | ]
523 | },
524 | {
525 | "cell_type": "markdown",
526 | "id": "b28f1201-212d-47a0-b29a-4a8618cab4d6",
527 | "metadata": {},
528 | "source": [
529 | "Resta en Asignacion (-=)"
530 | ]
531 | },
532 | {
533 | "cell_type": "code",
534 | "execution_count": 86,
535 | "id": "32f0fac2-f263-47e4-b08a-fa274b9ee9fd",
536 | "metadata": {},
537 | "outputs": [
538 | {
539 | "name": "stdout",
540 | "output_type": "stream",
541 | "text": [
542 | "70\n"
543 | ]
544 | }
545 | ],
546 | "source": [
547 | "numero_2 = 100\n",
548 | "numero_2 -=30\n",
549 | "print(numero_2)"
550 | ]
551 | },
552 | {
553 | "cell_type": "markdown",
554 | "id": "fd396f26-98b2-4ce4-bf6f-be3cd57bf8e2",
555 | "metadata": {},
556 | "source": [
557 | "Multiplicacion en Asignacion (*=)"
558 | ]
559 | },
560 | {
561 | "cell_type": "code",
562 | "execution_count": 88,
563 | "id": "3c1bb4a6-47f0-4f9f-b24c-0738d1855323",
564 | "metadata": {},
565 | "outputs": [
566 | {
567 | "name": "stdout",
568 | "output_type": "stream",
569 | "text": [
570 | "500\n"
571 | ]
572 | }
573 | ],
574 | "source": [
575 | "numero_3 = 100 \n",
576 | "numero_3 *= 5\n",
577 | "print(numero_3)"
578 | ]
579 | },
580 | {
581 | "cell_type": "markdown",
582 | "id": "3677a129-bded-4329-aa5e-ecfdd8a3c20e",
583 | "metadata": {},
584 | "source": [
585 | "Division en Asignacion (/=)"
586 | ]
587 | },
588 | {
589 | "cell_type": "code",
590 | "execution_count": 89,
591 | "id": "cafa692f-30b9-457a-a500-fe2799d9c09d",
592 | "metadata": {},
593 | "outputs": [
594 | {
595 | "name": "stdout",
596 | "output_type": "stream",
597 | "text": [
598 | "25.0\n"
599 | ]
600 | }
601 | ],
602 | "source": [
603 | "numero_4 = 100 \n",
604 | "numero_4 /= 4\n",
605 | "print(numero_4)"
606 | ]
607 | },
608 | {
609 | "cell_type": "markdown",
610 | "id": "f1eb5abd-8600-4cd9-8a19-e3f5a0e5ad6e",
611 | "metadata": {},
612 | "source": [
613 | "Operadores de comparacion"
614 | ]
615 | },
616 | {
617 | "cell_type": "code",
618 | "execution_count": 91,
619 | "id": "43cadb43-019c-459c-8ee4-58fd3b083c4b",
620 | "metadata": {},
621 | "outputs": [],
622 | "source": [
623 | "numero_1 = 100\n",
624 | "numero_2 = 20\n",
625 | "numero_3 = 5"
626 | ]
627 | },
628 | {
629 | "cell_type": "markdown",
630 | "id": "60da74c8-d7b6-4110-bb3b-49dab05b2117",
631 | "metadata": {},
632 | "source": [
633 | "Mayor que (>)"
634 | ]
635 | },
636 | {
637 | "cell_type": "code",
638 | "execution_count": 93,
639 | "id": "d0c18ffb-324f-41cb-beb5-78fa33d4099d",
640 | "metadata": {},
641 | "outputs": [
642 | {
643 | "name": "stdout",
644 | "output_type": "stream",
645 | "text": [
646 | "True\n",
647 | "False\n"
648 | ]
649 | }
650 | ],
651 | "source": [
652 | "print(numero_1 > numero_2 ) # 100 > 50\n",
653 | "print(numero_1 < numero_2 ) # 100 < 50 "
654 | ]
655 | },
656 | {
657 | "cell_type": "markdown",
658 | "id": "db9ea456-a8de-44e3-ac61-78579584e686",
659 | "metadata": {},
660 | "source": [
661 | "Mayor o igual que (>=)"
662 | ]
663 | },
664 | {
665 | "cell_type": "code",
666 | "execution_count": 106,
667 | "id": "ecad0461-ccd3-42d4-97c5-9ede35c436f6",
668 | "metadata": {},
669 | "outputs": [
670 | {
671 | "name": "stdout",
672 | "output_type": "stream",
673 | "text": [
674 | "True\n",
675 | "False\n",
676 | "True\n"
677 | ]
678 | }
679 | ],
680 | "source": [
681 | "print(numero_1 >= numero_2) # 100 >= 50\n",
682 | "print(numero_1 <= numero_2) # 100 <= 50 \n",
683 | "print(numero_1 >= (numero_2 +50)) # 100 >= 50 + 50"
684 | ]
685 | },
686 | {
687 | "cell_type": "markdown",
688 | "id": "a5e15736-08d8-4982-ab40-e9e5ee69c24b",
689 | "metadata": {},
690 | "source": [
691 | "Igualdad es (==)"
692 | ]
693 | },
694 | {
695 | "cell_type": "markdown",
696 | "id": "1cb1a50f-7cd3-409f-99f9-577272289d82",
697 | "metadata": {},
698 | "source": [
699 | "Asignacion (=)"
700 | ]
701 | },
702 | {
703 | "cell_type": "markdown",
704 | "id": "be224b89-eb83-4de6-ad45-01ad8773f23c",
705 | "metadata": {},
706 | "source": [
707 | "Diferente (!=)"
708 | ]
709 | },
710 | {
711 | "cell_type": "code",
712 | "execution_count": 103,
713 | "id": "957514ec-73e5-4f11-85f8-51c5737f5ff7",
714 | "metadata": {},
715 | "outputs": [
716 | {
717 | "name": "stdout",
718 | "output_type": "stream",
719 | "text": [
720 | "False\n",
721 | "True\n"
722 | ]
723 | }
724 | ],
725 | "source": [
726 | "print(numero_1 == numero_2 ) # 100 = 20\n",
727 | "print(numero_1 == (numero_2 + 80 ) ) # 100 = 20 + 80 "
728 | ]
729 | },
730 | {
731 | "cell_type": "code",
732 | "execution_count": 104,
733 | "id": "9b43844c-dc46-4f60-9df1-86dc43fd2fe6",
734 | "metadata": {},
735 | "outputs": [],
736 | "source": [
737 | "operacion_c1 = numero_1 == 100"
738 | ]
739 | },
740 | {
741 | "cell_type": "code",
742 | "execution_count": 105,
743 | "id": "3b28d449-9a95-4b5f-985c-1a079a7f1066",
744 | "metadata": {},
745 | "outputs": [
746 | {
747 | "name": "stdout",
748 | "output_type": "stream",
749 | "text": [
750 | "True\n"
751 | ]
752 | }
753 | ],
754 | "source": [
755 | "print (operacion_c1)"
756 | ]
757 | },
758 | {
759 | "cell_type": "markdown",
760 | "id": "feead856-059f-4606-bbf0-f04016806ef7",
761 | "metadata": {},
762 | "source": [
763 | "Ejercicio: Hallar divisores de 100"
764 | ]
765 | },
766 | {
767 | "cell_type": "markdown",
768 | "id": "040bd028-9725-4bf0-b403-669ab9db7988",
769 | "metadata": {},
770 | "source": [
771 | "N = 100,\n",
772 | "n = aleatorio entero"
773 | ]
774 | },
775 | {
776 | "cell_type": "markdown",
777 | "id": "db9f924c-c506-4e1d-be29-e38c5d81ddf6",
778 | "metadata": {},
779 | "source": [
780 | "Seran divisores de N, si al dividir N por n el residuo es cero. "
781 | ]
782 | },
783 | {
784 | "cell_type": "code",
785 | "execution_count": 157,
786 | "id": "b8245000-8280-42b6-9433-b09827c9b4b7",
787 | "metadata": {},
788 | "outputs": [
789 | {
790 | "name": "stdout",
791 | "output_type": "stream",
792 | "text": [
793 | "False\n",
794 | "El n es: 73\n",
795 | "El n es: 73\n"
796 | ]
797 | }
798 | ],
799 | "source": [
800 | "import random\n",
801 | "N = 100\n",
802 | "n = random.randint(1,100)\n",
803 | "operacion_DEL = N % n \n",
804 | "resultado = ( operacion_DEL == 0 )\n",
805 | "print(resultado)\n",
806 | "print(f\"El n es: {n}\")\n",
807 | "print(\"El n es:\", n)"
808 | ]
809 | },
810 | {
811 | "cell_type": "markdown",
812 | "id": "1956ca4d-ee53-4bfa-abd4-ce3808efb5a3",
813 | "metadata": {},
814 | "source": [
815 | "Tipado Dinamico "
816 | ]
817 | },
818 | {
819 | "cell_type": "code",
820 | "execution_count": 158,
821 | "id": "152fc93f-34b8-4674-80fe-14e6f9690c5a",
822 | "metadata": {},
823 | "outputs": [
824 | {
825 | "name": "stdout",
826 | "output_type": "stream",
827 | "text": [
828 | "500\n"
829 | ]
830 | }
831 | ],
832 | "source": [
833 | "valor_dinamico = 500 \n",
834 | "print( valor_dinamico )"
835 | ]
836 | },
837 | {
838 | "cell_type": "code",
839 | "execution_count": 159,
840 | "id": "2667fcbb-fd98-431e-8e83-b36e205d714e",
841 | "metadata": {},
842 | "outputs": [
843 | {
844 | "name": "stdout",
845 | "output_type": "stream",
846 | "text": [
847 | "Python cambia el tipo de dato por el tipado dinamico\n"
848 | ]
849 | }
850 | ],
851 | "source": [
852 | "valor_dinamico = \"Python cambia el tipo de dato por el tipado dinamico\"\n",
853 | "print( valor_dinamico )"
854 | ]
855 | },
856 | {
857 | "cell_type": "markdown",
858 | "id": "97a9fea9-dd2e-42a5-b317-ef74440d6d89",
859 | "metadata": {},
860 | "source": [
861 | "Operadores Logicos"
862 | ]
863 | },
864 | {
865 | "cell_type": "markdown",
866 | "id": "1bb086cc-d020-4e84-b10b-8298344901f3",
867 | "metadata": {},
868 | "source": [
869 | "Ejercicio\n",
870 | "\n",
871 | "a = 2, b = 3, c = 4, d = 5"
872 | ]
873 | },
874 | {
875 | "cell_type": "markdown",
876 | "id": "57502fc3-6513-45a9-8952-133f0b7dfe4e",
877 | "metadata": {},
878 | "source": [
879 | "((a*c) > (b + d)) or ((d – a ) > (c – b )) and (a ==b) or (c (b + d)) or ((d - a ) > (c - b )) and (a == b) or not(c By: [Paula Abad](https://www.linkedin.com/in/paulabadt/)\n",
35 | "\n"
36 | ],
37 | "metadata": {
38 | "id": "HhyEmAixYgWj"
39 | }
40 | },
41 | {
42 | "cell_type": "markdown",
43 | "source": [
44 | "# **Estructuras de Control**\n",
45 | "\n",
46 | "Definamos primero que es un Algoritmo: es un conjunto de pasos (tareas / procedimientos / instrucciones) organizados y ejecutados lógica y sintácticamente, que le indican al computador que debe hacer para encontrar la solución de un problema.\n",
47 | "\n",
48 | "\n"
49 | ],
50 | "metadata": {
51 | "id": "WU-qo5cvTfWz"
52 | }
53 | },
54 | {
55 | "cell_type": "code",
56 | "source": [
57 | "poner_agua_hervir() \n",
58 | "cortar_pollo() \n",
59 | "freir_pollo() \n",
60 | "vertir_taza_de_arroz() \n",
61 | "mezclar_pollo_arroz() "
62 | ],
63 | "metadata": {
64 | "id": "oMsw8JotfulZ"
65 | },
66 | "execution_count": null,
67 | "outputs": []
68 | },
69 | {
70 | "cell_type": "markdown",
71 | "source": [
72 | "**¿Qué son las Estructuras de Control?**\n",
73 | "\n",
74 | "Es un bloque de código que permite modificar el flujo de la ejecución de un conjunto de instrucciones. \n",
75 | "\n",
76 | "Tipos de Estructuras de Control:\n",
77 | "\n",
78 | "\n",
79 | "\n",
80 | "* Condicionales\n",
81 | "* Iterativas"
82 | ],
83 | "metadata": {
84 | "id": "WFIw-OVHfwiT"
85 | }
86 | },
87 | {
88 | "cell_type": "markdown",
89 | "source": [
90 | "# **Condicionales**\n",
91 | "\n",
92 | "Son aquellas que permiten evaluar si una o más condiciones se cumplen, para decir qué acción ejecutar. La evaluación de condiciones, solo puede arrojar 1 de 2 resultados: verdadero o falso (True o False).\n",
93 | "\n"
94 | ],
95 | "metadata": {
96 | "id": "H8R9iJekyNMe"
97 | }
98 | },
99 | {
100 | "cell_type": "markdown",
101 | "source": [
102 | "Las estructuras de control de flujo condicionales, se definen mediante el uso de tres palabras claves reservadas, del lenguaje: **if (si), elif (sino, si) y else (sino).**"
103 | ],
104 | "metadata": {
105 | "id": "HpdiZAwPLhqn"
106 | }
107 | },
108 | {
109 | "cell_type": "markdown",
110 | "source": [
111 | "**Sintaxis If-Else**"
112 | ],
113 | "metadata": {
114 | "id": "7t1AJvYAit6r"
115 | }
116 | },
117 | {
118 | "cell_type": "code",
119 | "source": [
120 | "if condicion:\n",
121 | " ejecutar sentencia\n",
122 | "else:\n",
123 | " ejecutar sentencia"
124 | ],
125 | "metadata": {
126 | "id": "7Vb55iT2i1Ty"
127 | },
128 | "execution_count": null,
129 | "outputs": []
130 | },
131 | {
132 | "cell_type": "markdown",
133 | "source": [
134 | "Ejercicio 1:\n",
135 | "\n",
136 | "Leer un numero entero y determinar si es negativo"
137 | ],
138 | "metadata": {
139 | "id": "yedgHmR6KQ5u"
140 | }
141 | },
142 | {
143 | "cell_type": "code",
144 | "source": [
145 | "numero = int (input(\"Ingrese un numero: \"))\n",
146 | "\n",
147 | "if numero < 0:\n",
148 | " print(\"El numero ingresado es Negativo\")\n",
149 | "else:\n",
150 | " print(\"El numero ingresado es Positivo\")"
151 | ],
152 | "metadata": {
153 | "id": "s6wDoFuFKboA",
154 | "colab": {
155 | "base_uri": "https://localhost:8080/"
156 | },
157 | "outputId": "f1ab13d2-6cf5-4b3e-9fa8-7a0fcb43eff6"
158 | },
159 | "execution_count": 34,
160 | "outputs": [
161 | {
162 | "output_type": "stream",
163 | "name": "stdout",
164 | "text": [
165 | "Ingrese un numero: 10\n",
166 | "El numero ingresado es Positivo\n"
167 | ]
168 | }
169 | ]
170 | },
171 | {
172 | "cell_type": "markdown",
173 | "source": [
174 | "Ejercicio 2:\n",
175 | "\n",
176 | "Leer un número entero y determinar si tiene 3 digitos"
177 | ],
178 | "metadata": {
179 | "id": "2juCslcaM0HP"
180 | }
181 | },
182 | {
183 | "cell_type": "code",
184 | "source": [
185 | "numero = int (input(\"Ingrese un numero:\"))\n",
186 | "\n",
187 | "if numero > 99 and numero < 1000:\n",
188 | " print(\"El numero ingresado tiene 3 digitos\")\n",
189 | "else:\n",
190 | " print(\"El numero ingresado NO tiene 3 digitos\")"
191 | ],
192 | "metadata": {
193 | "id": "ZnWbBcyqNB4g",
194 | "colab": {
195 | "base_uri": "https://localhost:8080/"
196 | },
197 | "outputId": "9a93fd51-e338-4391-d9fa-7928d03cd9ae"
198 | },
199 | "execution_count": 36,
200 | "outputs": [
201 | {
202 | "output_type": "stream",
203 | "name": "stdout",
204 | "text": [
205 | "Ingrese un numero:45\n",
206 | "El numero ingresado NO tiene 3 digitos\n"
207 | ]
208 | }
209 | ]
210 | },
211 | {
212 | "cell_type": "markdown",
213 | "source": [
214 | "Ejercicio 3:\n",
215 | "\n",
216 | "Leer un número entero de dos digitos y determinar a cuanto es igual la suma de sus digitos."
217 | ],
218 | "metadata": {
219 | "id": "pA34hxCbWPG7"
220 | }
221 | },
222 | {
223 | "cell_type": "code",
224 | "source": [
225 | "numero = int (input(\"Ingrese un numero de dos digitos: \"))\n",
226 | "\n",
227 | "\n",
228 | "if numero > 9 and numero < 100:\n",
229 | " i = numero % 10\n",
230 | " numero //= 10\n",
231 | " suma = i + numero\n",
232 | " print(\"La suma de sus digitos es:\",suma)\n",
233 | "else:\n",
234 | " print(\"El numero no es de dos digitos\")"
235 | ],
236 | "metadata": {
237 | "id": "ByKaIBB1WTnv",
238 | "colab": {
239 | "base_uri": "https://localhost:8080/"
240 | },
241 | "outputId": "0ba86071-ddfb-445b-f7fd-e7122af32676"
242 | },
243 | "execution_count": 2,
244 | "outputs": [
245 | {
246 | "output_type": "stream",
247 | "name": "stdout",
248 | "text": [
249 | "Ingrese un numero de dos digitos: 5\n",
250 | "El numero no es de dos digitos\n"
251 | ]
252 | }
253 | ]
254 | },
255 | {
256 | "cell_type": "markdown",
257 | "source": [
258 | "# **Condicionales Anidadas**\n",
259 | "\n",
260 | "Los condicionales, permiten escribir código en su interior y en realidad, nada de impide incluso al interior de un condicional, poner otros (u otros). A eso se le llama condiciones anidados, pues una estructura condicional dentro de otra. De hecho, puedes anidar cuantos condicionales requieras, aunque no se recomienda más de dos o tres niveles."
261 | ],
262 | "metadata": {
263 | "id": "tl5xLGO3NFAT"
264 | }
265 | },
266 | {
267 | "cell_type": "markdown",
268 | "source": [
269 | "**Sintaxis:**"
270 | ],
271 | "metadata": {
272 | "id": "SSPpfdKcRnPF"
273 | }
274 | },
275 | {
276 | "cell_type": "code",
277 | "source": [
278 | "if condición:\n",
279 | " if condición:\n",
280 | " ejecutar sentencia\n",
281 | " if condición:\n",
282 | " ejecutar sentencia\n",
283 | " else:\n",
284 | " ejecutar sentencia\n",
285 | "else:\n",
286 | " ejecutar sentencia"
287 | ],
288 | "metadata": {
289 | "id": "Y8eNUEcURp42"
290 | },
291 | "execution_count": null,
292 | "outputs": []
293 | },
294 | {
295 | "cell_type": "markdown",
296 | "source": [
297 | "Ejemplo: Definir si el número ingresado es par y si es mayor que 10."
298 | ],
299 | "metadata": {
300 | "id": "XPmMJCGOSGyR"
301 | }
302 | },
303 | {
304 | "cell_type": "code",
305 | "source": [
306 | "i = 34\n",
307 | "\n",
308 | "if i % 2 == 0: # así es como creas un comentario y ahora comprueba número par.\n",
309 | " if i > 10:\n",
310 | " print(\"Este número es par y es mayor que 10\")\n",
311 | " else:\n",
312 | " print(\"Este número es par, pero no mayor a 10\")\n",
313 | "else:\n",
314 | " print (\"El número no es par.\")"
315 | ],
316 | "metadata": {
317 | "colab": {
318 | "base_uri": "https://localhost:8080/"
319 | },
320 | "id": "EqDNUVMASeyE",
321 | "outputId": "822b8a10-21d6-4d57-e52f-32348ca8cd57"
322 | },
323 | "execution_count": 3,
324 | "outputs": [
325 | {
326 | "output_type": "stream",
327 | "name": "stdout",
328 | "text": [
329 | "Este número es par y es mayor que 10\n"
330 | ]
331 | }
332 | ]
333 | },
334 | {
335 | "cell_type": "markdown",
336 | "source": [
337 | "# **Sentencia elif**\n",
338 | "\n",
339 | "Se pueden verificar varias condiciones al incluir una o más verificaciones elif después de su declaración if inicial. Teniendo en cuenta que solo se ejecutará una condición."
340 | ],
341 | "metadata": {
342 | "id": "niATMkGT_Ds7"
343 | }
344 | },
345 | {
346 | "cell_type": "markdown",
347 | "source": [
348 | "**Sintaxis:**"
349 | ],
350 | "metadata": {
351 | "id": "o7ZigAWeKMAo"
352 | }
353 | },
354 | {
355 | "cell_type": "code",
356 | "source": [
357 | "if condición 1:\n",
358 | " ejecutar sentencia\n",
359 | "elif condición 2:\n",
360 | " ejecutar sentencia\n",
361 | "elif condicion 3:\n",
362 | " ejecutar sentencia\n",
363 | "else:\n",
364 | " ejecutar sentencia"
365 | ],
366 | "metadata": {
367 | "id": "EzanZ4EWKP8x"
368 | },
369 | "execution_count": null,
370 | "outputs": []
371 | },
372 | {
373 | "cell_type": "markdown",
374 | "source": [
375 | "Ejemplo:"
376 | ],
377 | "metadata": {
378 | "id": "PrfrGSGtKsfI"
379 | }
380 | },
381 | {
382 | "cell_type": "code",
383 | "source": [
384 | "i = 7\n",
385 | "\n",
386 | "if i > 8:\n",
387 | " print(\"¡No voy a imprimir!\") #esta sentencia no se ejecuta\n",
388 | "elif i > 5:\n",
389 | " print(\"¡Yo lo haré!\") #esta sentencia se ejecuta\n",
390 | "elif i > 6:\n",
391 | " print(\"¡Tampoco voy a imprimir!\") #esta sentencia no se ejecuta\n",
392 | "else:\n",
393 | " print(\"¡Yo tampoco!\") #esta sentencia no se ejecuta"
394 | ],
395 | "metadata": {
396 | "id": "HY0kFfmjCkAI"
397 | },
398 | "execution_count": null,
399 | "outputs": []
400 | },
401 | {
402 | "cell_type": "markdown",
403 | "source": [
404 | "# **Ejercicios para prácticar**\n",
405 | "\n",
406 | "\n",
407 | "\n",
408 | "> Leer un número entero de dos digitos y determinar si ambos dígitos son pares.\n",
409 | "\n"
410 | ],
411 | "metadata": {
412 | "id": "_MrfjAVaXd2n"
413 | }
414 | },
415 | {
416 | "cell_type": "markdown",
417 | "source": [
418 | "> Leer un número entero y determinar si es múltiplo de 7.\n",
419 | "\n"
420 | ],
421 | "metadata": {
422 | "id": "sJ8q7Gy1hiG3"
423 | }
424 | },
425 | {
426 | "cell_type": "markdown",
427 | "source": [
428 | "\n",
429 | "\n",
430 | "> Leer un número entero y determinar si es igual a 10.\n",
431 | "\n"
432 | ],
433 | "metadata": {
434 | "id": "j9jhfRu2hv55"
435 | }
436 | },
437 | {
438 | "cell_type": "markdown",
439 | "source": [
440 | "> Leer un número entero de 4 digitos y determinar si tiene más dígitos pares o impares.\n",
441 | "\n"
442 | ],
443 | "metadata": {
444 | "id": "_SxckT7-h3I1"
445 | }
446 | },
447 | {
448 | "cell_type": "markdown",
449 | "source": [
450 | "# **Iterativas**"
451 | ],
452 | "metadata": {
453 | "id": "hw_VSzryjK5Y"
454 | }
455 | },
456 | {
457 | "cell_type": "markdown",
458 | "source": [
459 | "Llamadas cíclicas o bucles, facilitan la repetición de un bloque de instrucciones, un número determinado de veces o mientras se cumpla una condición.\n",
460 | "\n",
461 | "Python incluye únicamente dos tipos de bucle: **while y for**."
462 | ],
463 | "metadata": {
464 | "id": "M-Cebamnjnfs"
465 | }
466 | },
467 | {
468 | "cell_type": "markdown",
469 | "source": [
470 | "**Iterables e iteradores**\n",
471 | "\n",
472 | "Los **iterables** son aquellos objetos que como su nombre indica pueden ser iterados, lo que dicho de otra forma es, que puedan ser indexados. Si piensas en un array (o una list en Python), podemos indexarlo con lista[1] por ejemplo, por lo que sería un iterable.\n",
473 | "\n",
474 | "\n",
475 | "\n",
476 | "```\n",
477 | "lista = [1, 2, 3, 4]\n",
478 | "cadena = \"Python\"\n",
479 | "```\n",
480 | "\n",
481 | "\n",
482 | "Los **iteradores** son objetos que hacen referencia a un elemento, y que tienen un método next que permite hacer referencia al siguiente.\n",
483 | "\n"
484 | ],
485 | "metadata": {
486 | "id": "HWKntQDwhgBZ"
487 | }
488 | },
489 | {
490 | "cell_type": "markdown",
491 | "source": [
492 | "# **For:**\n",
493 | "\n",
494 | "Establece la variable iteradora en cada valor del iterable (una lista, arreglo, range o cadena proporcionada) y repite el código en el cuerpo del bucle for para cada valor de la variable iteradora."
495 | ],
496 | "metadata": {
497 | "id": "KMpfyngohk3Z"
498 | }
499 | },
500 | {
501 | "cell_type": "markdown",
502 | "source": [
503 | "**Sintaxis:**"
504 | ],
505 | "metadata": {
506 | "id": "m02gvEz9kgG2"
507 | }
508 | },
509 | {
510 | "cell_type": "code",
511 | "source": [
512 | "for variable in elemento iterable (lista, cadena, range, etc.):\n",
513 | " cuerpo del bucle"
514 | ],
515 | "metadata": {
516 | "id": "lV1hVI1ukje5"
517 | },
518 | "execution_count": null,
519 | "outputs": []
520 | },
521 | {
522 | "cell_type": "markdown",
523 | "source": [
524 | "Ejercicio 1: Leer un número entero y mostrar todos los enteros comprendidos entre 1 y el numero leido."
525 | ],
526 | "metadata": {
527 | "id": "0Q0voVABksJ2"
528 | }
529 | },
530 | {
531 | "cell_type": "code",
532 | "source": [
533 | "j = int(input('Ingrese un numero entero:'))\n",
534 | "\n",
535 | "for i in range(1, j):\n",
536 | " print (i)"
537 | ],
538 | "metadata": {
539 | "id": "Pk6n9G7bmHfS"
540 | },
541 | "execution_count": null,
542 | "outputs": []
543 | },
544 | {
545 | "cell_type": "markdown",
546 | "source": [
547 | "Ejercicio 2: Leer un entero y mostrar todos los multiplos de 5 comprendidos entre 1 y el numero leido."
548 | ],
549 | "metadata": {
550 | "id": "llz5weo2tnHf"
551 | }
552 | },
553 | {
554 | "cell_type": "code",
555 | "source": [
556 | "numero = int (input(\"Ingrese un numero:\"))\n",
557 | "\n",
558 | "for i in range(1,numero):\n",
559 | " if i % 5 == 0:\n",
560 | " print(\"Los multiplos de 5 del numero ingresado son:\",i)"
561 | ],
562 | "metadata": {
563 | "id": "vW315rXltraO"
564 | },
565 | "execution_count": null,
566 | "outputs": []
567 | },
568 | {
569 | "cell_type": "markdown",
570 | "source": [
571 | "# **For Anidados**\n",
572 | "\n",
573 | "Es un bucle que se encuentra incluido en el bloque de sentencias de otro bloque. Los bucles pueden tener cualquier nivel de anidamiento (un bucle dentro de otro bucle dentro de un tercero, etc.). Al bucle que se encuentra dentro del otro se le puede denominar bucle interior o bucle interno.\n",
574 | "\n",
575 | "En los bucles anidados es importante utilizar variables de control distintas, para no obtener resultados inesperados."
576 | ],
577 | "metadata": {
578 | "id": "c68ZikHc2sh7"
579 | }
580 | },
581 | {
582 | "cell_type": "markdown",
583 | "source": [
584 | "Ejemplo: Iterar lista"
585 | ],
586 | "metadata": {
587 | "id": "0o11vFB53i-4"
588 | }
589 | },
590 | {
591 | "cell_type": "code",
592 | "source": [
593 | "lista = [[56, 34, 1],\n",
594 | " [12, 4, 5],\n",
595 | " [9, 4, 3]]\n",
596 | "\n",
597 | "for i in lista: # i son las filas\n",
598 | " for j in i: # j son las columnas\n",
599 | " print(j)"
600 | ],
601 | "metadata": {
602 | "id": "2K5tnpGh3k0B"
603 | },
604 | "execution_count": null,
605 | "outputs": []
606 | },
607 | {
608 | "cell_type": "markdown",
609 | "source": [
610 | "# **Ejercicios para prácticar**\n",
611 | "\n",
612 | "\n",
613 | "\n",
614 | "> Leer un número entero de dos digitos y determinar a cuanto es igual la suma de todos los enteros comprendidos entre 1 y el numero leido\n",
615 | "\n"
616 | ],
617 | "metadata": {
618 | "id": "1fpDRtYN7-cX"
619 | }
620 | },
621 | {
622 | "cell_type": "markdown",
623 | "source": [
624 | "\n",
625 | "\n",
626 | "> Generar los números del 1 al 10 utilizando un cilo que vaya de 10 a 1\n",
627 | "\n"
628 | ],
629 | "metadata": {
630 | "id": "SJW1zhV59g34"
631 | }
632 | },
633 | {
634 | "cell_type": "markdown",
635 | "source": [
636 | "\n",
637 | "\n",
638 | "> Leer un número entero y mostrar en pantalla su tabla de multiplicar\n",
639 | "\n"
640 | ],
641 | "metadata": {
642 | "id": "21PQ6AXd-BU2"
643 | }
644 | },
645 | {
646 | "cell_type": "markdown",
647 | "source": [
648 | "\n",
649 | "> Mostrar en pantalla todos los números terminados en 6 comprendidos entre 25 y 205.\n",
650 | "\n"
651 | ],
652 | "metadata": {
653 | "id": "fEHce9hq-HQI"
654 | }
655 | },
656 | {
657 | "cell_type": "markdown",
658 | "source": [
659 | "# **While:**\n",
660 | "\n",
661 | "Permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición (es decir, mientras la condición tenga el valor True)."
662 | ],
663 | "metadata": {
664 | "id": "2H3UVOd--v-q"
665 | }
666 | },
667 | {
668 | "cell_type": "markdown",
669 | "source": [
670 | "**Sintaxis:**"
671 | ],
672 | "metadata": {
673 | "id": "05E_bIK4_IEi"
674 | }
675 | },
676 | {
677 | "cell_type": "code",
678 | "source": [
679 | "while condicion:\n",
680 | " cuerpo del bucle"
681 | ],
682 | "metadata": {
683 | "id": "YfQgR8eN_Kg0"
684 | },
685 | "execution_count": null,
686 | "outputs": []
687 | },
688 | {
689 | "cell_type": "markdown",
690 | "source": [
691 | "La ejecución de esta estructura de control while es la siguiente:\n",
692 | "\n",
693 | "Python evalúa la condición:\n",
694 | "Si el resultado es True se ejecuta el cuerpo del bucle. Una vez ejecutado el cuerpo del bucle, se repite el proceso (se evalúa de nuevo la condición y, si es cierta, se ejecuta de nuevo el cuerpo del bucle) una y otra vez mientras la condición sea cierta.\n",
695 | "Si el resultado es False, el cuerpo del bucle no se ejecuta y continúa la ejecución del resto del programa.\n",
696 | "\n",
697 | "La variable o las variables que aparezcan en la condición se suelen llamar variables de control. Las variables de control deben definirse antes del bucle while y modificarse en el bucle while."
698 | ],
699 | "metadata": {
700 | "id": "ba-o7cHC_O6n"
701 | }
702 | },
703 | {
704 | "cell_type": "markdown",
705 | "source": [
706 | "Ejercicio 1: muestre en pantalla los números del 1 al 10"
707 | ],
708 | "metadata": {
709 | "id": "1NZjKz1eAjAX"
710 | }
711 | },
712 | {
713 | "cell_type": "code",
714 | "source": [
715 | "i = 1 # variables de control\n",
716 | "while i <= 10:\n",
717 | " print(i) \n",
718 | " i += 1 \n",
719 | "print(\"Programa terminado\")"
720 | ],
721 | "metadata": {
722 | "id": "lp2WdxMJAtK9"
723 | },
724 | "execution_count": null,
725 | "outputs": []
726 | },
727 | {
728 | "cell_type": "markdown",
729 | "source": [
730 | "Ejercicio 2: Desarrollar un programa que permita la carga de 3 valores por teclado y nos muestre posteriormente la suma de los valores ingresados y su promedio."
731 | ],
732 | "metadata": {
733 | "id": "vj12-kwIER18"
734 | }
735 | },
736 | {
737 | "cell_type": "code",
738 | "source": [
739 | "i = 1\n",
740 | "suma = 0\n",
741 | "while i <= 3:\n",
742 | " valor = int(input(\"Ingrese un valor:\"))\n",
743 | " suma = suma + valor\n",
744 | " i += 1\n",
745 | "promedio = suma / 3\n",
746 | "\n",
747 | "print(\"La suma de los 3 valores es \",suma)\n",
748 | "\n",
749 | "print(\"El promedio es \",promedio)"
750 | ],
751 | "metadata": {
752 | "id": "PgsoN9KeElJM"
753 | },
754 | "execution_count": null,
755 | "outputs": []
756 | },
757 | {
758 | "cell_type": "markdown",
759 | "source": [
760 | "# **Ejercicios de práctica:**\n",
761 | "\n",
762 | "\n",
763 | "\n",
764 | "> Un programa que muestre en pantalla la tabla del 3.\n",
765 | "\n"
766 | ],
767 | "metadata": {
768 | "id": "RIIYD4j5NUEr"
769 | }
770 | },
771 | {
772 | "cell_type": "markdown",
773 | "source": [
774 | "*Muchas gracias*\n",
775 | "\n",
776 | "**[Data Engineering Latam ](https://linkedin.com/company/data-engineering-latam)** la Comunidad más grande y chevere de todas."
777 | ],
778 | "metadata": {
779 | "id": "jukA_xP3Vixl"
780 | }
781 | }
782 | ]
783 | }
--------------------------------------------------------------------------------
/Worshop Python # 8: Numpy/Ejercicio_python.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": []
7 | },
8 | "kernelspec": {
9 | "name": "python3",
10 | "display_name": "Python 3"
11 | },
12 | "language_info": {
13 | "name": "python"
14 | }
15 | },
16 | "cells": [
17 | {
18 | "cell_type": "markdown",
19 | "source": [
20 | "# **Puntos por goles en campeonato**\n",
21 | "\n",
22 | "\n"
23 | ],
24 | "metadata": {
25 | "id": "58YITPpzw389"
26 | }
27 | },
28 | {
29 | "cell_type": "markdown",
30 | "source": [
31 | "Cada equipo juega contra todos los demás equipos y los goles anotados en cada encuentro han sido almacenados en una matriz nxn como se indica en la tabla ejemplo:\n"
32 | ],
33 | "metadata": {
34 | "id": "XAMhUNpvxDat"
35 | }
36 | },
37 | {
38 | "cell_type": "markdown",
39 | "source": [
40 | ""
41 | ],
42 | "metadata": {
43 | "id": "tkiWaTplxIEc"
44 | }
45 | },
46 | {
47 | "cell_type": "markdown",
48 | "source": [
49 | "El equipo 1 marco 3 goles al equipo 2,1 gol al equipo 3, etc.\n",
50 | "\n",
51 | "El equipo 2 marco 1 gol al equipo 1,3 goles al equipo 3, etc.\n",
52 | "\n",
53 | "Lea la matriz y determine cuantos puntos tiene cada equipo. Los puntos asignados son: empate 1, triunfo 3 , derrota 0.\n",
54 | "\n",
55 | "Se adjunta la matriz en python para el ejercicio en forma de un arreglo de 5×5:"
56 | ],
57 | "metadata": {
58 | "id": "Jy-xFnBjxqwN"
59 | }
60 | },
61 | {
62 | "cell_type": "code",
63 | "source": [
64 | "import numpy as np"
65 | ],
66 | "metadata": {
67 | "id": "CeU8VYcox_Se"
68 | },
69 | "execution_count": null,
70 | "outputs": []
71 | },
72 | {
73 | "cell_type": "code",
74 | "source": [
75 | "goles = np.array(\n",
76 | " [[0, 3, 1, 2, 1],\n",
77 | " [1, 0, 3, 2, 3],\n",
78 | " [0, 2, 0, 1, 1],\n",
79 | " [1, 0, 2, 0, 1],\n",
80 | " [3, 4, 1, 2, 0]] )\n",
81 | "#indices son los equipos "
82 | ],
83 | "metadata": {
84 | "id": "pyAOlWiYyFhO"
85 | },
86 | "execution_count": null,
87 | "outputs": []
88 | },
89 | {
90 | "cell_type": "code",
91 | "source": [
92 | "tamano = np.shape(goles)#devuelve una tupla con los elementos por eje en este caso los equipos\n",
93 | "n = tamano[0]#tamano en la filas \n",
94 | "m = tamano[1]#tamano en las columnas \n",
95 | "triunfos = np.zeros(shape=(n,m),dtype=int)#se crea un array de ceros del mismo tamano \n",
96 | "ttriunfos = np.zeros(n,dtype=int)#se crea un arreglo de una dimension de la cantidad de equipos "
97 | ],
98 | "metadata": {
99 | "id": "7lbFuZM8ycVe"
100 | },
101 | "execution_count": null,
102 | "outputs": []
103 | },
104 | {
105 | "cell_type": "code",
106 | "source": [
107 | "#calculamos los triunfos\n",
108 | "i = 0\n",
109 | "while not(i>=n):#mientras i no sea igual o mayor al tamano de las filas \n",
110 | " j = 0\n",
111 | " while not(j>=m):#mientras que j no sea igual al tamano de las columnas \n",
112 | " if (goles[i,j] > goles[j,i]):#estamos comparando los partidos y llenando nuestra matriz de 0\n",
113 | " triunfos[i,j] = 1\n",
114 | " triunfos[j,i] = 0\n",
115 | " j = j + 1\n",
116 | " i = i + 1"
117 | ],
118 | "metadata": {
119 | "id": "ixs263ASylM_"
120 | },
121 | "execution_count": null,
122 | "outputs": []
123 | },
124 | {
125 | "cell_type": "code",
126 | "source": [
127 | "#calculamos total de triunfos \n",
128 | "i = 0\n",
129 | "while not(i>=n):#mientras i no sea igual o mayor al tamano de las filas \n",
130 | " j = 0\n",
131 | " while not(j>=m):#mientras que j no sea igual al tamano de las columnas \n",
132 | " ttriunfos[i] = ttriunfos[i] + triunfos[i,j]#calcula el total de triunfos por equipo\n",
133 | " j = j + 1\n",
134 | " i = i + 1"
135 | ],
136 | "metadata": {
137 | "id": "9ldPkXTAy_gf"
138 | },
139 | "execution_count": null,
140 | "outputs": []
141 | },
142 | {
143 | "cell_type": "code",
144 | "source": [
145 | "#calculamos empates\n",
146 | "empates = np.zeros(shape=(n,m),dtype=int)#creamos una matriz de ceros donde llenarermos los empates\n",
147 | "tempates = np.zeros(n,dtype=int)#calculamos un arreglo de una dimension con la cantidad de equipos \n",
148 | "i = 0\n",
149 | "while not(i>=n):#mientras i no sea igual o mayor al tamano de las filas \n",
150 | " j = 0\n",
151 | " while not(j>=m):#mientras que j no sea igual al tamano de las columnas \n",
152 | " if (goles[i,j] == goles[j,i]) and (i!=j):#verificamos en la matriz de goles si en un partido jugado tienen el mismo resultado\n",
153 | " empates[i,j] = 1#llenan la matriz de empates\n",
154 | " empates[j,i] = 1\n",
155 | " j = j + 1\n",
156 | " i = i + 1"
157 | ],
158 | "metadata": {
159 | "id": "52PKXqcYzC72"
160 | },
161 | "execution_count": null,
162 | "outputs": []
163 | },
164 | {
165 | "cell_type": "code",
166 | "source": [
167 | "#calculamos total de empates\n",
168 | "i = 0\n",
169 | "while not(i>=n):\n",
170 | " j = 0\n",
171 | " while not(j>=m):\n",
172 | " tempates[i] = tempates[i] + empates[i,j]#calculan el total de empates por equipo \n",
173 | " j = j + 1\n",
174 | " i = i + 1\n"
175 | ],
176 | "metadata": {
177 | "id": "MruEjtb7zMLV"
178 | },
179 | "execution_count": null,
180 | "outputs": []
181 | },
182 | {
183 | "cell_type": "code",
184 | "source": [
185 | "#calculamos las derrotas\n",
186 | "#como van a tener 4 partidos colocamos la cantidad de equipos menos 1 que seria la cantidad de partidos jugados\n",
187 | "#le restamos los trienfos y empates obtenidos y obtenemos el total de derrotas \n",
188 | "derrotas = (n-1)*np.ones(n,dtype=int)\n",
189 | "derrotas = derrotas - ttriunfos - tempates"
190 | ],
191 | "metadata": {
192 | "id": "wI-5MVTrzSV9"
193 | },
194 | "execution_count": null,
195 | "outputs": []
196 | },
197 | {
198 | "cell_type": "code",
199 | "source": [
200 | "#calculamos puntos totales\n",
201 | "puntos_triunfos = ttriunfos*3\n",
202 | "puntos_empates = tempates*1\n",
203 | "puntos = puntos_triunfos+puntos_empates \n"
204 | ],
205 | "metadata": {
206 | "id": "VGBKE_b5zZdG"
207 | },
208 | "execution_count": null,
209 | "outputs": []
210 | },
211 | {
212 | "cell_type": "code",
213 | "source": [
214 | "print(triunfos)\n",
215 | "print(' triunfos por equipo: ')\n",
216 | "print(ttriunfos)\n",
217 | "print(' empates por equipo:')\n",
218 | "print(tempates)\n",
219 | "print(' derrotas por equipo:')\n",
220 | "print(derrotas)\n",
221 | "print('puntos por equipo:')\n",
222 | "print(puntos)"
223 | ],
224 | "metadata": {
225 | "colab": {
226 | "base_uri": "https://localhost:8080/"
227 | },
228 | "id": "L5EEix2hzc4I",
229 | "outputId": "8b968d02-8517-43aa-99a6-0bed90402a6f"
230 | },
231 | "execution_count": null,
232 | "outputs": [
233 | {
234 | "output_type": "stream",
235 | "name": "stdout",
236 | "text": [
237 | "[[0 1 1 1 0]\n",
238 | " [0 0 1 1 0]\n",
239 | " [0 0 0 0 0]\n",
240 | " [0 0 1 0 0]\n",
241 | " [1 1 0 1 0]]\n",
242 | " triunfos por equipo: \n",
243 | "[3 2 0 1 3]\n",
244 | " empates por equipo:\n",
245 | "[0 0 1 0 1]\n",
246 | " derrotas por equipo:\n",
247 | "[1 2 3 3 0]\n",
248 | "puntos por equipo:\n",
249 | "[ 9 6 1 3 10]\n"
250 | ]
251 | }
252 | ]
253 | },
254 | {
255 | "cell_type": "markdown",
256 | "source": [
257 | "# **crear una funcion que dada un array de una dimension ,hacer un resumen estadistico de las edades ,verificar que el array sea de una dimension caso contrario entregar error.**"
258 | ],
259 | "metadata": {
260 | "id": "lvPD-vOYfcu0"
261 | }
262 | },
263 | {
264 | "cell_type": "code",
265 | "source": [
266 | "def get_array_info(input_array):\n",
267 | " if input_array.ndim > 1:\n",
268 | " print(\"ERROR, EL ARRAY NO DEBE TENER MAS DE UNA DIMENSION \")\n",
269 | " else :\n",
270 | " print(f\"cantidad de elementos del array {input_array.shape[0]}\")\n",
271 | " print(f\"tipo de dato de los elementos del array {input_array.dtype}\")\n",
272 | " print(f\"Valor minimo: {input_array.min()}\")\n",
273 | " print(f\"Valor maximo: {input_array.max()}\")\n",
274 | " print(f\"valor promedio : {input_array.mean()}\")\n",
275 | " print(f\"suma de los valores : {input_array.sum()}\")\n"
276 | ],
277 | "metadata": {
278 | "id": "186B9nsufnRt"
279 | },
280 | "execution_count": null,
281 | "outputs": []
282 | },
283 | {
284 | "cell_type": "code",
285 | "source": [
286 | "new_array= np.array([16,25,19,58,22])\n",
287 | "get_array_info(new_array)"
288 | ],
289 | "metadata": {
290 | "id": "DX-nzh4Nfy1q"
291 | },
292 | "execution_count": null,
293 | "outputs": []
294 | },
295 | {
296 | "cell_type": "markdown",
297 | "source": [
298 | "# **dado un array de dos dimensiones, el valor total de las filas o valor total de las columnas**"
299 | ],
300 | "metadata": {
301 | "id": "pFufHWlef2bb"
302 | }
303 | },
304 | {
305 | "cell_type": "code",
306 | "source": [
307 | "def array_sum(input_array):\n",
308 | " if input_array.ndim != 2:\n",
309 | " print(\"ERROR: El Array debe tener 2 Dimensiones.\")\n",
310 | " else:\n",
311 | " # Variables para almacenar los índices:\n",
312 | " row_index = 0\n",
313 | " col_index = 0\n",
314 | " # Arrays con las sumas de las filas y las columnas:\n",
315 | " row_sum = input_array.sum(axis=1)\n",
316 | " col_sum = input_array.sum(axis=0)\n",
317 | " # Itero el array de suma de filas, para imprimir los valores:\n",
318 | " \n",
319 | " for value in row_sum:\n",
320 | " print(f\"Total Fila {row_index}: {value}\")\n",
321 | " row_index += 1\n",
322 | " # Itero el array de suma de columnas, para imprimir los valores:\n",
323 | " for value in col_sum:\n",
324 | " print(f\"Total Columna {col_index}: {value}\")\n",
325 | " col_index += 1"
326 | ],
327 | "metadata": {
328 | "id": "Sc-dLasVgTFK"
329 | },
330 | "execution_count": null,
331 | "outputs": []
332 | },
333 | {
334 | "cell_type": "code",
335 | "source": [
336 | "my_array_2D = np.array([[1, 2, 3],\n",
337 | " [4, 5, 6],\n",
338 | " [7, 8, 9]])\n",
339 | "array_sum(my_array_2D)"
340 | ],
341 | "metadata": {
342 | "id": "-Eg3JoosgVAJ"
343 | },
344 | "execution_count": null,
345 | "outputs": []
346 | },
347 | {
348 | "cell_type": "code",
349 | "source": [
350 | "# np.all()\n",
351 | "# Retorna True si todos los elementos del arreglo cumplen con la condición.\n",
352 | "# np.any()\n",
353 | "# Retorna True si almenos uno de los elementos del arreglo cumple con la condición.\n",
354 | "# np.where()\n",
355 | "# Retorna un arreglo con los índices de los elementos que cumplen con la condición."
356 | ],
357 | "metadata": {
358 | "id": "Aduw1xaDgVFq"
359 | },
360 | "execution_count": null,
361 | "outputs": []
362 | },
363 | {
364 | "cell_type": "code",
365 | "source": [
366 | "# new_array=np.array([[12,56,15,45,56],[20,506,25,45,65]])\n",
367 | "# print(new_array)\n",
368 | "# print(np.all(new_array==12))\n",
369 | "# print(np.any(new_array<20))\n",
370 | "# fila,columna=np.where(new_array>50)\n",
371 | "# print(fila,columna)\n",
372 | "# dic_posiciones={}\n",
373 | "# contador=0\n",
374 | "# new_data=list(zip(fila,columna))\n",
375 | "# for values in new_data:\n",
376 | "# dic_posiciones[f\"posicion {contador}\"]=new_array[values]\n",
377 | "# contador+=1\n",
378 | "# print(dic_posiciones)\n",
379 | "# def metricaPais(ddatos,dpaises):\n",
380 | "# d_PromediosMetricasPais = {}\n",
381 | "# for pais, ciudades in dpaises.items():\n",
382 | "\n",
383 | "# \t\tfor datos,valores in ddatos.items():\t\t\t\t\t\t\n",
384 | "# \t\t\tif datos[0] in ciudades :\n",
385 | "# \t\t\t\td_PromediosMetricasPais[(pais,datos[1])]+=valores "
386 | ],
387 | "metadata": {
388 | "id": "Onyfv6s1gcnr"
389 | },
390 | "execution_count": null,
391 | "outputs": []
392 | },
393 | {
394 | "cell_type": "markdown",
395 | "source": [
396 | "# **Ejericios diapositivas**"
397 | ],
398 | "metadata": {
399 | "id": "FzU5kQwWuSz8"
400 | }
401 | },
402 | {
403 | "cell_type": "code",
404 | "source": [
405 | "import numpy as np \n",
406 | "lista = [1,2,3,4,5,6,7,8,9]\n",
407 | "a = np.array(lista, float)\n",
408 | "b = np.array(lista, int)\n",
409 | "c = a.reshape(3,3)\n",
410 | "tam = c.size\n",
411 | "filas = c.shape[0]\n",
412 | "cols = c.shape[1]\n",
413 | "rank = c.ndim \n",
414 | "tipo = type(c)\n"
415 | ],
416 | "metadata": {
417 | "id": "B67VP82Jubpb"
418 | },
419 | "execution_count": null,
420 | "outputs": []
421 | },
422 | {
423 | "cell_type": "code",
424 | "source": [
425 | "print(tam )\n",
426 | "print(filas )\n",
427 | "print(cols )\n",
428 | "print(rank )\n",
429 | "print(tipo )\n"
430 | ],
431 | "metadata": {
432 | "id": "Cy64lo6FvBEB"
433 | },
434 | "execution_count": null,
435 | "outputs": []
436 | },
437 | {
438 | "cell_type": "code",
439 | "source": [
440 | "m = 2\n",
441 | "n = 3\n",
442 | "solo_unos = np.ones((m,n))\n",
443 | "matriz_nula = np.zeros((m,n), dtype=int)\n",
444 | "pasos = np.arange(5)\n",
445 | "nuevo = np.arange(0,10,2)\n",
446 | "nuevo_2 = np.arange(0,10,.2)\n",
447 | "nuevo_2.size\n"
448 | ],
449 | "metadata": {
450 | "id": "YxSfYZp-vUpl"
451 | },
452 | "execution_count": null,
453 | "outputs": []
454 | },
455 | {
456 | "cell_type": "code",
457 | "source": [
458 | "print(nuevo)\n",
459 | "print(nuevo_2)"
460 | ],
461 | "metadata": {
462 | "id": "YdMLOBWFvuqL"
463 | },
464 | "execution_count": null,
465 | "outputs": []
466 | },
467 | {
468 | "cell_type": "code",
469 | "source": [
470 | "#matrices\n",
471 | "np_2d=np.array([[ 1.73, 1.68, 1.71, 1.89, 1.79],[ 65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])\n"
472 | ],
473 | "metadata": {
474 | "id": "vU8_zFH4wGXz"
475 | },
476 | "execution_count": null,
477 | "outputs": []
478 | },
479 | {
480 | "cell_type": "code",
481 | "source": [
482 | "np_2d[1,:]"
483 | ],
484 | "metadata": {
485 | "colab": {
486 | "base_uri": "https://localhost:8080/"
487 | },
488 | "id": "5748g0EOwW7k",
489 | "outputId": "a58792bc-b9f5-426b-dfb2-b02003f4de07"
490 | },
491 | "execution_count": null,
492 | "outputs": [
493 | {
494 | "output_type": "execute_result",
495 | "data": {
496 | "text/plain": [
497 | "array([65.4, 59.2, 63.6, 88.4, 68.7])"
498 | ]
499 | },
500 | "metadata": {},
501 | "execution_count": 15
502 | }
503 | ]
504 | },
505 | {
506 | "cell_type": "code",
507 | "source": [
508 | "np_2d[:,3]"
509 | ],
510 | "metadata": {
511 | "colab": {
512 | "base_uri": "https://localhost:8080/"
513 | },
514 | "id": "yQzRor_NwnD0",
515 | "outputId": "9fa44b3e-21df-4cef-9578-08db05397878"
516 | },
517 | "execution_count": null,
518 | "outputs": [
519 | {
520 | "output_type": "execute_result",
521 | "data": {
522 | "text/plain": [
523 | "array([ 1.89, 88.4 ])"
524 | ]
525 | },
526 | "metadata": {},
527 | "execution_count": 16
528 | }
529 | ]
530 | },
531 | {
532 | "cell_type": "code",
533 | "source": [
534 | "np_2d[:,1:4]"
535 | ],
536 | "metadata": {
537 | "colab": {
538 | "base_uri": "https://localhost:8080/"
539 | },
540 | "id": "ge-Ows0Qw4Cz",
541 | "outputId": "f5ecc951-8659-4dd4-cb62-e5e699133306"
542 | },
543 | "execution_count": null,
544 | "outputs": [
545 | {
546 | "output_type": "execute_result",
547 | "data": {
548 | "text/plain": [
549 | "array([[ 1.68, 1.71, 1.89],\n",
550 | " [59.2 , 63.6 , 88.4 ]])"
551 | ]
552 | },
553 | "metadata": {},
554 | "execution_count": 17
555 | }
556 | ]
557 | },
558 | {
559 | "cell_type": "code",
560 | "source": [
561 | "np_2d>3"
562 | ],
563 | "metadata": {
564 | "id": "5CGOBOVAxc6t",
565 | "outputId": "279b5dce-9c36-46fc-c87f-5bfff1569610",
566 | "colab": {
567 | "base_uri": "https://localhost:8080/"
568 | }
569 | },
570 | "execution_count": null,
571 | "outputs": [
572 | {
573 | "output_type": "execute_result",
574 | "data": {
575 | "text/plain": [
576 | "array([[False, False, False, False, False],\n",
577 | " [ True, True, True, True, True]])"
578 | ]
579 | },
580 | "metadata": {},
581 | "execution_count": 18
582 | }
583 | ]
584 | }
585 | ]
586 | }
--------------------------------------------------------------------------------
/Worshop Python # 7: Ficheros/Pipfile.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_meta": {
3 | "hash": {
4 | "sha256": "874a9e455d24b4f48960b06a57a17f9b62b01bc0265fbb6976c3ae82e8cc91eb"
5 | },
6 | "pipfile-spec": 6,
7 | "requires": {
8 | "python_version": "3.9"
9 | },
10 | "sources": [
11 | {
12 | "name": "pypi",
13 | "url": "https://pypi.org/simple",
14 | "verify_ssl": true
15 | }
16 | ]
17 | },
18 | "default": {
19 | "anyio": {
20 | "hashes": [
21 | "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421",
22 | "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"
23 | ],
24 | "markers": "python_full_version >= '3.6.2'",
25 | "version": "==3.6.2"
26 | },
27 | "argon2-cffi": {
28 | "hashes": [
29 | "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80",
30 | "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"
31 | ],
32 | "markers": "python_version >= '3.6'",
33 | "version": "==21.3.0"
34 | },
35 | "argon2-cffi-bindings": {
36 | "hashes": [
37 | "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670",
38 | "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f",
39 | "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583",
40 | "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194",
41 | "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c",
42 | "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a",
43 | "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082",
44 | "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5",
45 | "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f",
46 | "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7",
47 | "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d",
48 | "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f",
49 | "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae",
50 | "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3",
51 | "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86",
52 | "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367",
53 | "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d",
54 | "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93",
55 | "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb",
56 | "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e",
57 | "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"
58 | ],
59 | "markers": "python_version >= '3.6'",
60 | "version": "==21.2.0"
61 | },
62 | "asttokens": {
63 | "hashes": [
64 | "sha256:1b28ed85e254b724439afc783d4bee767f780b936c3fe8b3275332f42cf5f561",
65 | "sha256:4aa76401a151c8cc572d906aad7aea2a841780834a19d780f4321c0fe1b54635"
66 | ],
67 | "version": "==2.1.0"
68 | },
69 | "attrs": {
70 | "hashes": [
71 | "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6",
72 | "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"
73 | ],
74 | "markers": "python_version >= '3.5'",
75 | "version": "==22.1.0"
76 | },
77 | "babel": {
78 | "hashes": [
79 | "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe",
80 | "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"
81 | ],
82 | "markers": "python_version >= '3.6'",
83 | "version": "==2.11.0"
84 | },
85 | "backcall": {
86 | "hashes": [
87 | "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e",
88 | "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"
89 | ],
90 | "version": "==0.2.0"
91 | },
92 | "beautifulsoup4": {
93 | "hashes": [
94 | "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30",
95 | "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"
96 | ],
97 | "markers": "python_version >= '3.6'",
98 | "version": "==4.11.1"
99 | },
100 | "bleach": {
101 | "hashes": [
102 | "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a",
103 | "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"
104 | ],
105 | "markers": "python_version >= '3.7'",
106 | "version": "==5.0.1"
107 | },
108 | "certifi": {
109 | "hashes": [
110 | "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14",
111 | "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"
112 | ],
113 | "markers": "python_version >= '3.6'",
114 | "version": "==2022.9.24"
115 | },
116 | "cffi": {
117 | "hashes": [
118 | "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5",
119 | "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef",
120 | "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104",
121 | "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426",
122 | "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405",
123 | "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375",
124 | "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a",
125 | "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e",
126 | "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc",
127 | "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf",
128 | "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185",
129 | "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497",
130 | "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3",
131 | "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35",
132 | "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c",
133 | "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83",
134 | "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21",
135 | "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca",
136 | "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984",
137 | "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac",
138 | "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd",
139 | "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee",
140 | "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a",
141 | "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2",
142 | "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192",
143 | "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7",
144 | "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585",
145 | "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f",
146 | "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e",
147 | "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27",
148 | "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b",
149 | "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e",
150 | "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e",
151 | "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d",
152 | "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c",
153 | "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415",
154 | "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82",
155 | "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02",
156 | "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314",
157 | "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325",
158 | "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c",
159 | "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3",
160 | "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914",
161 | "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045",
162 | "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d",
163 | "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9",
164 | "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5",
165 | "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2",
166 | "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c",
167 | "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3",
168 | "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2",
169 | "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8",
170 | "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d",
171 | "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d",
172 | "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9",
173 | "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162",
174 | "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76",
175 | "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4",
176 | "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e",
177 | "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9",
178 | "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6",
179 | "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b",
180 | "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01",
181 | "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"
182 | ],
183 | "version": "==1.15.1"
184 | },
185 | "charset-normalizer": {
186 | "hashes": [
187 | "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845",
188 | "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"
189 | ],
190 | "markers": "python_version >= '3.6'",
191 | "version": "==2.1.1"
192 | },
193 | "click": {
194 | "hashes": [
195 | "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
196 | "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
197 | ],
198 | "index": "pypi",
199 | "version": "==8.1.3"
200 | },
201 | "coloredlogs": {
202 | "hashes": [
203 | "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934",
204 | "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"
205 | ],
206 | "index": "pypi",
207 | "version": "==15.0.1"
208 | },
209 | "debugpy": {
210 | "hashes": [
211 | "sha256:34d2cdd3a7c87302ba5322b86e79c32c2115be396f3f09ca13306d8a04fe0f16",
212 | "sha256:3c9f985944a30cfc9ae4306ac6a27b9c31dba72ca943214dad4a0ab3840f6161",
213 | "sha256:4e255982552b0edfe3a6264438dbd62d404baa6556a81a88f9420d3ed79b06ae",
214 | "sha256:5ad571a36cec137ae6ed951d0ff75b5e092e9af6683da084753231150cbc5b25",
215 | "sha256:6efc30325b68e451118b795eff6fe8488253ca3958251d5158106d9c87581bc6",
216 | "sha256:7c302095a81be0d5c19f6529b600bac971440db3e226dce85347cc27e6a61908",
217 | "sha256:84c39940a0cac410bf6aa4db00ba174f973eef521fbe9dd058e26bcabad89c4f",
218 | "sha256:86d784b72c5411c833af1cd45b83d80c252b77c3bfdb43db17c441d772f4c734",
219 | "sha256:adcfea5ea06d55d505375995e150c06445e2b20cd12885bcae566148c076636b",
220 | "sha256:b8deaeb779699350deeed835322730a3efec170b88927debc9ba07a1a38e2585",
221 | "sha256:c4b2bd5c245eeb49824bf7e539f95fb17f9a756186e51c3e513e32999d8846f3",
222 | "sha256:c4cd6f37e3c168080d61d698390dfe2cd9e74ebf80b448069822a15dadcda57d",
223 | "sha256:cca23cb6161ac89698d629d892520327dd1be9321c0960e610bbcb807232b45d",
224 | "sha256:d5c814596a170a0a58fa6fad74947e30bfd7e192a5d2d7bd6a12156c2899e13a",
225 | "sha256:daadab4403427abd090eccb38d8901afd8b393e01fd243048fab3f1d7132abb4",
226 | "sha256:dda8652520eae3945833e061cbe2993ad94a0b545aebd62e4e6b80ee616c76b2",
227 | "sha256:e8922090514a890eec99cfb991bab872dd2e353ebb793164d5f01c362b9a40bf",
228 | "sha256:fc233a0160f3b117b20216f1169e7211b83235e3cd6749bcdd8dbb72177030c7"
229 | ],
230 | "markers": "python_version >= '3.7'",
231 | "version": "==1.6.3"
232 | },
233 | "decorator": {
234 | "hashes": [
235 | "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330",
236 | "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"
237 | ],
238 | "markers": "python_version >= '3.5'",
239 | "version": "==5.1.1"
240 | },
241 | "defusedxml": {
242 | "hashes": [
243 | "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69",
244 | "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"
245 | ],
246 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
247 | "version": "==0.7.1"
248 | },
249 | "entrypoints": {
250 | "hashes": [
251 | "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4",
252 | "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"
253 | ],
254 | "markers": "python_version >= '3.6'",
255 | "version": "==0.4"
256 | },
257 | "executing": {
258 | "hashes": [
259 | "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc",
260 | "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"
261 | ],
262 | "version": "==1.2.0"
263 | },
264 | "fastjsonschema": {
265 | "hashes": [
266 | "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18",
267 | "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"
268 | ],
269 | "version": "==2.16.2"
270 | },
271 | "humanfriendly": {
272 | "hashes": [
273 | "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477",
274 | "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"
275 | ],
276 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
277 | "version": "==10.0"
278 | },
279 | "idna": {
280 | "hashes": [
281 | "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4",
282 | "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
283 | ],
284 | "markers": "python_version >= '3.5'",
285 | "version": "==3.4"
286 | },
287 | "importlib-metadata": {
288 | "hashes": [
289 | "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab",
290 | "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"
291 | ],
292 | "markers": "python_version < '3.10'",
293 | "version": "==5.0.0"
294 | },
295 | "ipykernel": {
296 | "hashes": [
297 | "sha256:301fdb487587c9bf277025001da97b53697aab73ae1268d9d1ba972a2c5fc801",
298 | "sha256:e195cf6d8c3dd5d41f3cf8ad831d9891f95d7d18fa6d5fb4d30a713df99b26a4"
299 | ],
300 | "markers": "python_version >= '3.8'",
301 | "version": "==6.17.0"
302 | },
303 | "ipython": {
304 | "hashes": [
305 | "sha256:7c959e3dedbf7ed81f9b9d8833df252c430610e2a4a6464ec13cd20975ce20a5",
306 | "sha256:91ef03016bcf72dd17190f863476e7c799c6126ec7e8be97719d1bc9a78a59a4"
307 | ],
308 | "markers": "python_version >= '3.8'",
309 | "version": "==8.6.0"
310 | },
311 | "ipython-genutils": {
312 | "hashes": [
313 | "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
314 | "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
315 | ],
316 | "version": "==0.2.0"
317 | },
318 | "jedi": {
319 | "hashes": [
320 | "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d",
321 | "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"
322 | ],
323 | "markers": "python_version >= '3.6'",
324 | "version": "==0.18.1"
325 | },
326 | "jinja2": {
327 | "hashes": [
328 | "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
329 | "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
330 | ],
331 | "markers": "python_version >= '3.7'",
332 | "version": "==3.1.2"
333 | },
334 | "json5": {
335 | "hashes": [
336 | "sha256:993189671e7412e9cdd8be8dc61cf402e8e579b35f1d1bb20ae6b09baa78bbce",
337 | "sha256:ad9f048c5b5a4c3802524474ce40a622fae789860a86f10cc4f7e5f9cf9b46ab"
338 | ],
339 | "version": "==0.9.10"
340 | },
341 | "jsonschema": {
342 | "hashes": [
343 | "sha256:5bfcf2bca16a087ade17e02b282d34af7ccd749ef76241e7f9bd7c0cb8a9424d",
344 | "sha256:f660066c3966db7d6daeaea8a75e0b68237a48e51cf49882087757bb59916248"
345 | ],
346 | "markers": "python_version >= '3.7'",
347 | "version": "==4.17.0"
348 | },
349 | "jupyter-client": {
350 | "hashes": [
351 | "sha256:1c1d418ef32a45a1fae0b243e6f01cc9bf65fa8ddbd491a034b9ba6ac6502951",
352 | "sha256:5616db609ac720422e6a4b893d6572b8d655ff41e058367f4459a0d2c0726832"
353 | ],
354 | "markers": "python_version >= '3.7'",
355 | "version": "==7.4.4"
356 | },
357 | "jupyter-core": {
358 | "hashes": [
359 | "sha256:3815e80ec5272c0c19aad087a0d2775df2852cfca8f5a17069e99c9350cecff8",
360 | "sha256:c2909b9bc7dca75560a6c5ae78c34fd305ede31cd864da3c0d0bb2ed89aa9337"
361 | ],
362 | "markers": "python_version >= '3.7'",
363 | "version": "==4.11.2"
364 | },
365 | "jupyter-server": {
366 | "hashes": [
367 | "sha256:992531008544d77e05a16251cdfbd0bdff1b1efa14760c79b9cc776ac9214cf1",
368 | "sha256:d0adca19913a3763359be7f0b8c2ea8bfde356f4b8edd8e3149d7d0fbfaa248b"
369 | ],
370 | "markers": "python_version >= '3.7'",
371 | "version": "==1.21.0"
372 | },
373 | "jupyterlab": {
374 | "hashes": [
375 | "sha256:e02556c8ea1b386963c4b464e4618aee153c5416b07ab481425c817a033323a2",
376 | "sha256:f433059fe0e12d75ea90a81a0b6721113bb132857e3ec2197780b6fe84cbcbde"
377 | ],
378 | "index": "pypi",
379 | "version": "==3.5.0"
380 | },
381 | "jupyterlab-pygments": {
382 | "hashes": [
383 | "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f",
384 | "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"
385 | ],
386 | "markers": "python_version >= '3.7'",
387 | "version": "==0.2.2"
388 | },
389 | "jupyterlab-server": {
390 | "hashes": [
391 | "sha256:07007a3a0a30bfc6424b28b76df8d67386cc2d5f9f42886773b1b3c473cb9a3f",
392 | "sha256:7ad1a37a716f6d10e90185c636c122d55a58ef3141ae50f9d0601d3ccf54d43e"
393 | ],
394 | "markers": "python_version >= '3.7'",
395 | "version": "==2.16.2"
396 | },
397 | "markupsafe": {
398 | "hashes": [
399 | "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003",
400 | "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88",
401 | "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5",
402 | "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7",
403 | "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a",
404 | "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603",
405 | "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1",
406 | "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135",
407 | "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247",
408 | "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6",
409 | "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601",
410 | "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77",
411 | "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02",
412 | "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e",
413 | "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63",
414 | "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f",
415 | "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980",
416 | "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b",
417 | "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812",
418 | "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff",
419 | "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96",
420 | "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1",
421 | "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925",
422 | "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a",
423 | "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6",
424 | "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e",
425 | "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f",
426 | "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4",
427 | "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f",
428 | "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3",
429 | "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c",
430 | "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a",
431 | "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417",
432 | "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a",
433 | "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a",
434 | "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37",
435 | "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452",
436 | "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933",
437 | "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
438 | "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
439 | ],
440 | "markers": "python_version >= '3.7'",
441 | "version": "==2.1.1"
442 | },
443 | "matplotlib-inline": {
444 | "hashes": [
445 | "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311",
446 | "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"
447 | ],
448 | "markers": "python_version >= '3.5'",
449 | "version": "==0.1.6"
450 | },
451 | "mistune": {
452 | "hashes": [
453 | "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d",
454 | "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"
455 | ],
456 | "version": "==2.0.4"
457 | },
458 | "nbclassic": {
459 | "hashes": [
460 | "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283",
461 | "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"
462 | ],
463 | "markers": "python_version >= '3.7'",
464 | "version": "==0.4.8"
465 | },
466 | "nbclient": {
467 | "hashes": [
468 | "sha256:434c91385cf3e53084185334d675a0d33c615108b391e260915d1aa8e86661b8",
469 | "sha256:a1d844efd6da9bc39d2209bf996dbd8e07bf0f36b796edfabaa8f8a9ab77c3aa"
470 | ],
471 | "markers": "python_version >= '3.7'",
472 | "version": "==0.7.0"
473 | },
474 | "nbconvert": {
475 | "hashes": [
476 | "sha256:66326174c190dc4f0a6cbbff96f30c632774b441fa3c7565662bb3d41992fb0f",
477 | "sha256:7ae7ccc68495b565dab153459ee7e65039970913eb115070da6e2c673cf0e9f8"
478 | ],
479 | "markers": "python_version >= '3.7'",
480 | "version": "==7.2.3"
481 | },
482 | "nbformat": {
483 | "hashes": [
484 | "sha256:1b05ec2c552c2f1adc745f4eddce1eac8ca9ffd59bb9fd859e827eaa031319f9",
485 | "sha256:1d4760c15c1a04269ef5caf375be8b98dd2f696e5eb9e603ec2bf091f9b0d3f3"
486 | ],
487 | "markers": "python_version >= '3.7'",
488 | "version": "==5.7.0"
489 | },
490 | "nest-asyncio": {
491 | "hashes": [
492 | "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8",
493 | "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"
494 | ],
495 | "markers": "python_version >= '3.5'",
496 | "version": "==1.5.6"
497 | },
498 | "notebook": {
499 | "hashes": [
500 | "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0",
501 | "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"
502 | ],
503 | "markers": "python_version >= '3.7'",
504 | "version": "==6.5.2"
505 | },
506 | "notebook-shim": {
507 | "hashes": [
508 | "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f",
509 | "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"
510 | ],
511 | "markers": "python_version >= '3.7'",
512 | "version": "==0.2.2"
513 | },
514 | "packaging": {
515 | "hashes": [
516 | "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
517 | "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"
518 | ],
519 | "markers": "python_version >= '3.6'",
520 | "version": "==21.3"
521 | },
522 | "pandocfilters": {
523 | "hashes": [
524 | "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38",
525 | "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"
526 | ],
527 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
528 | "version": "==1.5.0"
529 | },
530 | "parso": {
531 | "hashes": [
532 | "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0",
533 | "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"
534 | ],
535 | "markers": "python_version >= '3.6'",
536 | "version": "==0.8.3"
537 | },
538 | "pexpect": {
539 | "hashes": [
540 | "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937",
541 | "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"
542 | ],
543 | "markers": "sys_platform != 'win32'",
544 | "version": "==4.8.0"
545 | },
546 | "pickleshare": {
547 | "hashes": [
548 | "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca",
549 | "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
550 | ],
551 | "version": "==0.7.5"
552 | },
553 | "prometheus-client": {
554 | "hashes": [
555 | "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1",
556 | "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"
557 | ],
558 | "markers": "python_version >= '3.6'",
559 | "version": "==0.15.0"
560 | },
561 | "prompt-toolkit": {
562 | "hashes": [
563 | "sha256:24becda58d49ceac4dc26232eb179ef2b21f133fecda7eed6018d341766ed76e",
564 | "sha256:e7f2129cba4ff3b3656bbdda0e74ee00d2f874a8bcdb9dd16f5fec7b3e173cae"
565 | ],
566 | "markers": "python_full_version >= '3.6.2'",
567 | "version": "==3.0.32"
568 | },
569 | "psutil": {
570 | "hashes": [
571 | "sha256:07d880053c6461c9b89cd5d4808f3b8336665fa3acdefd6777662c5ed73a851a",
572 | "sha256:12500d761ac091f2426567f19f95fd3f15a197d96befb44a5c1e3cbe6db5752c",
573 | "sha256:1b540599481c73408f6b392cdffef5b01e8ff7a2ac8caae0a91b8222e88e8f1e",
574 | "sha256:35feafe232d1aaf35d51bd42790cbccb882456f9f18cdc411532902370d660df",
575 | "sha256:3a7826e68b0cf4ce2c1ee385d64eab7d70e3133171376cac53d7c1790357ec8f",
576 | "sha256:46907fa62acaac364fff0b8a9da7b360265d217e4fdeaca0a2397a6883dffba2",
577 | "sha256:4bd4854f0c83aa84a5a40d3b5d0eb1f3c128f4146371e03baed4589fe4f3c931",
578 | "sha256:538fcf6ae856b5e12d13d7da25ad67f02113c96f5989e6ad44422cb5994ca7fc",
579 | "sha256:547ebb02031fdada635452250ff39942db8310b5c4a8102dfe9384ee5791e650",
580 | "sha256:5e8b50241dd3c2ed498507f87a6602825073c07f3b7e9560c58411c14fe1e1c9",
581 | "sha256:5fa88e3d5d0b480602553d362c4b33a63e0c40bfea7312a7bf78799e01e0810b",
582 | "sha256:68fa227c32240c52982cb931801c5707a7f96dd8927f9102d6c7771ea1ff5698",
583 | "sha256:6ced1ad823ecfa7d3ce26fe8aa4996e2e53fb49b7fed8ad81c80958501ec0619",
584 | "sha256:71b1206e7909792d16933a0d2c1c7f04ae196186c51ba8567abae1d041f06dcb",
585 | "sha256:767ef4fa33acda16703725c0473a91e1832d296c37c63896c7153ba81698f1ab",
586 | "sha256:7ccfcdfea4fc4b0a02ca2c31de7fcd186beb9cff8207800e14ab66f79c773af6",
587 | "sha256:7e4939ff75149b67aef77980409f156f0082fa36accc475d45c705bb00c6c16a",
588 | "sha256:828c9dc9478b34ab96be75c81942d8df0c2bb49edbb481f597314d92b6441d89",
589 | "sha256:8a4e07611997acf178ad13b842377e3d8e9d0a5bac43ece9bfc22a96735d9a4f",
590 | "sha256:941a6c2c591da455d760121b44097781bc970be40e0e43081b9139da485ad5b7",
591 | "sha256:9a4af6ed1094f867834f5f07acd1250605a0874169a5fcadbcec864aec2496a6",
592 | "sha256:9ec296f565191f89c48f33d9544d8d82b0d2af7dd7d2d4e6319f27a818f8d1cc",
593 | "sha256:9ec95df684583b5596c82bb380c53a603bb051cf019d5c849c47e117c5064395",
594 | "sha256:a04a1836894c8279e5e0a0127c0db8e198ca133d28be8a2a72b4db16f6cf99c1",
595 | "sha256:a3d81165b8474087bb90ec4f333a638ccfd1d69d34a9b4a1a7eaac06648f9fbe",
596 | "sha256:b4a247cd3feaae39bb6085fcebf35b3b8ecd9b022db796d89c8f05067ca28e71",
597 | "sha256:ba38cf9984d5462b506e239cf4bc24e84ead4b1d71a3be35e66dad0d13ded7c1",
598 | "sha256:beb57d8a1ca0ae0eb3d08ccaceb77e1a6d93606f0e1754f0d60a6ebd5c288837",
599 | "sha256:d266cd05bd4a95ca1c2b9b5aac50d249cf7c94a542f47e0b22928ddf8b80d1ef",
600 | "sha256:d8c3cc6bb76492133474e130a12351a325336c01c96a24aae731abf5a47fe088",
601 | "sha256:db8e62016add2235cc87fb7ea000ede9e4ca0aa1f221b40cef049d02d5d2593d",
602 | "sha256:e7507f6c7b0262d3e7b0eeda15045bf5881f4ada70473b87bc7b7c93b992a7d7",
603 | "sha256:ed15edb14f52925869250b1375f0ff58ca5c4fa8adefe4883cfb0737d32f5c02",
604 | "sha256:f57d63a2b5beaf797b87024d018772439f9d3103a395627b77d17a8d72009543",
605 | "sha256:fa5e32c7d9b60b2528108ade2929b115167fe98d59f89555574715054f50fa31",
606 | "sha256:fe79b4ad4836e3da6c4650cb85a663b3a51aef22e1a829c384e18fae87e5e727"
607 | ],
608 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
609 | "version": "==5.9.3"
610 | },
611 | "ptyprocess": {
612 | "hashes": [
613 | "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35",
614 | "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"
615 | ],
616 | "version": "==0.7.0"
617 | },
618 | "pure-eval": {
619 | "hashes": [
620 | "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350",
621 | "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"
622 | ],
623 | "version": "==0.2.2"
624 | },
625 | "pycparser": {
626 | "hashes": [
627 | "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9",
628 | "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"
629 | ],
630 | "version": "==2.21"
631 | },
632 | "pygments": {
633 | "hashes": [
634 | "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1",
635 | "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"
636 | ],
637 | "markers": "python_version >= '3.6'",
638 | "version": "==2.13.0"
639 | },
640 | "pyparsing": {
641 | "hashes": [
642 | "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb",
643 | "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"
644 | ],
645 | "markers": "python_full_version >= '3.6.8'",
646 | "version": "==3.0.9"
647 | },
648 | "pyrsistent": {
649 | "hashes": [
650 | "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed",
651 | "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb",
652 | "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a",
653 | "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95",
654 | "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712",
655 | "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73",
656 | "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41",
657 | "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b",
658 | "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78",
659 | "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab",
660 | "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308",
661 | "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425",
662 | "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2",
663 | "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e",
664 | "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6",
665 | "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2",
666 | "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a",
667 | "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291",
668 | "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584",
669 | "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a",
670 | "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0",
671 | "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"
672 | ],
673 | "markers": "python_version >= '3.7'",
674 | "version": "==0.19.2"
675 | },
676 | "python-dateutil": {
677 | "hashes": [
678 | "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86",
679 | "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
680 | ],
681 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
682 | "version": "==2.8.2"
683 | },
684 | "pytz": {
685 | "hashes": [
686 | "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427",
687 | "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"
688 | ],
689 | "version": "==2022.6"
690 | },
691 | "pyzmq": {
692 | "hashes": [
693 | "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107",
694 | "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7",
695 | "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d",
696 | "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc",
697 | "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c",
698 | "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4",
699 | "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8",
700 | "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8",
701 | "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287",
702 | "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b",
703 | "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f",
704 | "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77",
705 | "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066",
706 | "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209",
707 | "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd",
708 | "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a",
709 | "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4",
710 | "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc",
711 | "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58",
712 | "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246",
713 | "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62",
714 | "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227",
715 | "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b",
716 | "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944",
717 | "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2",
718 | "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804",
719 | "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8",
720 | "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066",
721 | "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1",
722 | "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33",
723 | "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639",
724 | "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef",
725 | "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a",
726 | "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace",
727 | "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00",
728 | "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5",
729 | "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b",
730 | "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879",
731 | "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340",
732 | "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4",
733 | "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4",
734 | "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6",
735 | "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3",
736 | "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f",
737 | "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3",
738 | "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409",
739 | "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913",
740 | "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1",
741 | "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43",
742 | "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333",
743 | "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75",
744 | "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff",
745 | "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e",
746 | "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2",
747 | "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef",
748 | "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1",
749 | "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330",
750 | "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d",
751 | "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0",
752 | "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6",
753 | "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea",
754 | "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f",
755 | "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff",
756 | "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99",
757 | "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b",
758 | "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d",
759 | "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be",
760 | "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58",
761 | "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc",
762 | "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83",
763 | "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d",
764 | "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc",
765 | "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66",
766 | "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"
767 | ],
768 | "markers": "python_version >= '3.6'",
769 | "version": "==24.0.1"
770 | },
771 | "requests": {
772 | "hashes": [
773 | "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983",
774 | "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"
775 | ],
776 | "markers": "python_version >= '3.7' and python_version < '4'",
777 | "version": "==2.28.1"
778 | },
779 | "send2trash": {
780 | "hashes": [
781 | "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d",
782 | "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"
783 | ],
784 | "version": "==1.8.0"
785 | },
786 | "six": {
787 | "hashes": [
788 | "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
789 | "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
790 | ],
791 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
792 | "version": "==1.16.0"
793 | },
794 | "sniffio": {
795 | "hashes": [
796 | "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101",
797 | "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"
798 | ],
799 | "markers": "python_version >= '3.7'",
800 | "version": "==1.3.0"
801 | },
802 | "soupsieve": {
803 | "hashes": [
804 | "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759",
805 | "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"
806 | ],
807 | "markers": "python_version >= '3.6'",
808 | "version": "==2.3.2.post1"
809 | },
810 | "stack-data": {
811 | "hashes": [
812 | "sha256:8e515439f818efaa251036af72d89e4026e2b03993f3453c000b200fb4f2d6aa",
813 | "sha256:b92d206ef355a367d14316b786ab41cb99eb453a21f2cb216a4204625ff7bc07"
814 | ],
815 | "version": "==0.6.0"
816 | },
817 | "terminado": {
818 | "hashes": [
819 | "sha256:520feaa3aeab8ad64a69ca779be54be9234edb2d0d6567e76c93c2c9a4e6e43f",
820 | "sha256:bf6fe52accd06d0661d7611cc73202121ec6ee51e46d8185d489ac074ca457c2"
821 | ],
822 | "markers": "python_version >= '3.7'",
823 | "version": "==0.17.0"
824 | },
825 | "tinycss2": {
826 | "hashes": [
827 | "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847",
828 | "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"
829 | ],
830 | "markers": "python_version >= '3.7'",
831 | "version": "==1.2.1"
832 | },
833 | "tomli": {
834 | "hashes": [
835 | "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
836 | "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
837 | ],
838 | "markers": "python_version >= '3.7'",
839 | "version": "==2.0.1"
840 | },
841 | "tornado": {
842 | "hashes": [
843 | "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca",
844 | "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72",
845 | "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23",
846 | "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8",
847 | "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b",
848 | "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9",
849 | "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13",
850 | "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75",
851 | "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac",
852 | "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e",
853 | "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"
854 | ],
855 | "markers": "python_version >= '3.7'",
856 | "version": "==6.2"
857 | },
858 | "traitlets": {
859 | "hashes": [
860 | "sha256:1201b2c9f76097195989cdf7f65db9897593b0dfd69e4ac96016661bb6f0d30f",
861 | "sha256:b122f9ff2f2f6c1709dab289a05555be011c87828e911c0cf4074b85cb780a79"
862 | ],
863 | "markers": "python_version >= '3.7'",
864 | "version": "==5.5.0"
865 | },
866 | "urllib3": {
867 | "hashes": [
868 | "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e",
869 | "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"
870 | ],
871 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4'",
872 | "version": "==1.26.12"
873 | },
874 | "verboselogs": {
875 | "hashes": [
876 | "sha256:d63f23bf568295b95d3530c6864a0b580cec70e7ff974177dead1e4ffbc6ff49",
877 | "sha256:e33ddedcdfdafcb3a174701150430b11b46ceb64c2a9a26198c76a156568e427"
878 | ],
879 | "index": "pypi",
880 | "version": "==1.7"
881 | },
882 | "wcwidth": {
883 | "hashes": [
884 | "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784",
885 | "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"
886 | ],
887 | "version": "==0.2.5"
888 | },
889 | "webencodings": {
890 | "hashes": [
891 | "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
892 | "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
893 | ],
894 | "version": "==0.5.1"
895 | },
896 | "websocket-client": {
897 | "hashes": [
898 | "sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574",
899 | "sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59"
900 | ],
901 | "markers": "python_version >= '3.7'",
902 | "version": "==1.4.2"
903 | },
904 | "zipp": {
905 | "hashes": [
906 | "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1",
907 | "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"
908 | ],
909 | "markers": "python_version >= '3.7'",
910 | "version": "==3.10.0"
911 | }
912 | },
913 | "develop": {}
914 | }
915 |
--------------------------------------------------------------------------------