From 44d53fb6e6041ba5c60084ff32167d1fd9f16780 Mon Sep 17 00:00:00 2001 From: IamIan <102115344+IanIsBreakingRules@users.noreply.github.com> Date: Tue, 16 Jul 2024 10:54:40 -0700 Subject: [PATCH] week 2 programs --- ...1-introduction-to-python-programming.ipynb | 2 +- ...s-and-object-oriented-programming-ii.ipynb | 2 +- Part One/1-11-binary-representation.ipynb | 2 +- Part One/1-2-python-numeric-types.ipynb | 2 +- .../1-3-strings-and-text-input-output.ipynb | 2 +- Part One/1-4-lists.ipynb | 2 +- Part One/1-5-conditions-and-loops.ipynb | 2 +- Part One/1-6-functions.ipynb | 2 +- Part One/1-7-tuples-and-dictionaries.ipynb | 2 +- Part One/1-8-sets-and-hashing.ipynb | 2 +- ...s-and-object-oriented-programmming-i.ipynb | 2 +- Part Two/2-1-motto.py | 13 ++++ Part Two/2-2-Flags.py | 25 ++++++ Part Two/2-3-sense-sensibility.py | 43 +++++++++++ Part Two/3-1.ipynb | 73 ++++++++++++++++++ Part Two/3-2-MatrixDotProd.py | 13 ++++ Part Two/3-3-Slicing.py | 8 ++ Part Two/3-4.py | 21 +++++ Part Two/3-5-MatrixArray.py | 12 +++ Part Two/Sense_and_sensibility.pdf | Bin 0 -> 659910 bytes {samples => Part Two}/lenna.bmp | Bin Part Two/lenna_with_dragon.jpg | Bin 0 -> 44150 bytes Part Two/wales-flag-xs.jpg | Bin 0 -> 39415 bytes Part Two/wales.jpg | Bin 0 -> 306920 bytes samples/airplane.bmp => airplane.bmp | Bin clock.py | 57 ++++++++++++++ graph.py | 0 learning_rates.ipynb | 25 ++++++ samples/read_image.py | 2 +- samples/widget_slider.py | 4 +- 30 files changed, 304 insertions(+), 14 deletions(-) create mode 100644 Part Two/2-1-motto.py create mode 100644 Part Two/2-2-Flags.py create mode 100644 Part Two/2-3-sense-sensibility.py create mode 100644 Part Two/3-1.ipynb create mode 100644 Part Two/3-2-MatrixDotProd.py create mode 100644 Part Two/3-3-Slicing.py create mode 100644 Part Two/3-4.py create mode 100644 Part Two/3-5-MatrixArray.py create mode 100644 Part Two/Sense_and_sensibility.pdf rename {samples => Part Two}/lenna.bmp (100%) create mode 100644 Part Two/lenna_with_dragon.jpg create mode 100644 Part Two/wales-flag-xs.jpg create mode 100644 Part Two/wales.jpg rename samples/airplane.bmp => airplane.bmp (100%) create mode 100644 clock.py create mode 100644 graph.py create mode 100644 learning_rates.ipynb diff --git a/Part One/1-1-introduction-to-python-programming.ipynb b/Part One/1-1-introduction-to-python-programming.ipynb index fa9424e..8568188 100644 --- a/Part One/1-1-introduction-to-python-programming.ipynb +++ b/Part One/1-1-introduction-to-python-programming.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 1: Introduction to Python Programming**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n","\n","If you just start reading this website, you have found the coding site for the introductory Python programming course developed by Dr. Allen Y. Yang. At the time of creating this course, Dr. Yang is in the faculty of the Department of EECS at the University of California, Berkeley. You may find his academic website at: https://people.eecs.berkeley.edu/~yang/\n"," \n","Beyond a research career at Berkeley, Dr. Yang is immensely interested about innovation and entrepreneurship, partially thanks to the geolocation of Berkeley close to Silicon Valley, a famous place in the US and around the world for its technology innovation and many inspiring entrepreneurial stories. Intelligent Racing is just one of many such companies founded in Silicon Valley by Dr. Yang, with the singular purpose to deliver state-of-the-art science and technology learning curricula to students, who will become the next technology leader and successful entrepreneurs.\n","\n","In this course, we will be learning about the programming language of Python. If this is your very first time hearing about Python programming,\n","language, then you are in the right place: This course is for you!\n"," \n","In fact, you are not alone wondering: \n"," 1. How can a computer language help you to communicate with a computer?\n"," 2. What is Python?\n"," 3. Is Python a suitable language to learn for beginners?\n","\n","For the rest of the course in ten lectures, we will gradually learn about the in-and-out of Python programming that is rigorous and fun for beginners. You will learn about all the basic elements of Python to effectively use the language to start coding useful computer programs and solving intersting practical real-world problems. We hope you will find that Python is a quite user-friendly programming language whose use cases may only be limited by your imagination.\n","\n","Of course, being a super user-friendly programming language that is easy to use for humans does not mean that Python is good for every occasion. One can quickly point out several obvious examples: \n","\n","First, Python is not the fastest language to run on computers. There are more traditional languages that were designed to be very easy to be understood by the processors of the computer and hence can be executed faster than Python. \n","\n","Second, Python is not supported by all computing platforms. For example, it is still relatively difficult to code up and run Python programs on iOS or Android systems natively. To best develop applications that run on mobile platforms, one is recommended to continue their programming journey to pick up some other languages."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","In this interactive lecture nodes, written in the style of Jupyter Notebook, we will impose a prelude section for each lecture called *Keywords*. This is the place we will help the learner to highlight some new technical jargons that will be introduced more formally in the lecture note. Our goal is that the learner can take advantage of this structure to quickly familarize themselves with the upcoming new concepts, and the section together with the later Summary section may also help the learner to better review the content of each lecture after taking the classes.\n","\n","* **Jupyter Notebook**: Jupyter Notebook is an open-source computer document format developed by Project Jupyter Foundation. The document can be hosted and interactively edited within a web browser similar to a webpage, and then the web browser may connect with several supported language kernels to interpret the code embedded within the document. A primary programming language used in Jupyter Notebook is Python.\n","* **Interpreted language**: Python is an interpreted language that can be understood and executed by a computer line by line. \n","* **Function**: a function in a programming language is a piece of stand-alone code that encaptulates a set of starting conditions set by its input arguments and a set of return results by its return arguments. \n","* **Data type**: Data when stored in computer memory must declare its data type, such as integer, floating point, text (as strings), etc.\n","* **Debug**: Debug is a programming jargon referring to the practice of finding programming errors when designing a computer code."]},{"cell_type":"markdown","metadata":{},"source":["# Running First Python Code in Command Line\n","After we have done a brief motivation about the Python language, we arrive at the best part of our coding exercise. Below, we are going to see, for the first time, how Python executes some basic computing commands. But before we do that, let us understand how a typical Python language command is executed by computer that is dictated by its language standards.\n","\n","The most important rule to remember for Python is that: *it is a high-level, interpreted language.* Let us further consider this statement below.\n","1. *Python is a high-level language*. This usually means two things: First, programming statements of a high-level language broadly adopt words in natural languages (mostly English) and math symbols that are fairly easy for humans to understand. Second, high-level statements are more descriptive about user's intent to solve a problem and more abstract about the execution of the statements by the computer, compared to low-level languages that typically are descriptive about computer processor's precise but sometimes rather tedious steps to execute the code.\n","2. *Python is an interpreted language*. It means the execution of language statements is more direct and freely, compared to compiled languages. A compiled language must go through a compiling process before a code can be executed. An interpreted language such as Python allows users to freely execute any one line of or a block of multiple lines of code without explicitly invoking a compiling process.\n","\n","Let us immediately run an example to have Python solving a simple problem for us. In this example, we want to know the result of an arithmetic problem: 3+2 = ?\n","\n","To get the result, this code site has prepared the following code block. On the left-hand side at the beginning of the code block, there is a triangle symbol that means asking Python to **RUN** this code. Please use your mouse to left click this triangle symbol and observe the result of your action. "]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"outputs":[],"source":["3+2"]},{"cell_type":"markdown","metadata":{},"source":["Congratulations! You have just run your first Python code. The result of 5 can be seen in an *output* block, which is usually called **the terminal output** or **the console output**. It is so called because, before the invention of graphical user interface (GUI), all computer intput/output interaction with users was done on text-based terminal or console environment. Therefore, in many programming languages, text output by default always displays in the terminal environment. In fact, you may find the terminal application in most popular operating systems including Windows, Mac OSX, and Linux. \n","\n","We also see in this coding exercise, the Python statement includes three elements, namely, an integer number 3, an integer number 2, and an arithmetic operator +. Python adopts the same meanings of these math symbols and the proper order how an addition calculation should be denoted in arithmetic. Therefore, this is an example of a high-level programming.\n","\n","By clicking the **RUN** button, Python immediately executes the statement and results its computation result in the line immediately following the statement. This is thanks to the fact that Python is an interpreted language.\n","\n","Another important fact about running the above code is that the reader should be aware that we are in a special Python development environment. A development environment is itself a computer program, where the code of a program can be written and more importantly often be executed within the environment. The development environment implemented by Kaggle uses the development style of so-called Jupyter Notebook. This style of Python programming allows users to directly edit and run their code on web browsers, and the users can conveniently select to run any particular code block or run all the code blocks together on the same page. If you pay attention to the top of this Kaggle webpage, right under the menu bar, there is a double-triangle button that is marked as **RUN ALL**. This is the command to sequentially run all the code blocks on this page in one shot. You may try this function to see the result."]},{"cell_type":"markdown","metadata":{},"source":["Next, let us see Python interprets and executes a block of code together (by clicking the **RUN** button of the next code block):"]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"outputs":[],"source":["print(3+2.0)\n","print(17/3)"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, we see the use of **print()** function. As a special rule of Jupyter Notebook environment, if a code block contains only arithmetic equations, only the last equation will output its result on the browser. In the above code block, we want a block to contain tasks to evaluate three equations. We then use a Python keyword **print()** to ask the environment to print out each of the three results. \n","\n","A function in a high-level programming language takes in one or more input arguments, and then output one or more return values that are also called output. In Python, input arguments of a function such as **print()** are denoted using the pair of paratheses. For example, the input of the first print function is 3+2.0. After you **RUN** the code, its output result is 5.0. The input of the second print function is 17/3, and its output result is 5.666666666666667."]},{"cell_type":"markdown","metadata":{},"source":["You may also notice from the above code block that the Python calculation results from two seemingly very similar expressions, one of which is 3+2 and the other is 3+2.0, also return similar but different values. The result for 3+2 is 5, and for 3+2.0 is 5.0\n","\n","The difference lies in the way numeric numbers are represented in computer. For numbers 3, 2, and 5, they are called integers. But for 2.0 and 5.0, they are called floating numbers, or floats. Even when mathematically 5 and 5.0 are equal in magnitude, the use of fraction indicates one of them (i.e., 5) is an integer while the other that contains the fraction part is a float. We will discuss Python numeric type in more detail in the next lecture."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print(type(5))\n","print(type(5.0))"]},{"cell_type":"markdown","metadata":{},"source":["The type of a number or a function return value can be explicitly checked using another useful Python function, with the keyword **type()**. We observe after running the above code block, that we print the type of number 5 and the type of number 5.0, respectively. \n","\n","To correctly read the two statements, the results from nested functions are calculated in stages from right to the left. For example, the statement **print(type(5))** should be understood as firstly query the type of number 5 using the type() function, then the output of the type() function is fed into the second print() function as its input. The final result is the print out of the type of the integer 5.\n","\n","Finally, let us observe the information from the output of the two statements. The first result indicates number 5 is an 'int' type, which is a text string representing the integer type. The second result indicates number 5.0 is a 'float' type, a text string representing the float type. The two results also indicate that both the int and float types are classes. In fact, all Python numeric or other more complex value types are implemented as \"classes\". The use of class concept signals the third attributes of Python language (the first two being that it is high-level and interpreted):\n","\n","*Python is an object-oriented programming language.*\n","\n","In later lectures, we will go over the principles of object-oriented programming in details. For now, we will conclude the first lecture. "]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* Python is a high-level, interpreted programming language.\n","* Function print() outputs its input argument(s) as string output\n","* Python displays text output by print() in the terminal environment.\n","* In Jupyter Notebook or the terminal, Python will also evaluate and print out the value of the last numeric expression.\n","* Function type() outputs the type of the input argument.\n","* A class-type variable indicates the variable is created as a class type in object-oriented programming."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Create two integer variables: a = 10 and b = 5. Then use print() function to print out the division result of a / b. \n","\n","2. Please pay attention to the format of the above result, which indicates that it is not an integer. To verify that, continue with the above program, and print out the output of the function type(a/b). What can you say about this result?\n","\n","3. Print out the result of 10 factorial, that is, the product of all positive integers from 1 to 10.\n","\n","4. Can you list a few criteria that set apart between high-level programming languages such as Python and low-level programming languages used in early days of the computer industry?\n","\n","5. Debug: Please correct the code below so that it can be correctly run in Python"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-27T21:23:43.653811Z","iopub.status.busy":"2021-05-27T21:23:43.653419Z","iopub.status.idle":"2021-05-27T21:23:43.660137Z","shell.execute_reply":"2021-05-27T21:23:43.658547Z","shell.execute_reply.started":"2021-05-27T21:23:43.653772Z"},"trusted":true},"outputs":[],"source":["Print 3 + 2"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30527,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.12"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 1: Introduction to Python Programming**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n","\n","If you just start reading this website, you have found the coding site for the introductory Python programming course developed by Dr. Allen Y. Yang. At the time of creating this course, Dr. Yang is in the faculty of the Department of EECS at the University of California, Berkeley. You may find his academic website at: https://people.eecs.berkeley.edu/~yang/\n"," \n","Beyond a research career at Berkeley, Dr. Yang is immensely interested about innovation and entrepreneurship, partially thanks to the geolocation of Berkeley close to Silicon Valley, a famous place in the US and around the world for its technology innovation and many inspiring entrepreneurial stories. Intelligent Racing is just one of many such companies founded in Silicon Valley by Dr. Yang, with the singular purpose to deliver state-of-the-art science and technology learning curricula to students, who will become the next technology leader and successful entrepreneurs.\n","\n","In this course, we will be learning about the programming language of Python. If this is your very first time hearing about Python programming,\n","language, then you are in the right place: This course is for you!\n"," \n","In fact, you are not alone wondering: \n"," 1. How can a computer language help you to communicate with a computer?\n"," 2. What is Python?\n"," 3. Is Python a suitable language to learn for beginners?\n","\n","For the rest of the course in ten lectures, we will gradually learn about the in-and-out of Python programming that is rigorous and fun for beginners. You will learn about all the basic elements of Python to effectively use the language to start coding useful computer programs and solving intersting practical real-world problems. We hope you will find that Python is a quite user-friendly programming language whose use cases may only be limited by your imagination.\n","\n","Of course, being a super user-friendly programming language that is easy to use for humans does not mean that Python is good for every occasion. One can quickly point out several obvious examples: \n","\n","First, Python is not the fastest language to run on computers. There are more traditional languages that were designed to be very easy to be understood by the processors of the computer and hence can be executed faster than Python. \n","\n","Second, Python is not supported by all computing platforms. For example, it is still relatively difficult to code up and run Python programs on iOS or Android systems natively. To best develop applications that run on mobile platforms, one is recommended to continue their programming journey to pick up some other languages."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","In this interactive lecture nodes, written in the style of Jupyter Notebook, we will impose a prelude section for each lecture called *Keywords*. This is the place we will help the learner to highlight some new technical jargons that will be introduced more formally in the lecture note. Our goal is that the learner can take advantage of this structure to quickly familarize themselves with the upcoming new concepts, and the section together with the later Summary section may also help the learner to better review the content of each lecture after taking the classes.\n","\n","* **Jupyter Notebook**: Jupyter Notebook is an open-source computer document format developed by Project Jupyter Foundation. The document can be hosted and interactively edited within a web browser similar to a webpage, and then the web browser may connect with several supported language kernels to interpret the code embedded within the document. A primary programming language used in Jupyter Notebook is Python.\n","* **Interpreted language**: Python is an interpreted language that can be understood and executed by a computer line by line. \n","* **Function**: a function in a programming language is a piece of stand-alone code that encaptulates a set of starting conditions set by its input arguments and a set of return results by its return arguments. \n","* **Data type**: Data when stored in computer memory must declare its data type, such as integer, floating point, text (as strings), etc.\n","* **Debug**: Debug is a programming jargon referring to the practice of finding programming errors when designing a computer code."]},{"cell_type":"markdown","metadata":{},"source":["# Running First Python Code in Command Line\n","After we have done a brief motivation about the Python language, we arrive at the best part of our coding exercise. Below, we are going to see, for the first time, how Python executes some basic computing commands. But before we do that, let us understand how a typical Python language command is executed by computer that is dictated by its language standards.\n","\n","The most important rule to remember for Python is that: *it is a high-level, interpreted language.* Let us further consider this statement below.\n","1. *Python is a high-level language*. This usually means two things: First, programming statements of a high-level language broadly adopt words in natural languages (mostly English) and math symbols that are fairly easy for humans to understand. Second, high-level statements are more descriptive about user's intent to solve a problem and more abstract about the execution of the statements by the computer, compared to low-level languages that typically are descriptive about computer processor's precise but sometimes rather tedious steps to execute the code.\n","2. *Python is an interpreted language*. It means the execution of language statements is more direct and freely, compared to compiled languages. A compiled language must go through a compiling process before a code can be executed. An interpreted language such as Python allows users to freely execute any one line of or a block of multiple lines of code without explicitly invoking a compiling process.\n","\n","Let us immediately run an example to have Python solving a simple problem for us. In this example, we want to know the result of an arithmetic problem: 3+2 = ?\n","\n","To get the result, this code site has prepared the following code block. On the left-hand side at the beginning of the code block, there is a triangle symbol that means asking Python to **RUN** this code. Please use your mouse to left click this triangle symbol and observe the result of your action. "]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"outputs":[],"source":["3+2"]},{"cell_type":"markdown","metadata":{},"source":["Congratulations! You have just run your first Python code. The result of 5 can be seen in an *output* block, which is usually called **the terminal output** or **the console output**. It is so called because, before the invention of graphical user interface (GUI), all computer intput/output interaction with users was done on text-based terminal or console environment. Therefore, in many programming languages, text output by default always displays in the terminal environment. In fact, you may find the terminal application in most popular operating systems including Windows, Mac OSX, and Linux. \n","\n","We also see in this coding exercise, the Python statement includes three elements, namely, an integer number 3, an integer number 2, and an arithmetic operator +. Python adopts the same meanings of these math symbols and the proper order how an addition calculation should be denoted in arithmetic. Therefore, this is an example of a high-level programming.\n","\n","By clicking the **RUN** button, Python immediately executes the statement and results its computation result in the line immediately following the statement. This is thanks to the fact that Python is an interpreted language.\n","\n","Another important fact about running the above code is that the reader should be aware that we are in a special Python development environment. A development environment is itself a computer program, where the code of a program can be written and more importantly often be executed within the environment. The development environment implemented by Kaggle uses the development style of so-called Jupyter Notebook. This style of Python programming allows users to directly edit and run their code on web browsers, and the users can conveniently select to run any particular code block or run all the code blocks together on the same page. If you pay attention to the top of this Kaggle webpage, right under the menu bar, there is a double-triangle button that is marked as **RUN ALL**. This is the command to sequentially run all the code blocks on this page in one shot. You may try this function to see the result."]},{"cell_type":"markdown","metadata":{},"source":["Next, let us see Python interprets and executes a block of code together (by clicking the **RUN** button of the next code block):"]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"outputs":[],"source":["print(3+2.0)\n","print(17/3)"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, we see the use of **print()** function. As a special rule of Jupyter Notebook environment, if a code block contains only arithmetic equations, only the last equation will output its result on the browser. In the above code block, we want a block to contain tasks to evaluate three equations. We then use a Python keyword **print()** to ask the environment to print out each of the three results. \n","\n","A function in a high-level programming language takes in one or more input arguments, and then output one or more return values that are also called output. In Python, input arguments of a function such as **print()** are denoted using the pair of paratheses. For example, the input of the first print function is 3+2.0. After you **RUN** the code, its output result is 5.0. The input of the second print function is 17/3, and its output result is 5.666666666666667."]},{"cell_type":"markdown","metadata":{},"source":["You may also notice from the above code block that the Python calculation results from two seemingly very similar expressions, one of which is 3+2 and the other is 3+2.0, also return similar but different values. The result for 3+2 is 5, and for 3+2.0 is 5.0\n","\n","The difference lies in the way numeric numbers are represented in computer. For numbers 3, 2, and 5, they are called integers. But for 2.0 and 5.0, they are called floating numbers, or floats. Even when mathematically 5 and 5.0 are equal in magnitude, the use of fraction indicates one of them (i.e., 5) is an integer while the other that contains the fraction part is a float. We will discuss Python numeric type in more detail in the next lecture."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print(type(5))\n","print(type(5.0))"]},{"cell_type":"markdown","metadata":{},"source":["The type of a number or a function return value can be explicitly checked using another useful Python function, with the keyword **type()**. We observe after running the above code block, that we print the type of number 5 and the type of number 5.0, respectively. \n","\n","To correctly read the two statements, the results from nested functions are calculated in stages from right to the left. For example, the statement **print(type(5))** should be understood as firstly query the type of number 5 using the type() function, then the output of the type() function is fed into the second print() function as its input. The final result is the print out of the type of the integer 5.\n","\n","Finally, let us observe the information from the output of the two statements. The first result indicates number 5 is an 'int' type, which is a text string representing the integer type. The second result indicates number 5.0 is a 'float' type, a text string representing the float type. The two results also indicate that both the int and float types are classes. In fact, all Python numeric or other more complex value types are implemented as \"classes\". The use of class concept signals the third attributes of Python language (the first two being that it is high-level and interpreted):\n","\n","*Python is an object-oriented programming language.*\n","\n","In later lectures, we will go over the principles of object-oriented programming in details. For now, we will conclude the first lecture. "]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* Python is a high-level, interpreted programming language.\n","* Function print() outputs its input argument(s) as string output\n","* Python displays text output by print() in the terminal environment.\n","* In Jupyter Notebook or the terminal, Python will also evaluate and print out the value of the last numeric expression.\n","* Function type() outputs the type of the input argument.\n","* A class-type variable indicates the variable is created as a class type in object-oriented programming."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Create two integer variables: a = 10 and b = 5. Then use print() function to print out the division result of a / b. \n","\n","2. Please pay attention to the format of the above result, which indicates that it is not an integer. To verify that, continue with the above program, and print out the output of the function type(a/b). What can you say about this result?\n","\n","3. Print out the result of 10 factorial, that is, the product of all positive integers from 1 to 10.\n","\n","4. Can you list a few criteria that set apart between high-level programming languages such as Python and low-level programming languages used in early days of the computer industry?\n","\n","5. Debug: Please correct the code below so that it can be correctly run in Python"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["2.0\n","3628800\n"]}],"source":["#Q1\n","a=10\n","b=5\n","print(a/b)\n","\n","#Q2\n","type(a/b)\n","#Q3\n","import math\n","print(math.factorial(10))\n","#Q4\n","#Open source\n","#Easier to understand and modify"]},{"cell_type":"code","execution_count":6,"metadata":{"execution":{"iopub.execute_input":"2021-05-27T21:23:43.653811Z","iopub.status.busy":"2021-05-27T21:23:43.653419Z","iopub.status.idle":"2021-05-27T21:23:43.660137Z","shell.execute_reply":"2021-05-27T21:23:43.658547Z","shell.execute_reply.started":"2021-05-27T21:23:43.653772Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["5\n"]}],"source":["print(3 + 2)"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30527,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-10-classes-and-object-oriented-programming-ii.ipynb b/Part One/1-10-classes-and-object-oriented-programming-ii.ipynb index 75deeee..7560ed5 100644 --- a/Part One/1-10-classes-and-object-oriented-programming-ii.ipynb +++ b/Part One/1-10-classes-and-object-oriented-programming-ii.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 10: Classes and Object-Oriented Programming II**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* Inheritance: Inheritance refers to the ability to create a modified class type based on an existing class type. The modified class is called a subclass of the existing class."]},{"cell_type":"markdown","metadata":{},"source":["# Inheritance\n","\n","In the last lecture, we discussed the important encapsulation property of classes in Python. In this lecture, we will cover the other equally important properties. The first unique property is inheritance. Let us see an example:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialized with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n"," \n","class Student(Person):\n"," student_record = dict()\n"," \n"," def __init__(self, first_name, last_name, class_year):\n"," super().__init__(first_name, last_name)\n","\n"," if type(class_year)!=int:\n"," raise TypeError('class_year shall be an integer')\n"," if class_year < 1900 or class_year>2999:\n"," raise ValueError('Class year value is not supported')\n","\n"," if class_year in Student.student_record:\n"," Student.student_record[class_year] += 1\n"," else:\n"," Student.student_record[class_year] = 1\n","\n"," self.student_ID = str(class_year) + \\\n"," format(Student.student_record[class_year],'04d')\n"," Student.student_record[self.student_ID] = (first_name, last_name)\n","\n"," def year_of_graduation(self):\n"," return (int(self.student_ID[0:4]))\n"," \n","x1 = Student('John', 'Smith', 2024)\n","x1.age = 20\n","print(x1.student_ID)\n","print(x1.isAdult(x1.age))\n","x2 = Student('Jane', 'Doe', 2024)\n","print(x2.student_record)"]},{"cell_type":"markdown","metadata":{},"source":["In this example, we first repeat the definition of the Person class from the last lecture. Since a person can take on many different roles in the society, it is necessary to further define their more specific properties. For example, if a person is a student, then they will need to be assigned a unique student ID in school. In OOP languages such as Python, this relationship can be represented by defining a new *subclass* of Person, called Student. Conversely, Person is called the *superclass* of Student:\n","\n"," class Student(Person):\n"," \n","This declaration defines Student class to inherit all the attributes and methods from Person class first, and then the subsequent code block after the colon mark either overwrite and modify the methods in the superclass, or further define new methods and attributes.\n","\n","First, Student class overwrites the initialization method of Person class, which is typically a common practice for a subclass. However, part of the aims of the initialization process overlaps with that in the superclass, such as assigning the first name and last name attributes. As a subclass, Student benefits by the fact that a subclass can call its superclass' methods using the keyword **super**. *super().__init__()* instructs Python to call the same function as defined in its superclass. We now see that inheritance passes down relevant methods from superclasses to subclasses.\n","\n","As Student class is a subclass of Person, it is also a different class. Therefore, its *__init__()* needs to be modified. In the example, we added two new attributes:\n","\n"," * student_ID: As its prefix *self* indicates, this is an instance attribute that records a student's unique ID. The student ID is of the string type.\n"," * student_record: This is a class attribute of the dictionary type. Its entries contain two types of data. The first type records under each class year how many students so far have enrolled. For example, (2024, 2) indicates the Class of 2024 has two students. Then the second type records under each unique student ID the first and last name of the student. \n"," \n","We want to make a note here that in the assignment of *student_ID* string, we demonstrated the use of the built-in function *format()*. This is a pretty powerful function that, as its name suggests, converts the first argument into a format specified by the parameter string as the second argument. As the variation of its use cases is too broad, we encourage the reader to refer to Python's online document:\n","\n"," https://docs.python.org/3/library/functions.html?highlight=format#format\n"," \n","In the example, though, the parameter string '04d' means converting to an integer format with at least 4 digits. In other words, integer 1 will be converted to a string '0001'. This format fits the typical ID number format in the real world.\n","\n","Finally, we see that the subclass Student further defines a unique method called *year_of_graduation()*. This method is only relevant to those people who are students, and clearly is not general enough to be associated with the superclass Person."]},{"cell_type":"markdown","metadata":{},"source":["# Abstract Methods\n","\n","Abstract methods are those that are declared but not implemented. Abstract methods are useful in creating superclasses where certain methods must be concretely defined in their subclasses. For example, all shapes may have a property of *area size*; however, a specific algorithm to calculate the area size can be implemented for specific shape classes such as squares, circles, etc. Let us examine the sample code below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["import math\n","\n","class Shape:\n","\n"," def get_area(self):\n"," ''' virtual method to calculate area of a shape'''\n"," raise NotImplementedError\n","\n"," def is_abstract(self):\n"," ''' return True if a shape has been assigned to the class'''\n"," if self.__class__ == Shape:\n"," return True\n"," else:\n"," return False\n","\n","class Square(Shape):\n"," ''' A subclass of Shape, specifically for calculating square area'''\n","\n"," def __init__(self, width):\n"," self.width = width\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a square is its width times width'''\n"," return self.width*self.width\n"," \n","class Circle(Shape):\n"," ''' A subclass of Shape, specifically for calculating circle area'''\n","\n"," def __init__(self, radius):\n"," self.radius = radius\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a circle is pi times radius square'''\n"," return math.pi * self.radius ** 2.0\n","\n","x1 = Square(5)\n","print('Is class initialized: ',x1.is_abstract())\n","print(x1.get_area())\n","\n","x2 = Circle(5)\n","print('Is class initialized: ', x2.is_abstract())\n","print(x2.get_area())\n","\n","x0 = Shape()\n","print('Is class initialized: ', x0.is_abstract())\n","print(x0.get_area())"]},{"cell_type":"markdown","metadata":{},"source":["The sample code above includes several new techniques related to the use of classes. First, the code defines a base class *Shape* and an **abstract method** *get_area()*. In the base class, *get_area()* is not implemented. Then the Shape class is inherited by two subclasses: *Square* and *Circle*. At the subclass level, when the shape attribute is properly initialized such as the width for Square and the radius for Circle, then *get_area()* is implemented.\n","\n","The fact that in *Shape* class *get_area()* is abstract can be declared in several ways, depending on the programmer's preference:\n","\n"," * Using *raise NotImplementedError*: When a method is abstract, *raise NotImplementedError* will interrupt the program when the method is called.\n"," * Using pass: One can also choose to silently ignore the fact that an abstract method is called, by writing *pass* function as the function body. *pass* function as its name suggests is a special statement in Python, which informs Python that the operation will not generate any results. \n"," * Using *abstract base class* (ABC): There is a special class that can be declared as the superclass of other classes. The *abc* module can be imported, which also contains a decorator called *@abc.abstractmethod*. Using an abstract method decorator is a very powerful statement, in that Python will not allow a class instance to be created if the class contains abstract method decorators. \n"," \n","Finally, the sample code demonstrates another more user-friendly technique to verify during runtime whether a class has implemented its superclass' abstract methods. In Shape class, the code does implement a function called *is_abstract()*. The purpose of the function is to inform a user of the class or its subclasses whether the class contains abstract methods. Since the definition of *get_area()* uses the first approach above, assigning a class object will not return a runtime error. We see from the output result that calling get_area() from a Square object or Circle object will return False, while from a Shape object will return True.\n","\n","This result shows a quite interesting ability of OOP in Python, that a method defined in a superclass can correctly calculate its return even when called from its subclasses. This ability will be credited to the inheritance property of classes. Technically, this is implemented using a special variable self.\\_\\_class\\_\\_. As its name suggests, it returns a reference of the current class name of the object. Thanks to the inheritance property, all subclasses of the superclass Shape will run the same code in *is_abstract()*. But the reference value of self.\\_\\_class\\_\\_ will be only determined during the runtime. This is an effective way to change the behavior of inherited classes in their definitions, without knowing during runtime which variable eventually binds with the classes. \n"]},{"cell_type":"markdown","metadata":{},"source":["# Special Variables and Methods\n","\n","Above we have seen that *__class__* for a class object is a special variable. We have also seen the use of *__init__()* method that always exists but can be customized by the user. As it turns out, for a Python class, a list of special variables and special methods always get created without user intervention. In this part, we will learn the usage of several important special variables and special methods:\n","\n"," * __file__: Path to the current Python file\n"," * __class__: Reference of the current class name\n"," * __doc__: Docstring record\n"," * __init__(): Class constructor\n"," * __hash__(): Hash function\n"," \n"," \n","All special variables and special methods for Python classes start with two underscores and end with two underscores. However, for those readers where Python is not their first OOP language, one of the most controversial rules in Python is the fact that Python classes have no private or protected attributes or methods, in other words, all attributes and methods are public (meaning they are visible at any place where their objects are defined). In the past examples, we have seen that the code can query and change an attribute of a class quite at will, and Python does not attempt to prevent that under any circumstances.\n","\n","Nevertheless, Python users in the past have created some naming convention that serves to help reminding themselves and other users about the limited scope of some variables. Note that these rules as we will see below are merely recommendations, and they are not enforced by Python system.\n","\n"," * Single underscore _var: Intended for internal use only in class methods.\n"," * Double underscores __var: Intended exclusively for one class but not its subclasses.\n","\n","That being said, Python does apply a trick to double underscore variables. Specifically, Python will protect *__var* to be associated with a single class by **name mangling** the class name before *__var*. In other words, if *__var* is defined within a class, when referenced outside the class definition, its name will be changed to object._CLASSNAME__var. The name mangling will not completely prevent other code to use an internal class variable, but the other code does need to go through the extra trouble to gain access to such internal variables. "]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["class PrefixPostfix:\n"," def __init__(self): # class constructor\n"," self._internal = 0\n"," self.__double_underscore = 'name mangling'\n"," self.__prefix_postfix_double__ = 'no change'\n","\n"," def print_out(self):\n"," print('_internal: ', self._internal)\n"," print('__double_underscore: ', self.__double_underscore)\n"," print('__prefix_postfix_double__: ', self.__prefix_postfix_double__)\n","\n"," def __del__(self): # class destructor\n"," print('Goodbye!')\n","\n"," def __eq__(self, other):\n"," if type(self)!=type(other):\n"," raise TypeError('PrefixPostfix == must compare same type')\n"," return('Operator has been hijacked: ' + str(self._internal == other._internal))\n","\n","test = PrefixPostfix()\n","print('------ print outside class definition ------')\n","print(dir(test))\n","print(test._internal)\n","print(test.__prefix_postfix_double__)\n","print(test._PrefixPostfix__double_underscore)\n","print(test == test)\n","del(test)"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we define three instance variables using special naming convention: \\_internal, \\_\\_double_underscore, and \\_\\_prefix_postfix_double__. First, we shall see that whether the \\_internal and \\__prefix_postfix_double__ are used internally or outside the class definition, their variable names are the same.\n","\n","However, if we want to reference \\_\\_double_underscore outside the class, it must be referenced as \\_PrefixPostfix__double_underscore__. In fact, all the attributes in a class can be listed out by calling a built-in function *dir()*, as we have also shown above. We can verify from this list that the name \\_\\_double_underscore has been modified by the **name mangling** convention.\n","\n","Finally, the sample code demonstrates the use of two other special methods: \\_\\_del\\_\\_() and \\_\\_eq\\_\\_. \\_\\_del\\_\\_() is also known as the class destructor. As opposite to the class constructor \\_\\_init\\_\\_(), \\_\\_del\\_\\_() when the class object is being deleted either automatically by Python (when doing automatic garbage collection) or manually by calling *del()*.\n","\n","\\_\\_eq\\_\\_() on the other hand belongs to a list of comparison operators for classes. When the \"==\" operator is used to compare two class objects, in fact, the code block defined within \\_\\_eq\\_\\_() function is called. When we customize this operator, the code can have the function to return any arbitrary values. The complete list of comparison operators are listed below:\n","\n"," *__lt__(self, other): <\n"," *__le__(self, other): <=\n"," *__eq__(self, other): ==\n"," *__ne__(self, other) != \n"," *__gt__(self, other): >\n"," *__ge__(self, other): >=\n"]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Using the superclass Shape in the lecture, define a subclass called Rectangle, then update the methods \\_\\_init\\_\\_() and get_area(). Tip: A Rectangle has two sides, called width and length.\n","\n","2. In the Person class in the lecture, please code a class method using the @classmethod decorator called set_retirement_age(). The function will modify the value of the class attribute retirement_age().\n","\n","3. In the Circle class in the lecture, please code a static method using the @staticmethod decorator called get_radius(area). The function will return the radius of a circle given its area size as the input argument.\n","\n","4. Please implement the special method \\_\\_lt__() for the Shape class. Specifically, the method defines the operator \"<\" to compare the area sizes of any two subclasses of Shape. Pay attention to the fact that although the special method is defined in the superclass Shape, it remains effective to compare area sizes of any subclasses, even when the two subclasses are of different type. For instance, please verify that the method can be used to compare the area sizes between a Square class object and a Circle class object.\n","\n","5. Many built-in Python classes support the special operator \"+\". For instance, for integers, a + b executes an addition operation; while for strings, s1 + s2 executes an concatenation operation. For a user-defined class, the implementation of the same operator \"+\" can be defined by coding the special method \\_\\_add__(). \n","\n"," In this exercise, please create a new \\_\\_add__() method in the Square class in the lecture. If two squares have the same width, then square_1 + square_2 would return a Rectangle class object (as defined in Exercise 1 above) with the same width but 2*width as its length. If two squares are of different width, \\_\\_add__() should return None."]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Create a subclass of the BankAccount class in the previous lecture, called StockAccount. Adding to the superclass, the subclass should have at least one more attribute of stock_positions as a dictionary type. Each dictionary entry has the stock ticker name as the key, and the customer's size of the stock as the value. Please also design relevant methods to update the values in stock_positions, such as retrieving stock price, buying or selling a stock based on its stock price, and linking the buying and selling with the account's cash_position."]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.4"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 10: Classes and Object-Oriented Programming II**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* Inheritance: Inheritance refers to the ability to create a modified class type based on an existing class type. The modified class is called a subclass of the existing class."]},{"cell_type":"markdown","metadata":{},"source":["# Inheritance\n","\n","In the last lecture, we discussed the important encapsulation property of classes in Python. In this lecture, we will cover the other equally important properties. The first unique property is inheritance. Let us see an example:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialized with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n"," \n","class Student(Person):\n"," student_record = dict()\n"," \n"," def __init__(self, first_name, last_name, class_year):\n"," super().__init__(first_name, last_name)\n","\n"," if type(class_year)!=int:\n"," raise TypeError('class_year shall be an integer')\n"," if class_year < 1900 or class_year>2999:\n"," raise ValueError('Class year value is not supported')\n","\n"," if class_year in Student.student_record:\n"," Student.student_record[class_year] += 1\n"," else:\n"," Student.student_record[class_year] = 1\n","\n"," self.student_ID = str(class_year) + \\\n"," format(Student.student_record[class_year],'04d')\n"," Student.student_record[self.student_ID] = (first_name, last_name)\n","\n"," def year_of_graduation(self):\n"," return (int(self.student_ID[0:4]))\n"," \n","x1 = Student('John', 'Smith', 2024)\n","x1.age = 20\n","print(x1.student_ID)\n","print(x1.isAdult(x1.age))\n","x2 = Student('Jane', 'Doe', 2024)\n","print(x2.student_record)"]},{"cell_type":"markdown","metadata":{},"source":["In this example, we first repeat the definition of the Person class from the last lecture. Since a person can take on many different roles in the society, it is necessary to further define their more specific properties. For example, if a person is a student, then they will need to be assigned a unique student ID in school. In OOP languages such as Python, this relationship can be represented by defining a new *subclass* of Person, called Student. Conversely, Person is called the *superclass* of Student:\n","\n"," class Student(Person):\n"," \n","This declaration defines Student class to inherit all the attributes and methods from Person class first, and then the subsequent code block after the colon mark either overwrite and modify the methods in the superclass, or further define new methods and attributes.\n","\n","First, Student class overwrites the initialization method of Person class, which is typically a common practice for a subclass. However, part of the aims of the initialization process overlaps with that in the superclass, such as assigning the first name and last name attributes. As a subclass, Student benefits by the fact that a subclass can call its superclass' methods using the keyword **super**. *super().__init__()* instructs Python to call the same function as defined in its superclass. We now see that inheritance passes down relevant methods from superclasses to subclasses.\n","\n","As Student class is a subclass of Person, it is also a different class. Therefore, its *__init__()* needs to be modified. In the example, we added two new attributes:\n","\n"," * student_ID: As its prefix *self* indicates, this is an instance attribute that records a student's unique ID. The student ID is of the string type.\n"," * student_record: This is a class attribute of the dictionary type. Its entries contain two types of data. The first type records under each class year how many students so far have enrolled. For example, (2024, 2) indicates the Class of 2024 has two students. Then the second type records under each unique student ID the first and last name of the student. \n"," \n","We want to make a note here that in the assignment of *student_ID* string, we demonstrated the use of the built-in function *format()*. This is a pretty powerful function that, as its name suggests, converts the first argument into a format specified by the parameter string as the second argument. As the variation of its use cases is too broad, we encourage the reader to refer to Python's online document:\n","\n"," https://docs.python.org/3/library/functions.html?highlight=format#format\n"," \n","In the example, though, the parameter string '04d' means converting to an integer format with at least 4 digits. In other words, integer 1 will be converted to a string '0001'. This format fits the typical ID number format in the real world.\n","\n","Finally, we see that the subclass Student further defines a unique method called *year_of_graduation()*. This method is only relevant to those people who are students, and clearly is not general enough to be associated with the superclass Person."]},{"cell_type":"markdown","metadata":{},"source":["# Abstract Methods\n","\n","Abstract methods are those that are declared but not implemented. Abstract methods are useful in creating superclasses where certain methods must be concretely defined in their subclasses. For example, all shapes may have a property of *area size*; however, a specific algorithm to calculate the area size can be implemented for specific shape classes such as squares, circles, etc. Let us examine the sample code below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["import math\n","\n","class Shape:\n","\n"," def get_area(self):\n"," ''' virtual method to calculate area of a shape'''\n"," raise NotImplementedError\n","\n"," def is_abstract(self):\n"," ''' return True if a shape has been assigned to the class'''\n"," if self.__class__ == Shape:\n"," return True\n"," else:\n"," return False\n","\n","class Square(Shape):\n"," ''' A subclass of Shape, specifically for calculating square area'''\n","\n"," def __init__(self, width):\n"," self.width = width\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a square is its width times width'''\n"," return self.width*self.width\n"," \n","class Circle(Shape):\n"," ''' A subclass of Shape, specifically for calculating circle area'''\n","\n"," def __init__(self, radius):\n"," self.radius = radius\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a circle is pi times radius square'''\n"," return math.pi * self.radius ** 2.0\n","\n","x1 = Square(5)\n","print('Is class initialized: ',x1.is_abstract())\n","print(x1.get_area())\n","\n","x2 = Circle(5)\n","print('Is class initialized: ', x2.is_abstract())\n","print(x2.get_area())\n","\n","x0 = Shape()\n","print('Is class initialized: ', x0.is_abstract())\n","print(x0.get_area())"]},{"cell_type":"markdown","metadata":{},"source":["The sample code above includes several new techniques related to the use of classes. First, the code defines a base class *Shape* and an **abstract method** *get_area()*. In the base class, *get_area()* is not implemented. Then the Shape class is inherited by two subclasses: *Square* and *Circle*. At the subclass level, when the shape attribute is properly initialized such as the width for Square and the radius for Circle, then *get_area()* is implemented.\n","\n","The fact that in *Shape* class *get_area()* is abstract can be declared in several ways, depending on the programmer's preference:\n","\n"," * Using *raise NotImplementedError*: When a method is abstract, *raise NotImplementedError* will interrupt the program when the method is called.\n"," * Using pass: One can also choose to silently ignore the fact that an abstract method is called, by writing *pass* function as the function body. *pass* function as its name suggests is a special statement in Python, which informs Python that the operation will not generate any results. \n"," * Using *abstract base class* (ABC): There is a special class that can be declared as the superclass of other classes. The *abc* module can be imported, which also contains a decorator called *@abc.abstractmethod*. Using an abstract method decorator is a very powerful statement, in that Python will not allow a class instance to be created if the class contains abstract method decorators. \n"," \n","Finally, the sample code demonstrates another more user-friendly technique to verify during runtime whether a class has implemented its superclass' abstract methods. In Shape class, the code does implement a function called *is_abstract()*. The purpose of the function is to inform a user of the class or its subclasses whether the class contains abstract methods. Since the definition of *get_area()* uses the first approach above, assigning a class object will not return a runtime error. We see from the output result that calling get_area() from a Square object or Circle object will return False, while from a Shape object will return True.\n","\n","This result shows a quite interesting ability of OOP in Python, that a method defined in a superclass can correctly calculate its return even when called from its subclasses. This ability will be credited to the inheritance property of classes. Technically, this is implemented using a special variable self.\\_\\_class\\_\\_. As its name suggests, it returns a reference of the current class name of the object. Thanks to the inheritance property, all subclasses of the superclass Shape will run the same code in *is_abstract()*. But the reference value of self.\\_\\_class\\_\\_ will be only determined during the runtime. This is an effective way to change the behavior of inherited classes in their definitions, without knowing during runtime which variable eventually binds with the classes. \n"]},{"cell_type":"markdown","metadata":{},"source":["# Special Variables and Methods\n","\n","Above we have seen that *__class__* for a class object is a special variable. We have also seen the use of *__init__()* method that always exists but can be customized by the user. As it turns out, for a Python class, a list of special variables and special methods always get created without user intervention. In this part, we will learn the usage of several important special variables and special methods:\n","\n"," * __file__: Path to the current Python file\n"," * __class__: Reference of the current class name\n"," * __doc__: Docstring record\n"," * __init__(): Class constructor\n"," * __hash__(): Hash function\n"," \n"," \n","All special variables and special methods for Python classes start with two underscores and end with two underscores. However, for those readers where Python is not their first OOP language, one of the most controversial rules in Python is the fact that Python classes have no private or protected attributes or methods, in other words, all attributes and methods are public (meaning they are visible at any place where their objects are defined). In the past examples, we have seen that the code can query and change an attribute of a class quite at will, and Python does not attempt to prevent that under any circumstances.\n","\n","Nevertheless, Python users in the past have created some naming convention that serves to help reminding themselves and other users about the limited scope of some variables. Note that these rules as we will see below are merely recommendations, and they are not enforced by Python system.\n","\n"," * Single underscore _var: Intended for internal use only in class methods.\n"," * Double underscores __var: Intended exclusively for one class but not its subclasses.\n","\n","That being said, Python does apply a trick to double underscore variables. Specifically, Python will protect *__var* to be associated with a single class by **name mangling** the class name before *__var*. In other words, if *__var* is defined within a class, when referenced outside the class definition, its name will be changed to object._CLASSNAME__var. The name mangling will not completely prevent other code to use an internal class variable, but the other code does need to go through the extra trouble to gain access to such internal variables. "]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["class PrefixPostfix:\n"," def __init__(self): # class constructor\n"," self._internal = 0\n"," self.__double_underscore = 'name mangling'\n"," self.__prefix_postfix_double__ = 'no change'\n","\n"," def print_out(self):\n"," print('_internal: ', self._internal)\n"," print('__double_underscore: ', self.__double_underscore)\n"," print('__prefix_postfix_double__: ', self.__prefix_postfix_double__)\n","\n"," def __del__(self): # class destructor\n"," print('Goodbye!')\n","\n"," def __eq__(self, other):\n"," if type(self)!=type(other):\n"," raise TypeError('PrefixPostfix == must compare same type')\n"," return('Operator has been hijacked: ' + str(self._internal == other._internal))\n","\n","test = PrefixPostfix()\n","print('------ print outside class definition ------')\n","print(dir(test))\n","print(test._internal)\n","print(test.__prefix_postfix_double__)\n","print(test._PrefixPostfix__double_underscore)\n","print(test == test)\n","del(test)"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we define three instance variables using special naming convention: \\_internal, \\_\\_double_underscore, and \\_\\_prefix_postfix_double__. First, we shall see that whether the \\_internal and \\__prefix_postfix_double__ are used internally or outside the class definition, their variable names are the same.\n","\n","However, if we want to reference \\_\\_double_underscore outside the class, it must be referenced as \\_PrefixPostfix__double_underscore__. In fact, all the attributes in a class can be listed out by calling a built-in function *dir()*, as we have also shown above. We can verify from this list that the name \\_\\_double_underscore has been modified by the **name mangling** convention.\n","\n","Finally, the sample code demonstrates the use of two other special methods: \\_\\_del\\_\\_() and \\_\\_eq\\_\\_. \\_\\_del\\_\\_() is also known as the class destructor. As opposite to the class constructor \\_\\_init\\_\\_(), \\_\\_del\\_\\_() when the class object is being deleted either automatically by Python (when doing automatic garbage collection) or manually by calling *del()*.\n","\n","\\_\\_eq\\_\\_() on the other hand belongs to a list of comparison operators for classes. When the \"==\" operator is used to compare two class objects, in fact, the code block defined within \\_\\_eq\\_\\_() function is called. When we customize this operator, the code can have the function to return any arbitrary values. The complete list of comparison operators are listed below:\n","\n"," *__lt__(self, other): <\n"," *__le__(self, other): <=\n"," *__eq__(self, other): ==\n"," *__ne__(self, other) != \n"," *__gt__(self, other): >\n"," *__ge__(self, other): >=\n"]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Using the superclass Shape in the lecture, define a subclass called Rectangle, then update the methods \\_\\_init\\_\\_() and get_area(). Tip: A Rectangle has two sides, called width and length.\n","\n","2. In the Person class in the lecture, please code a class method using the @classmethod decorator called set_retirement_age(). The function will modify the value of the class attribute retirement_age().\n","\n","3. In the Circle class in the lecture, please code a static method using the @staticmethod decorator called get_radius(area). The function will return the radius of a circle given its area size as the input argument.\n","\n","4. Please implement the special method \\_\\_lt__() for the Shape class. Specifically, the method defines the operator \"<\" to compare the area sizes of any two subclasses of Shape. Pay attention to the fact that although the special method is defined in the superclass Shape, it remains effective to compare area sizes of any subclasses, even when the two subclasses are of different type. For instance, please verify that the method can be used to compare the area sizes between a Square class object and a Circle class object.\n","\n","5. Many built-in Python classes support the special operator \"+\". For instance, for integers, a + b executes an addition operation; while for strings, s1 + s2 executes an concatenation operation. For a user-defined class, the implementation of the same operator \"+\" can be defined by coding the special method \\_\\_add__(). \n","\n"," In this exercise, please create a new \\_\\_add__() method in the Square class in the lecture. If two squares have the same width, then square_1 + square_2 would return a Rectangle class object (as defined in Exercise 1 above) with the same width but 2*width as its length. If two squares are of different width, \\_\\_add__() should return None."]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["import math\n","\n","class Shape:\n","\n"," def get_area(self):\n"," ''' virtual method to calculate area of a shape'''\n"," raise NotImplementedError\n","\n"," def is_abstract(self):\n"," ''' return True if a shape has been assigned to the class'''\n"," if self.__class__ == Shape:\n"," return True\n"," else:\n"," return False\n","\n","class Square(Shape):\n"," ''' A subclass of Shape, specifically for calculating square area'''\n","\n"," def __init__(self, width):\n"," self.width = width\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a square is its width times width'''\n"," return self.width*self.width\n","class Rectangle(Shape):\n"," def __init__(self, width, height):\n"," self.width = width\n"," self.height = height\n"," self.area = self.get_area()\n"," def get_area(self):\n"," return self.width*self.height"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["20240001\n","True\n","{2024: 2, '20240001': ('John', 'Smith'), '20240002': ('Jane', 'Doe')}\n"]}],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialized with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n","\n"," @classmethod\n"," def set_retirement_age(cls,age):\n"," retirement_age = age\n","\n","\n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n"," \n","class Student(Person):\n"," student_record = dict()\n"," \n"," def __init__(self, first_name, last_name, class_year):\n"," super().__init__(first_name, last_name)\n","\n"," if type(class_year)!=int:\n"," raise TypeError('class_year shall be an integer')\n"," if class_year < 1900 or class_year>2999:\n"," raise ValueError('Class year value is not supported')\n","\n"," if class_year in Student.student_record:\n"," Student.student_record[class_year] += 1\n"," else:\n"," Student.student_record[class_year] = 1\n","\n"," self.student_ID = str(class_year) + \\\n"," format(Student.student_record[class_year],'04d')\n"," Student.student_record[self.student_ID] = (first_name, last_name)\n","\n"," def year_of_graduation(self):\n"," return (int(self.student_ID[0:4]))\n"," \n","x1 = Student('John', 'Smith', 2024)\n","x1.age = 20\n","print(x1.student_ID)\n","print(x1.isAdult(x1.age))\n","x2 = Student('Jane', 'Doe', 2024)\n","print(x2.student_record)\n"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Is class initialized: False\n","25\n","Is class initialized: False\n","78.53981633974483\n"]}],"source":["#3\n","import math\n","\n","class Shape:\n","\n"," def get_area(self):\n"," ''' virtual method to calculate area of a shape'''\n"," raise NotImplementedError\n","\n"," def is_abstract(self):\n"," ''' return True if a shape has been assigned to the class'''\n"," if self.__class__ == Shape:\n"," return True\n"," else:\n"," return False\n","\n","class Square(Shape):\n"," ''' A subclass of Shape, specifically for calculating square area'''\n","\n"," def __init__(self, width):\n"," self.width = width\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a square is its width times width'''\n"," return self.width*self.width\n"," \n","class Circle(Shape):\n"," ''' A subclass of Shape, specifically for calculating circle area'''\n","\n"," def __init__(self, radius):\n"," self.radius = radius\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a circle is pi times radius square'''\n"," return math.pi * self.radius ** 2.0\n"," \n"," @staticmethod\n"," def get_radius(self,area):\n"," radius = math.sqrt(area/math.pi)\n"," return radius\n","\n","x1 = Square(5)\n","print('Is class initialized: ',x1.is_abstract())\n","print(x1.get_area())\n","\n","x2 = Circle(5)\n","print('Is class initialized: ', x2.is_abstract())\n","print(x2.get_area())\n","\n"]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Is class initialized: False\n","25\n","Is class initialized: False\n","78.53981633974483\n"]}],"source":["import math\n","\n","class Shape:\n","\n"," def get_area(self):\n"," ''' virtual method to calculate area of a shape'''\n"," raise NotImplementedError\n","\n"," def is_abstract(self):\n"," ''' return True if a shape has been assigned to the class'''\n"," if self.__class__ == Shape:\n"," return True\n"," else:\n"," return False\n"," def __lt__(self,other) -> bool:\n"," return self.get_area < other.get_area\n","\n","class Square(Shape):\n"," ''' A subclass of Shape, specifically for calculating square area'''\n","\n"," def __init__(self, width):\n"," self.width = width\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a square is its width times width'''\n"," return self.width*self.width\n"," \n","class Circle(Shape):\n"," ''' A subclass of Shape, specifically for calculating circle area'''\n","\n"," def __init__(self, radius):\n"," self.radius = radius\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a circle is pi times radius square'''\n"," return math.pi * self.radius ** 2.0\n","\n","x1 = Square(5)\n","print('Is class initialized: ',x1.is_abstract())\n","print(x1.get_area())\n","\n","x2 = Circle(5)\n","print('Is class initialized: ', x2.is_abstract())\n","print(x2.get_area())\n","\n","\n","\n","\n"]},{"cell_type":"code","execution_count":10,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Is class initialized: False\n","25\n","Is class initialized: False\n","25\n","<__main__.Rectangle object at 0x10ca49160>\n"]}],"source":["#Q5\n","import math\n","\n","class Shape:\n","\n"," def get_area(self):\n"," ''' virtual method to calculate area of a shape'''\n"," raise NotImplementedError\n","\n"," def is_abstract(self):\n"," ''' return True if a shape has been assigned to the class'''\n"," if self.__class__ == Shape:\n"," return True\n"," else:\n"," return False\n","\n","class Square(Shape):\n"," ''' A subclass of Shape, specifically for calculating square area'''\n","\n"," def __init__(self, width):\n"," self.width = width\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a square is its width times width'''\n"," return self.width*self.width\n"," def __ADD__(self,other):\n"," if self.width == other.width:\n"," return Rectangle(self.width, self.width*2)\n","class Circle(Shape):\n"," ''' A subclass of Shape, specifically for calculating circle area'''\n","\n"," def __init__(self, radius):\n"," self.radius = radius\n"," self.area = self.get_area()\n","\n"," def get_area(self):\n"," ''' Area of a circle is pi times radius square'''\n"," return math.pi * self.radius ** 2.0\n"," \n"," @staticmethod\n"," def get_radius(self,area):\n"," radius = math.sqrt(area/math.pi)\n"," return radius\n","class Rectangle(Shape):\n"," def __init__(self, width, height):\n"," self.width = width\n"," self.height = height\n"," self.area = self.get_area()\n"," def get_area(self):\n"," return self.width*self.height\n","\n","saqure = Square(5)\n","print('Is class initialized: ',x1.is_abstract())\n","print(saqure.get_area())\n","\n","\n","squar = Square(5)\n","print('Is class initialized: ',x1.is_abstract())\n","print(squar.get_area())\n","\n","\n","print(Square.__ADD__(saqure, squar))"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Create a subclass of the BankAccount class in the previous lecture, called StockAccount. Adding to the superclass, the subclass should have at least one more attribute of stock_positions as a dictionary type. Each dictionary entry has the stock ticker name as the key, and the customer's size of the stock as the value. Please also design relevant methods to update the values in stock_positions, such as retrieving stock price, buying or selling a stock based on its stock price, and linking the buying and selling with the account's cash_position."]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["authenticated\n","NEW BALANCE: 10000\n"]}],"source":["class BankAccount:\n","\n"," customer_ID = \"\"\n"," cash_position=0\n"," amnt = 0\n"," @classmethod\n"," def GetCustomerID(cls,identification):\n"," id = input('Enter ID')\n"," if id == identification:\n"," customer_ID = str(identification)\n"," print(\"authenticated\")\n"," @classmethod\n"," def TNSCTN(cls):\n"," wthdORdpst = input(\"withdraw or deposit?\")\n"," if wthdORdpst == \"withdraw\":\n"," amnt=int(input(\"how much withdraw?\"))\n"," if amnt - cls.cash_position <=0:\n"," cls.cash_position-=amnt\n"," amnt = 0\n"," print(\"NEW BALANCE:\",cls.cash_position)\n"," elif wthdORdpst ==\"deposit\":\n"," amnt=int(input(\"how much deposit?\"))\n"," if amnt >=0:\n"," cls.cash_position+=amnt\n"," amnt = 0\n"," print(\"NEW BALANCE:\",cls.cash_position)\n","class StockAccount(BankAccount):\n"," pass\n","\n","\n","BankAccount.GetCustomerID(\"glizzygobbler23\")\n","BankAccount.TNSCTN()\n","\n"," "]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-11-binary-representation.ipynb b/Part One/1-11-binary-representation.ipynb index 9afe9e8..05ce6d1 100644 --- a/Part One/1-11-binary-representation.ipynb +++ b/Part One/1-11-binary-representation.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 11: Binary Representation**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distrubted or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["From this lecture, we will start the Level-2 course on learning modern AI theories and applications using Python. In the first level course of this series, we have learned the basic programming skill on Python. In our journey so far, we have encountered several basic Python variable types, including integers, floats, boolean, string, lists, tuples, dictionaries, and sets. I will assume in this course, you have fluently mastered the basic skills of coding Python programs using these variables. You are encouraged to refresh your memory about these topics from the lecture notes and videos of the first course.\n","\n","In this first lecture of the second course, we will discuss how these basic variable types are stored in computer memory.\n","\n","# Integers\n","\n","In Python since version 3, an *int* variable is capable of storing arbitrarily large integer values in magnitude. This affects how the integer values are stored in the computer memory.\n","\n","To understand the fundamental data structures of Python integer variables, we first need to understand that modern computers store data and programs only in binary form with two distict values of 0 and 1. Since the modern processors commonly known as central processing units (CPU) all use digital transistors as the basic building block, the transistors can conveniently using two discrete voltage values, namely, low and high, to represent two binary digits 0 and 1. In the computer literature, one digit of 0 or 1 value is called one bit; 8 bits together is called a byte. For example, a modern computer and its operating system is called a 64-bit system because its processor in one step can calculate fundamental operators such as addition or multiplication of one to two numbers represented by 64-bits.\n","\n","In this lecture, we will not dive deeper to practice arithmetic calculations in binary format. Below, we use the basic 8-bit binary representation to just show some examples:\n","\n"," * integer 0 is represented by eight 0's: (00000000).\n"," * integer 1 is represented by: (00000001). A one at the lowest digit represents the same value one in base-10 system.\n"," * integer 2 is represented by: (00000010). Notice that each binary digit only holds two possible values, when value 2 is larger than 1, its binary representation will be forced to use one digit higher to represent (00000001) + (00000001) = (00000010).\n"," * integer 3 is represented by: (00000011). The representation shows the fact that 3 in base-10 representation is equal to (00000010) + (00000001) = (00000011).\n"," \n","In Python beyond version 3, an integer variable is allowed to use an unlimited number of bytes to store integers, as long as the computer has the space to allocate valid memory addresses to store the bytes. As a result, this implementation supports storing very large integers in *int* variables.\n","\n","To verify the fact, we use a useful Python function called *sys.getsizeof()*. In the sample code below, we see that the smallest number of bytes (again, 1 byte is 8 bits) to store any integer value is 28. The reader may wonder why the smallest number of bytes is not one byte or any other number much smaller than 28. The reason is that Python is an OOP language, as such, any variable type is in fact a *class* data structure. Therefore, there are fixed overhead data structure to define the properties of a class object in addition to storing just its data value. \n","\n","As we increase the integer value to a fairly large value, such as *i3* in the sample code, then Python would need to increate the number of bytes in the memory."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:13:47.431898Z","iopub.status.busy":"2024-03-15T07:13:47.431494Z","iopub.status.idle":"2024-03-15T07:13:47.438784Z","shell.execute_reply":"2024-03-15T07:13:47.437755Z","shell.execute_reply.started":"2024-03-15T07:13:47.431816Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 28 28\n","Byte count: 36\n"]}],"source":["import sys\n","\n","i1 = 2022\n","i2 = 1\n","print('Byte count: ', sys.getsizeof(i1), sys.getsizeof(i2))\n","\n","i3 = 314159265358979323846\n","print('Byte count: ', sys.getsizeof(i3))"]},{"cell_type":"markdown","metadata":{},"source":["Finally, let us talk about storing positive integers and negative integers in Python. If our readers are familiar with C or C++ language, they would know that an integer can be declared as signed integer or unsigned integer. A signed integer as its name suggests differentiates an integer value to be either positive or negative, while an unsigned integer does not represent negative numbers. \n","\n","To illutrate how the sign of a number affects its data representation in the memory, let us again borrow the 8-bit binary representation as an example. If we represent only positive integers (or more precies, nonnegative integers) using 8 bits, then the smallest integer is 0 or (00000000) and the largest integer is 255 or (11111111). More specifically,\n","\n"," 255 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = (00000001) + (00000010) + (00000100) + (00001000) + (00010000) + (00100000) + (01000000) + (10000000)\n"," \n","Now let us consider using 8 bits to represent both positive and negative integers, then we need to take over at least one bit to represent the + and - sign. Therefore, there are only 7 bits left to store the magnitude of the integer value. As a result, the range of the signed integers in 8-bit representation is between +127 and -128.\n","\n","The above is the situation if a programming language supports both signed and unsigned integer type. Nevertheless, in Python, there is no unsigned integer type. Since integers can be arbitrarily large only constrained by the available computer memory, there is very little reason to create unsigned integer type by avoiding storing the sign digit. \n","\n","In the sample code below, we use the same function *sys.getsizeof()* to calculate the byte number when storing *i1* and *i3* with the negative sign. We can see that the final byte counts are the same as the previous example."]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:13:55.937203Z","iopub.status.busy":"2024-03-15T07:13:55.936848Z","iopub.status.idle":"2024-03-15T07:13:55.943040Z","shell.execute_reply":"2024-03-15T07:13:55.942114Z","shell.execute_reply.started":"2024-03-15T07:13:55.937168Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 28\n","Byte count: 36\n"]}],"source":["import sys\n","\n","i1 = -2022\n","print('Byte count: ', sys.getsizeof(i1))\n","\n","i3 = -314159265358979323846\n","print('Byte count: ', sys.getsizeof(i3))"]},{"cell_type":"markdown","metadata":{},"source":["# Bitwise Operations\n","\n","The fact that numeric values are stored in computer in binary format leads to certain **bitwise operations** applied in binary representation but not in the conventional decimal arithmetic. Below, we go over some of these examples:\n","\n"," * Shift left: x<>y represents shifting the binary digits in x to the right by y steps. One can verify that shifting an integer to the right by one bit is equivalent to divide by 2.\n"," * bitwise and: x & y first requires both x and y to be represented in binary format by the same number of digits. Then the resulting number assigns 1 in one digit if only the same digit from both numbers in x and y are also 1.\n"," * bitwise or: x | y also requires both x and y to be represented in binary format by the same number of digits. Then the resulting number assigns 1 in one digit if either the same digit in x or y is 1."]},{"cell_type":"code","execution_count":3,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:14:09.325582Z","iopub.status.busy":"2024-03-15T07:14:09.325269Z","iopub.status.idle":"2024-03-15T07:14:09.332691Z","shell.execute_reply":"2024-03-15T07:14:09.331690Z","shell.execute_reply.started":"2024-03-15T07:14:09.325550Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["00000100 << 1 = 8\n","00000111 >> 1 = 3\n","00000100 & 00000101 = 4\n","00000101 | 00000110 = 7\n"]}],"source":["print('{0:08b}'.format(4),'<< 1 = ', 4<<1)\n","print('{0:08b}'.format(7), '>> 1 =', 7>>1)\n","print('{0:08b}'.format(4), '&', '{0:08b}'.format(5), '=', 4&5)\n","print('{0:08b}'.format(5), '|', '{0:08b}'.format(6), '=', 5|6)"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we showed some examples of bitwise operations. Note that we also utilized the *format()* function to display any integer number in binary representation. The format *{0:08b}* is understood as follows: \n"," * the first \"0\" indicates taking the first argument of the *format()* method and put its string at the location; \n"," * the colon will specify a string format to display the *format()* argument; \n"," * \"08\" means maintaining minimal 8 digits; \n"," * and \"b\" means in binary format."]},{"cell_type":"markdown","metadata":{},"source":["# Floating-Point Numbers\n","\n","Although Python enables storing integers with arbitrary numbers of digits, more traditional systems typically only support numeric representation using fixed bits. Another limitation of integers is obviously that they cannot represent real numbers that contain both the integer part and the fraction part. To more effectively represent large numbers with fractions with only fixed numbers of bits, modern computers rely on floating-point numbers.\n","\n","Typically, Python represents a floating-point number, or *float* in short, using 64-bit storage in the memory. Due to the same reason that float is a class object, its overall byte count for one float variable will be a little larger than 64 bits or 8 bytes. Let us see some examples to compare with the situation for integers:"]},{"cell_type":"code","execution_count":4,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:14:54.456441Z","iopub.status.busy":"2024-03-15T07:14:54.456115Z","iopub.status.idle":"2024-03-15T07:14:54.463554Z","shell.execute_reply":"2024-03-15T07:14:54.462420Z","shell.execute_reply.started":"2024-03-15T07:14:54.456405Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 24 24\n","Byte count: 24\n","3.1415926535897933e+20 314159265358979334144.000000\n"]}],"source":["import sys\n","\n","f1 = 2022.0\n","f2 = 1.0\n","print('Byte count: ', sys.getsizeof(f1), sys.getsizeof(f2))\n","\n","f3 = 314159265358979323846.0\n","print('Byte count: ', sys.getsizeof(f3))\n","print(f3, '{0:20f}'.format(f3))"]},{"cell_type":"markdown","metadata":{},"source":["In the sample code, we use the same values to create three variables but in float type. First, we see that the byte counts for all three variables are 24, meaning the float type in Python uses the same amount of memory to store floating-point numbers.\n","\n","Second, in base-10 decimal representation, a float is represented by a single nonzero digit plus other digits in the fraction part and then followed by a base-10 exponent part: 3.1415926535897933e+20. In base-2 representation in the memory, it is similarly represented by a single nonzero digit (the only nonzero binary digit is 1) plus other binary digits in the fraction part followed by a base-2 exponent part. \n","\n","In both representations, having the memory storage limited to 64 bits means any float can only have limited accuracy, meaning it cannot store the fraction part with unlimited precise digits. We see in the final output of the example above, that in base-10 representation, Python float has 15 valid digits in the fraction part; in base-2 representation, the number of valid digits in the fraction part is 52.\n","\n","The 64-bit floating-point representation in Python actually follows an industry standard called IEEE Standard 754. Using this standard guarantees those floating points stored in a data block by Python can be correctly loaded for some other programs and other languages to use. So in the IEEE Standard 754, using the floating point representation, some special numeric values are also defined:\n","\n"," * 0.0: In float, zero actually is a special value because normal float arithmetic will never result in a zero value. This is due to the fact that the integer part of a float is always nonzero. Except for the symbolic zero in float, where all 64 bits are forced to be set to zero.\n"," * infinity and -infinity: Infinity will be treated to be greater than any finite float number, defined by float('inf'); Negative infinity will be treated to be less than any finite float number, defined by float('-inf').\n"," \n","Let us see some examples below:"]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:15:02.124028Z","iopub.status.busy":"2024-03-15T07:15:02.123702Z","iopub.status.idle":"2024-03-15T07:15:02.129659Z","shell.execute_reply":"2024-03-15T07:15:02.128538Z","shell.execute_reply.started":"2024-03-15T07:15:02.123996Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["False\n","True True\n"]}],"source":["a = (0.3 * 3) + 0.1\n","b = 1.0\n","print(a == b)\n","print(a float('-inf'))"]},{"cell_type":"markdown","metadata":{},"source":["We can see from the first example, that when two float variables *a* and *b* are created, in principle, the condition that *a==b* should hold true. However, in their float representation in the memory, they are not exactly equal, which may come as a surprise. To deal with the limited precision problem if two floating points need to be compared, it is a better practice to compare the difference within a given range. Let us see the alternative approach below"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["import math\n","a = (0.3 * 3) + 0.1\n","b = 1.0\n","print(math.isclose(a,b))"]},{"cell_type":"markdown","metadata":{},"source":["In this new approach, an imported function *math.isclose()* compares two float numbers within a tolerance value. The default value is 1e-09, but the user can further modify this tolerance by providing a third argument as the customized tolerance value."]},{"cell_type":"markdown","metadata":{},"source":["# Strings\n","\n","Similar to the *int* and *float* type, string type or *str* in short is a class type, which contains some suppplementary information about the string data, such as length, character kind, encoding type, and hash value, etc. Therefore, although storing basic English alphabets only take one byte, but the *str* class will take more bytes to store in the memory. In the sample code below, we see that the byte count for an empty string is 49, for one character is 50, and for four characters is 53. "]},{"cell_type":"code","execution_count":3,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:27.795795Z","iopub.status.busy":"2024-03-15T08:25:27.795309Z","iopub.status.idle":"2024-03-15T08:25:27.804084Z","shell.execute_reply":"2024-03-15T08:25:27.802451Z","shell.execute_reply.started":"2024-03-15T08:25:27.795753Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 49 50 53\n"]}],"source":["import sys\n","\n","s0 = \"\"\n","s1 = \"2\"\n","s2 = \"2020\"\n","\n","print(type(s1))\n","print('Byte counts: ', sys.getsizeof(s0), sys.getsizeof(s1), sys.getsizeof(s2))"]},{"cell_type":"markdown","metadata":{},"source":["Note that the string class uses the **Unicode** standard to encode characters into bytes. Although if the characters are basic English alphabets, the coding length for one character is one byte, but other kinds of characters may take longer spaces. Let us see the comparison below:"]},{"cell_type":"code","execution_count":4,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:30.281226Z","iopub.status.busy":"2024-03-15T08:25:30.280603Z","iopub.status.idle":"2024-03-15T08:25:30.289116Z","shell.execute_reply":"2024-03-15T08:25:30.287688Z","shell.execute_reply.started":"2024-03-15T08:25:30.281183Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 76 78 82\n"]}],"source":["s1 = \"二\"\n","s2 = \"二0\"\n","s3 = \"二0二0\"\n","\n","print(type(s1))\n","print('Byte counts: ', sys.getsizeof(s1), sys.getsizeof(s2), sys.getsizeof(s3))"]},{"cell_type":"markdown","metadata":{},"source":["We see from the above example that when a string contains special characters or characters from other languages than English, it will be necessary to increase the byte count to encode each character. For a Chinese character \"二“ that means the number two, the byte count is 2. However, when we add another basic character \"0\" in *s2*, we can see that the increase in byte count is also 2. In *s3*, the increase in byte count is 3*2 = 6. This means a Python string always use the same byte count to encode every character. The encoding strategy makes calculating the memory address of any character to be straightforward, namely, the memory address for str[offset] is str[0] + byte_count * offset, since the byte_count is uniform for every character, may it be 1, 2, or 3, etc.\n","\n","In the level-1 course when we introduced Python's hashing library, we introduced another encoding standard called ASCII or UTF-8. ASCII stands for *American Standard Cod for Information Interchange*, and it was first introduced to encode English text and standard symbols in 1963. Since early computers did not care about encoding characters from other international language, the original ASCII code only has 8 bits or 1 byte. This is the same length when Unicode format encodes ASCII characters. However, when more special characters and international languages are added in text documents, ASCII is expanded to take up more bytes, which leads to the UTF-8 standard also supported by Python.\n","\n","We can see in the example below, that the same strings from the above example can be encoded by UTF-8 instead of the default Unicode. However, UTF-8 encoding uses variable byte counts. For example, from *b1* to *b2*, only one byte is added to the memory size because \"0\" is encoded in ASCII using one byte. From *b2* to *b3*, 3 bytes are added to encode the Chinese character \"二“. The tradeoff using the UTF-8 standard is that it returns a shorter byte array than the Unicode standard, but since each character is variable byte length, calculating the memory address of a character in the middle of a string would need to traverse and count the accumulated byte counts of every character before it, which significantly increases the time complexity."]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:33.395478Z","iopub.status.busy":"2024-03-15T08:25:33.394606Z","iopub.status.idle":"2024-03-15T08:25:33.405296Z","shell.execute_reply":"2024-03-15T08:25:33.402989Z","shell.execute_reply.started":"2024-03-15T08:25:33.395426Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 36 37 40 41\n"]}],"source":["b1 = \"二\".encode('utf-8')\n","b2 = \"二0\".encode('utf-8')\n","b3 = \"二0二\".encode('utf-8')\n","b4 = \"二0二0\".encode('utf-8')\n","\n","print(type(b1))\n","print('Byte counts: ', sys.getsizeof(b1), sys.getsizeof(b2), sys.getsizeof(b3), sys.getsizeof(b4))"]},{"cell_type":"markdown","metadata":{},"source":["To convert a *bytes* type to the standard *str* type, one can use another function in reverse of the *.encode()* method, called *.decode()*. By default, it will assume the encoding of the source data is *'utf-8'*. Therefore, this argument can be ignored if the default is the correct assumption."]},{"cell_type":"code","execution_count":8,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:41:42.571260Z","iopub.status.busy":"2024-03-15T08:41:42.570572Z","iopub.status.idle":"2024-03-15T08:41:42.581495Z","shell.execute_reply":"2024-03-15T08:41:42.580202Z","shell.execute_reply.started":"2024-03-15T08:41:42.571213Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","二 二0\n"]}],"source":["b1 = \"二\".encode('utf-8')\n","b2 = \"二0\".encode('utf-8')\n","s1 = b1.decode('utf-8')\n","s2 = b2.decode()\n","\n","print(type(s1))\n","print(s1, s2)"]},{"cell_type":"markdown","metadata":{},"source":["Finally, if the characters in a string is limited to only ASCII code, we can use the prefix *b* in front of the quotation marks to obtain an ASCII coding. However, ASCII coding cannot encode special characters, such as characters from other international languages. We will see another sample code below. Notice that encoding character \"二\" using ASCII will receive a SyntexError."]},{"cell_type":"code","execution_count":7,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:45.806985Z","iopub.status.busy":"2024-03-15T08:25:45.806531Z","iopub.status.idle":"2024-03-15T08:25:45.815331Z","shell.execute_reply":"2024-03-15T08:25:45.814107Z","shell.execute_reply.started":"2024-03-15T08:25:45.806943Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 34 37 37\n"]}],"source":["s1 = b\"2\"\n","s2 = b\"2020\"\n","s3 = \"2020\".encode('ascii')\n","\n","print(type(s1))\n","print('Byte counts: ', sys.getsizeof(s1), sys.getsizeof(s2), sys.getsizeof(s3))"]},{"cell_type":"code","execution_count":10,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:17:44.947771Z","iopub.status.busy":"2024-03-15T07:17:44.947412Z","iopub.status.idle":"2024-03-15T07:17:44.955014Z","shell.execute_reply":"2024-03-15T07:17:44.953408Z","shell.execute_reply.started":"2024-03-15T07:17:44.947736Z"},"trusted":true},"outputs":[{"ename":"SyntaxError","evalue":"bytes can only contain ASCII literal characters. (, line 1)","output_type":"error","traceback":["\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m s4 = b\"二0二0\"\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m bytes can only contain ASCII literal characters.\n"]}],"source":["s4 = b\"二0二0\""]},{"cell_type":"markdown","metadata":{},"source":["# Lists\n","\n","Lists are a versatile variable type where the elements in one list can have different types. Let us use the *sys.getsizeof()* function to examine some illustrative examples:"]},{"cell_type":"code","execution_count":11,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:18:06.974774Z","iopub.status.busy":"2024-03-15T07:18:06.974441Z","iopub.status.idle":"2024-03-15T07:18:06.982029Z","shell.execute_reply":"2024-03-15T07:18:06.980078Z","shell.execute_reply.started":"2024-03-15T07:18:06.974744Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte counts: 72 80 88 96\n"]}],"source":["import sys\n","\n","l0 = [] # an empty list\n","l1 = [\"二\"] # a list that contains a Chinese character of two\n","l2 = [\"二\", 0] # a list that contains a Chinese character of two and an integer zero\n","l3 = [\"二\", 0, [\"二\", 0]] # a list that further contains another list as one element\n","\n","print('Byte counts: ', sys.getsizeof(l0), sys.getsizeof(l1), sys.getsizeof(l2), sys.getsizeof(l3))"]},{"cell_type":"markdown","metadata":{},"source":["From the sample code, we see that the byte count for an empty list variable is 72 bytes. Again, this is due to the fact that list is a class type that comes with associated class methods and attributes, so even the empty list will take up a size of memory space. \n","\n","We then notice that when we add one by one more elements into the list, the increase in byte counts seems to be constant 8 bytes, regardless of the content of the element. For example, from *l2* to *l3*, even when we add an entire sublist to the end of *l2*, the increase byte count is still 8. More surprisingly, we can recall from the above string examples that the byte count for a list [\"二\", 0] is 88. It seems counter-intuitive that adding a list element [\"二\", 0] only increases byte count by 8 from 88 to 96.\n","\n","To resolve this dilemma, we have to understand how the list elements are stored and referenced in Python. The hint is to recall that list is a mutable type, meaning, modifying the element values in a list does not change its memory address and ID. This means what is included in the list's byte counts are only references to separate element objects of their own memory addresses. Since storing memory references only costs constant space of 8 bytes (i.e., 64 bits in a 64-bit OS), the *sys.getsizeof()* function can only count the bytes for the memory allocation of these reference pointers.\n","\n","If one wants to calculate precisely the total memory size of the whole list data, we should use the following approach:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["import sys\n","l2 = [\"二\", 0]\n","\n","byte_count = sys.getsizeof(l2) + sys.getsizeof(l2[0]) + sys.getsizeof(l2[1])\n","print(byte_count)"]},{"cell_type":"markdown","metadata":{},"source":["Next, since all the element references are organized as an ordered sequence, we consider the time complexity to add or remove elements from this ordered sequence."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["trial_count = 1000\n","\n","import time\n","\n","# Test remove the last elements\n","test_list = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')*1000000\n","tic = time.time()\n","for i in range(trial_count):\n"," test_list.pop(-1)\n","elapsed_time = time.time() - tic\n","print('Total time removing last elements: ', elapsed_time)\n","\n","# Test remove the first elements\n","test_list = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')*1000000\n","tic = time.time()\n","for i in range(trial_count):\n"," test_list.pop(0)\n","elapsed_time = time.time() - tic\n","print('Total time removing first elements: ',elapsed_time)"]},{"cell_type":"markdown","metadata":{},"source":["When we run the above sample code, we will see the dramatic difference in the time complexity, where the first operation to remove the last element of a list repeating 1,000 times only costs less than 0.001 second, but the second operation to remove the first element of a list repeating 1,000 times costs more than 26 seconds on Kaggle's online Jupyter Notebook. This dramatic difference in cost of time and therefore computer resources is caused by the fact that the list type simply stores its element references as an ordered sequence. Consider the following two situations:\n","\n","* When the last element of a sequence is removed, the length of the sequence is simply reduced by one, and there is no other operations necessary to maintain values for the rest of the elements in the list.\n","* When the first element of a sequence is removed, to maintain the order of the sequence except removing the first element, Python actually iteratively moves the (i+1)-th element reference to overwrite the i-th element reference. As a result, when our test list is long such as in the above example, this operation of shifting all elements to the left by one actually is very expensive even in modern computer's standard. \n"," \n","The above complexity analysis about the *pop()* operation also applies to the *insert()* operation. In conclusion, when we use the list-type variables, we shall try to encourage poping and inserting more from the end of the list, and avoid the same operations from the beginning or other random intermediate locations."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["1. Please write a Python code to evaluate the number of bytes used to encode an emoji character. The starting assignment statement is provided below:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["s = \"😊\" # Smiling face with smiling eyes emoji"]},{"cell_type":"markdown","metadata":{},"source":["2. Explain the difference between the hash results of the two examples that are fairly similar in values:"]},{"cell_type":"code","execution_count":13,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:57:50.745974Z","iopub.status.busy":"2024-03-15T08:57:50.745229Z","iopub.status.idle":"2024-03-15T08:57:50.754228Z","shell.execute_reply":"2024-03-15T08:57:50.752831Z","shell.execute_reply.started":"2024-03-15T08:57:50.745928Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["True\n","False\n"]}],"source":["s1 = '2'; b1 = s1.encode('utf-8')\n","print(s1.__hash__()==b1.__hash__())\n","\n","s2 = \"二0\"\n","b2 = s2.encode('utf-8')\n","print(s2.__hash__()==b2.__hash__())"]},{"cell_type":"markdown","metadata":{},"source":["3. Debug the following code"]},{"cell_type":"code","execution_count":14,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T09:10:51.999623Z","iopub.status.busy":"2024-03-15T09:10:51.998813Z","iopub.status.idle":"2024-03-15T09:10:52.028879Z","shell.execute_reply":"2024-03-15T09:10:52.026719Z","shell.execute_reply.started":"2024-03-15T09:10:51.999574Z"},"trusted":true},"outputs":[{"ename":"TypeError","evalue":"a bytes-like object is required, not 'str'","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"test string\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'utf-8'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m' '\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mTypeError\u001b[0m: a bytes-like object is required, not 'str'"]}],"source":["s = \"test string\".encode('utf-8')\n","a, b = s.split(' ')\n","\n","print(a, b)"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. In Python, there is a dynamically linked list type called *deque* from the module name *collections*. A deque type variable can pop its elements from the right using *.pop()* method, and from the left using *.popleft()* method.\n","\n","Please modify the sample code above to pop a deque variable with the same one million copies of the 26 alphabet letters from the left and right, one by one. Compare the time complexity of the operations and discuss the result."]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30055,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.9"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 11: Binary Representation**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distrubted or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["From this lecture, we will start the Level-2 course on learning modern AI theories and applications using Python. In the first level course of this series, we have learned the basic programming skill on Python. In our journey so far, we have encountered several basic Python variable types, including integers, floats, boolean, string, lists, tuples, dictionaries, and sets. I will assume in this course, you have fluently mastered the basic skills of coding Python programs using these variables. You are encouraged to refresh your memory about these topics from the lecture notes and videos of the first course.\n","\n","In this first lecture of the second course, we will discuss how these basic variable types are stored in computer memory.\n","\n","# Integers\n","\n","In Python since version 3, an *int* variable is capable of storing arbitrarily large integer values in magnitude. This affects how the integer values are stored in the computer memory.\n","\n","To understand the fundamental data structures of Python integer variables, we first need to understand that modern computers store data and programs only in binary form with two distict values of 0 and 1. Since the modern processors commonly known as central processing units (CPU) all use digital transistors as the basic building block, the transistors can conveniently using two discrete voltage values, namely, low and high, to represent two binary digits 0 and 1. In the computer literature, one digit of 0 or 1 value is called one bit; 8 bits together is called a byte. For example, a modern computer and its operating system is called a 64-bit system because its processor in one step can calculate fundamental operators such as addition or multiplication of one to two numbers represented by 64-bits.\n","\n","In this lecture, we will not dive deeper to practice arithmetic calculations in binary format. Below, we use the basic 8-bit binary representation to just show some examples:\n","\n"," * integer 0 is represented by eight 0's: (00000000).\n"," * integer 1 is represented by: (00000001). A one at the lowest digit represents the same value one in base-10 system.\n"," * integer 2 is represented by: (00000010). Notice that each binary digit only holds two possible values, when value 2 is larger than 1, its binary representation will be forced to use one digit higher to represent (00000001) + (00000001) = (00000010).\n"," * integer 3 is represented by: (00000011). The representation shows the fact that 3 in base-10 representation is equal to (00000010) + (00000001) = (00000011).\n"," \n","In Python beyond version 3, an integer variable is allowed to use an unlimited number of bytes to store integers, as long as the computer has the space to allocate valid memory addresses to store the bytes. As a result, this implementation supports storing very large integers in *int* variables.\n","\n","To verify the fact, we use a useful Python function called *sys.getsizeof()*. In the sample code below, we see that the smallest number of bytes (again, 1 byte is 8 bits) to store any integer value is 28. The reader may wonder why the smallest number of bytes is not one byte or any other number much smaller than 28. The reason is that Python is an OOP language, as such, any variable type is in fact a *class* data structure. Therefore, there are fixed overhead data structure to define the properties of a class object in addition to storing just its data value. \n","\n","As we increase the integer value to a fairly large value, such as *i3* in the sample code, then Python would need to increate the number of bytes in the memory."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:13:47.431898Z","iopub.status.busy":"2024-03-15T07:13:47.431494Z","iopub.status.idle":"2024-03-15T07:13:47.438784Z","shell.execute_reply":"2024-03-15T07:13:47.437755Z","shell.execute_reply.started":"2024-03-15T07:13:47.431816Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 28 28\n","Byte count: 36\n"]}],"source":["import sys\n","\n","i1 = 2022\n","i2 = 1\n","print('Byte count: ', sys.getsizeof(i1), sys.getsizeof(i2))\n","\n","i3 = 314159265358979323846\n","print('Byte count: ', sys.getsizeof(i3))"]},{"cell_type":"markdown","metadata":{},"source":["Finally, let us talk about storing positive integers and negative integers in Python. If our readers are familiar with C or C++ language, they would know that an integer can be declared as signed integer or unsigned integer. A signed integer as its name suggests differentiates an integer value to be either positive or negative, while an unsigned integer does not represent negative numbers. \n","\n","To illutrate how the sign of a number affects its data representation in the memory, let us again borrow the 8-bit binary representation as an example. If we represent only positive integers (or more precies, nonnegative integers) using 8 bits, then the smallest integer is 0 or (00000000) and the largest integer is 255 or (11111111). More specifically,\n","\n"," 255 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = (00000001) + (00000010) + (00000100) + (00001000) + (00010000) + (00100000) + (01000000) + (10000000)\n"," \n","Now let us consider using 8 bits to represent both positive and negative integers, then we need to take over at least one bit to represent the + and - sign. Therefore, there are only 7 bits left to store the magnitude of the integer value. As a result, the range of the signed integers in 8-bit representation is between +127 and -128.\n","\n","The above is the situation if a programming language supports both signed and unsigned integer type. Nevertheless, in Python, there is no unsigned integer type. Since integers can be arbitrarily large only constrained by the available computer memory, there is very little reason to create unsigned integer type by avoiding storing the sign digit. \n","\n","In the sample code below, we use the same function *sys.getsizeof()* to calculate the byte number when storing *i1* and *i3* with the negative sign. We can see that the final byte counts are the same as the previous example."]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:13:55.937203Z","iopub.status.busy":"2024-03-15T07:13:55.936848Z","iopub.status.idle":"2024-03-15T07:13:55.943040Z","shell.execute_reply":"2024-03-15T07:13:55.942114Z","shell.execute_reply.started":"2024-03-15T07:13:55.937168Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 28\n","Byte count: 36\n"]}],"source":["import sys\n","\n","i1 = -2022\n","print('Byte count: ', sys.getsizeof(i1))\n","\n","i3 = -314159265358979323846\n","print('Byte count: ', sys.getsizeof(i3))"]},{"cell_type":"markdown","metadata":{},"source":["# Bitwise Operations\n","\n","The fact that numeric values are stored in computer in binary format leads to certain **bitwise operations** applied in binary representation but not in the conventional decimal arithmetic. Below, we go over some of these examples:\n","\n"," * Shift left: x<>y represents shifting the binary digits in x to the right by y steps. One can verify that shifting an integer to the right by one bit is equivalent to divide by 2.\n"," * bitwise and: x & y first requires both x and y to be represented in binary format by the same number of digits. Then the resulting number assigns 1 in one digit if only the same digit from both numbers in x and y are also 1.\n"," * bitwise or: x | y also requires both x and y to be represented in binary format by the same number of digits. Then the resulting number assigns 1 in one digit if either the same digit in x or y is 1."]},{"cell_type":"code","execution_count":3,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:14:09.325582Z","iopub.status.busy":"2024-03-15T07:14:09.325269Z","iopub.status.idle":"2024-03-15T07:14:09.332691Z","shell.execute_reply":"2024-03-15T07:14:09.331690Z","shell.execute_reply.started":"2024-03-15T07:14:09.325550Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["00000100 << 1 = 8\n","00000111 >> 1 = 3\n","00000100 & 00000101 = 4\n","00000101 | 00000110 = 7\n"]}],"source":["print('{0:08b}'.format(4),'<< 1 = ', 4<<1)\n","print('{0:08b}'.format(7), '>> 1 =', 7>>1)\n","print('{0:08b}'.format(4), '&', '{0:08b}'.format(5), '=', 4&5)\n","print('{0:08b}'.format(5), '|', '{0:08b}'.format(6), '=', 5|6)"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we showed some examples of bitwise operations. Note that we also utilized the *format()* function to display any integer number in binary representation. The format *{0:08b}* is understood as follows: \n"," * the first \"0\" indicates taking the first argument of the *format()* method and put its string at the location; \n"," * the colon will specify a string format to display the *format()* argument; \n"," * \"08\" means maintaining minimal 8 digits; \n"," * and \"b\" means in binary format."]},{"cell_type":"markdown","metadata":{},"source":["# Floating-Point Numbers\n","\n","Although Python enables storing integers with arbitrary numbers of digits, more traditional systems typically only support numeric representation using fixed bits. Another limitation of integers is obviously that they cannot represent real numbers that contain both the integer part and the fraction part. To more effectively represent large numbers with fractions with only fixed numbers of bits, modern computers rely on floating-point numbers.\n","\n","Typically, Python represents a floating-point number, or *float* in short, using 64-bit storage in the memory. Due to the same reason that float is a class object, its overall byte count for one float variable will be a little larger than 64 bits or 8 bytes. Let us see some examples to compare with the situation for integers:"]},{"cell_type":"code","execution_count":4,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:14:54.456441Z","iopub.status.busy":"2024-03-15T07:14:54.456115Z","iopub.status.idle":"2024-03-15T07:14:54.463554Z","shell.execute_reply":"2024-03-15T07:14:54.462420Z","shell.execute_reply.started":"2024-03-15T07:14:54.456405Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 24 24\n","Byte count: 24\n","3.1415926535897933e+20 314159265358979334144.000000\n"]}],"source":["import sys\n","\n","f1 = 2022.0\n","f2 = 1.0\n","print('Byte count: ', sys.getsizeof(f1), sys.getsizeof(f2))\n","\n","f3 = 314159265358979323846.0\n","print('Byte count: ', sys.getsizeof(f3))\n","print(f3, '{0:20f}'.format(f3))"]},{"cell_type":"markdown","metadata":{},"source":["In the sample code, we use the same values to create three variables but in float type. First, we see that the byte counts for all three variables are 24, meaning the float type in Python uses the same amount of memory to store floating-point numbers.\n","\n","Second, in base-10 decimal representation, a float is represented by a single nonzero digit plus other digits in the fraction part and then followed by a base-10 exponent part: 3.1415926535897933e+20. In base-2 representation in the memory, it is similarly represented by a single nonzero digit (the only nonzero binary digit is 1) plus other binary digits in the fraction part followed by a base-2 exponent part. \n","\n","In both representations, having the memory storage limited to 64 bits means any float can only have limited accuracy, meaning it cannot store the fraction part with unlimited precise digits. We see in the final output of the example above, that in base-10 representation, Python float has 15 valid digits in the fraction part; in base-2 representation, the number of valid digits in the fraction part is 52.\n","\n","The 64-bit floating-point representation in Python actually follows an industry standard called IEEE Standard 754. Using this standard guarantees those floating points stored in a data block by Python can be correctly loaded for some other programs and other languages to use. So in the IEEE Standard 754, using the floating point representation, some special numeric values are also defined:\n","\n"," * 0.0: In float, zero actually is a special value because normal float arithmetic will never result in a zero value. This is due to the fact that the integer part of a float is always nonzero. Except for the symbolic zero in float, where all 64 bits are forced to be set to zero.\n"," * infinity and -infinity: Infinity will be treated to be greater than any finite float number, defined by float('inf'); Negative infinity will be treated to be less than any finite float number, defined by float('-inf').\n"," \n","Let us see some examples below:"]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:15:02.124028Z","iopub.status.busy":"2024-03-15T07:15:02.123702Z","iopub.status.idle":"2024-03-15T07:15:02.129659Z","shell.execute_reply":"2024-03-15T07:15:02.128538Z","shell.execute_reply.started":"2024-03-15T07:15:02.123996Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["False\n","True True\n"]}],"source":["a = (0.3 * 3) + 0.1\n","b = 1.0\n","print(a == b)\n","print(a float('-inf'))"]},{"cell_type":"markdown","metadata":{},"source":["We can see from the first example, that when two float variables *a* and *b* are created, in principle, the condition that *a==b* should hold true. However, in their float representation in the memory, they are not exactly equal, which may come as a surprise. To deal with the limited precision problem if two floating points need to be compared, it is a better practice to compare the difference within a given range. Let us see the alternative approach below"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["import math\n","a = (0.3 * 3) + 0.1\n","b = 1.0\n","print(math.isclose(a,b))"]},{"cell_type":"markdown","metadata":{},"source":["In this new approach, an imported function *math.isclose()* compares two float numbers within a tolerance value. The default value is 1e-09, but the user can further modify this tolerance by providing a third argument as the customized tolerance value."]},{"cell_type":"markdown","metadata":{},"source":["# Strings\n","\n","Similar to the *int* and *float* type, string type or *str* in short is a class type, which contains some suppplementary information about the string data, such as length, character kind, encoding type, and hash value, etc. Therefore, although storing basic English alphabets only take one byte, but the *str* class will take more bytes to store in the memory. In the sample code below, we see that the byte count for an empty string is 49, for one character is 50, and for four characters is 53. "]},{"cell_type":"code","execution_count":3,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:27.795795Z","iopub.status.busy":"2024-03-15T08:25:27.795309Z","iopub.status.idle":"2024-03-15T08:25:27.804084Z","shell.execute_reply":"2024-03-15T08:25:27.802451Z","shell.execute_reply.started":"2024-03-15T08:25:27.795753Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 49 50 53\n"]}],"source":["import sys\n","\n","s0 = \"\"\n","s1 = \"2\"\n","s2 = \"2020\"\n","\n","print(type(s1))\n","print('Byte counts: ', sys.getsizeof(s0), sys.getsizeof(s1), sys.getsizeof(s2))"]},{"cell_type":"markdown","metadata":{},"source":["Note that the string class uses the **Unicode** standard to encode characters into bytes. Although if the characters are basic English alphabets, the coding length for one character is one byte, but other kinds of characters may take longer spaces. Let us see the comparison below:"]},{"cell_type":"code","execution_count":4,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:30.281226Z","iopub.status.busy":"2024-03-15T08:25:30.280603Z","iopub.status.idle":"2024-03-15T08:25:30.289116Z","shell.execute_reply":"2024-03-15T08:25:30.287688Z","shell.execute_reply.started":"2024-03-15T08:25:30.281183Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 76 78 82\n"]}],"source":["s1 = \"二\"\n","s2 = \"二0\"\n","s3 = \"二0二0\"\n","\n","print(type(s1))\n","print('Byte counts: ', sys.getsizeof(s1), sys.getsizeof(s2), sys.getsizeof(s3))"]},{"cell_type":"markdown","metadata":{},"source":["We see from the above example that when a string contains special characters or characters from other languages than English, it will be necessary to increase the byte count to encode each character. For a Chinese character \"二“ that means the number two, the byte count is 2. However, when we add another basic character \"0\" in *s2*, we can see that the increase in byte count is also 2. In *s3*, the increase in byte count is 3*2 = 6. This means a Python string always use the same byte count to encode every character. The encoding strategy makes calculating the memory address of any character to be straightforward, namely, the memory address for str[offset] is str[0] + byte_count * offset, since the byte_count is uniform for every character, may it be 1, 2, or 3, etc.\n","\n","In the level-1 course when we introduced Python's hashing library, we introduced another encoding standard called ASCII or UTF-8. ASCII stands for *American Standard Cod for Information Interchange*, and it was first introduced to encode English text and standard symbols in 1963. Since early computers did not care about encoding characters from other international language, the original ASCII code only has 8 bits or 1 byte. This is the same length when Unicode format encodes ASCII characters. However, when more special characters and international languages are added in text documents, ASCII is expanded to take up more bytes, which leads to the UTF-8 standard also supported by Python.\n","\n","We can see in the example below, that the same strings from the above example can be encoded by UTF-8 instead of the default Unicode. However, UTF-8 encoding uses variable byte counts. For example, from *b1* to *b2*, only one byte is added to the memory size because \"0\" is encoded in ASCII using one byte. From *b2* to *b3*, 3 bytes are added to encode the Chinese character \"二“. The tradeoff using the UTF-8 standard is that it returns a shorter byte array than the Unicode standard, but since each character is variable byte length, calculating the memory address of a character in the middle of a string would need to traverse and count the accumulated byte counts of every character before it, which significantly increases the time complexity."]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:33.395478Z","iopub.status.busy":"2024-03-15T08:25:33.394606Z","iopub.status.idle":"2024-03-15T08:25:33.405296Z","shell.execute_reply":"2024-03-15T08:25:33.402989Z","shell.execute_reply.started":"2024-03-15T08:25:33.395426Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 36 37 40 41\n"]}],"source":["b1 = \"二\".encode('utf-8')\n","b2 = \"二0\".encode('utf-8')\n","b3 = \"二0二\".encode('utf-8')\n","b4 = \"二0二0\".encode('utf-8')\n","\n","print(type(b1))\n","print('Byte counts: ', sys.getsizeof(b1), sys.getsizeof(b2), sys.getsizeof(b3), sys.getsizeof(b4))"]},{"cell_type":"markdown","metadata":{},"source":["To convert a *bytes* type to the standard *str* type, one can use another function in reverse of the *.encode()* method, called *.decode()*. By default, it will assume the encoding of the source data is *'utf-8'*. Therefore, this argument can be ignored if the default is the correct assumption."]},{"cell_type":"code","execution_count":8,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:41:42.571260Z","iopub.status.busy":"2024-03-15T08:41:42.570572Z","iopub.status.idle":"2024-03-15T08:41:42.581495Z","shell.execute_reply":"2024-03-15T08:41:42.580202Z","shell.execute_reply.started":"2024-03-15T08:41:42.571213Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","二 二0\n"]}],"source":["b1 = \"二\".encode('utf-8')\n","b2 = \"二0\".encode('utf-8')\n","s1 = b1.decode('utf-8')\n","s2 = b2.decode()\n","\n","print(type(s1))\n","print(s1, s2)"]},{"cell_type":"markdown","metadata":{},"source":["Finally, if the characters in a string is limited to only ASCII code, we can use the prefix *b* in front of the quotation marks to obtain an ASCII coding. However, ASCII coding cannot encode special characters, such as characters from other international languages. We will see another sample code below. Notice that encoding character \"二\" using ASCII will receive a SyntexError."]},{"cell_type":"code","execution_count":7,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:25:45.806985Z","iopub.status.busy":"2024-03-15T08:25:45.806531Z","iopub.status.idle":"2024-03-15T08:25:45.815331Z","shell.execute_reply":"2024-03-15T08:25:45.814107Z","shell.execute_reply.started":"2024-03-15T08:25:45.806943Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Byte counts: 34 37 37\n"]}],"source":["s1 = b\"2\"\n","s2 = b\"2020\"\n","s3 = \"2020\".encode('ascii')\n","\n","print(type(s1))\n","print('Byte counts: ', sys.getsizeof(s1), sys.getsizeof(s2), sys.getsizeof(s3))"]},{"cell_type":"code","execution_count":10,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:17:44.947771Z","iopub.status.busy":"2024-03-15T07:17:44.947412Z","iopub.status.idle":"2024-03-15T07:17:44.955014Z","shell.execute_reply":"2024-03-15T07:17:44.953408Z","shell.execute_reply.started":"2024-03-15T07:17:44.947736Z"},"trusted":true},"outputs":[{"ename":"SyntaxError","evalue":"bytes can only contain ASCII literal characters. (, line 1)","output_type":"error","traceback":["\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m s4 = b\"二0二0\"\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m bytes can only contain ASCII literal characters.\n"]}],"source":["s4 = b\"二0二0\""]},{"cell_type":"markdown","metadata":{},"source":["# Lists\n","\n","Lists are a versatile variable type where the elements in one list can have different types. Let us use the *sys.getsizeof()* function to examine some illustrative examples:"]},{"cell_type":"code","execution_count":11,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T07:18:06.974774Z","iopub.status.busy":"2024-03-15T07:18:06.974441Z","iopub.status.idle":"2024-03-15T07:18:06.982029Z","shell.execute_reply":"2024-03-15T07:18:06.980078Z","shell.execute_reply.started":"2024-03-15T07:18:06.974744Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte counts: 72 80 88 96\n"]}],"source":["import sys\n","\n","l0 = [] # an empty list\n","l1 = [\"二\"] # a list that contains a Chinese character of two\n","l2 = [\"二\", 0] # a list that contains a Chinese character of two and an integer zero\n","l3 = [\"二\", 0, [\"二\", 0]] # a list that further contains another list as one element\n","\n","print('Byte counts: ', sys.getsizeof(l0), sys.getsizeof(l1), sys.getsizeof(l2), sys.getsizeof(l3))"]},{"cell_type":"markdown","metadata":{},"source":["From the sample code, we see that the byte count for an empty list variable is 72 bytes. Again, this is due to the fact that list is a class type that comes with associated class methods and attributes, so even the empty list will take up a size of memory space. \n","\n","We then notice that when we add one by one more elements into the list, the increase in byte counts seems to be constant 8 bytes, regardless of the content of the element. For example, from *l2* to *l3*, even when we add an entire sublist to the end of *l2*, the increase byte count is still 8. More surprisingly, we can recall from the above string examples that the byte count for a list [\"二\", 0] is 88. It seems counter-intuitive that adding a list element [\"二\", 0] only increases byte count by 8 from 88 to 96.\n","\n","To resolve this dilemma, we have to understand how the list elements are stored and referenced in Python. The hint is to recall that list is a mutable type, meaning, modifying the element values in a list does not change its memory address and ID. This means what is included in the list's byte counts are only references to separate element objects of their own memory addresses. Since storing memory references only costs constant space of 8 bytes (i.e., 64 bits in a 64-bit OS), the *sys.getsizeof()* function can only count the bytes for the memory allocation of these reference pointers.\n","\n","If one wants to calculate precisely the total memory size of the whole list data, we should use the following approach:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["import sys\n","l2 = [\"二\", 0]\n","\n","byte_count = sys.getsizeof(l2) + sys.getsizeof(l2[0]) + sys.getsizeof(l2[1])\n","print(byte_count)"]},{"cell_type":"markdown","metadata":{},"source":["Next, since all the element references are organized as an ordered sequence, we consider the time complexity to add or remove elements from this ordered sequence."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["trial_count = 1000\n","\n","import time\n","\n","# Test remove the last elements\n","test_list = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')*1000000\n","tic = time.time()\n","for i in range(trial_count):\n"," test_list.pop(-1)\n","elapsed_time = time.time() - tic\n","print('Total time removing last elements: ', elapsed_time)\n","\n","# Test remove the first elements\n","test_list = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')*1000000\n","tic = time.time()\n","for i in range(trial_count):\n"," test_list.pop(0)\n","elapsed_time = time.time() - tic\n","print('Total time removing first elements: ',elapsed_time)"]},{"cell_type":"markdown","metadata":{},"source":["When we run the above sample code, we will see the dramatic difference in the time complexity, where the first operation to remove the last element of a list repeating 1,000 times only costs less than 0.001 second, but the second operation to remove the first element of a list repeating 1,000 times costs more than 26 seconds on Kaggle's online Jupyter Notebook. This dramatic difference in cost of time and therefore computer resources is caused by the fact that the list type simply stores its element references as an ordered sequence. Consider the following two situations:\n","\n","* When the last element of a sequence is removed, the length of the sequence is simply reduced by one, and there is no other operations necessary to maintain values for the rest of the elements in the list.\n","* When the first element of a sequence is removed, to maintain the order of the sequence except removing the first element, Python actually iteratively moves the (i+1)-th element reference to overwrite the i-th element reference. As a result, when our test list is long such as in the above example, this operation of shifting all elements to the left by one actually is very expensive even in modern computer's standard. \n"," \n","The above complexity analysis about the *pop()* operation also applies to the *insert()* operation. In conclusion, when we use the list-type variables, we shall try to encourage poping and inserting more from the end of the list, and avoid the same operations from the beginning or other random intermediate locations."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["1. Please write a Python code to evaluate the number of bytes used to encode an emoji character. The starting assignment statement is provided below:"]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Byte count: 80\n"]}],"source":["import sys\n","s = \"😊\" # Smiling face with smiling eyes emoji\n","print('Byte count: ', sys.getsizeof(s))"]},{"cell_type":"markdown","metadata":{},"source":["2. Explain the difference between the hash results of the two examples that are fairly similar in values:"]},{"cell_type":"code","execution_count":9,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T08:57:50.745974Z","iopub.status.busy":"2024-03-15T08:57:50.745229Z","iopub.status.idle":"2024-03-15T08:57:50.754228Z","shell.execute_reply":"2024-03-15T08:57:50.752831Z","shell.execute_reply.started":"2024-03-15T08:57:50.745928Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["True\n","False\n","Byte count: 76\n","Byte count: 50\n","Byte count: 36\n","Byte count: 34\n"]}],"source":["s1 = '2'; b1 = s1.encode('utf-8')\n","print(s1.__hash__()==b1.__hash__())\n","\n","s2 = \"二\"\n","b2 = s2.encode('utf-8')\n","print(s2.__hash__()==b2.__hash__())\n","print('Byte count: ', sys.getsizeof(s2))\n","print('Byte count: ', sys.getsizeof(s1))\n","print('Byte count: ', sys.getsizeof(b2))\n","print('Byte count: ', sys.getsizeof(b1))\n","# >^'.'^<"]},{"cell_type":"markdown","metadata":{},"source":["3. Debug the following code"]},{"cell_type":"code","execution_count":14,"metadata":{"execution":{"iopub.execute_input":"2024-03-15T09:10:51.999623Z","iopub.status.busy":"2024-03-15T09:10:51.998813Z","iopub.status.idle":"2024-03-15T09:10:52.028879Z","shell.execute_reply":"2024-03-15T09:10:52.026719Z","shell.execute_reply.started":"2024-03-15T09:10:51.999574Z"},"trusted":true},"outputs":[{"ename":"TypeError","evalue":"a bytes-like object is required, not 'str'","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"test string\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'utf-8'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m' '\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mTypeError\u001b[0m: a bytes-like object is required, not 'str'"]}],"source":["s = \"test string\".encode('utf-8')\n","a, b = s.split(' ')\n","\n","print(a, b)"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. In Python, there is a dynamically linked list type called *deque* from the module name *collections*. A deque type variable can pop its elements from the right using *.pop()* method, and from the left using *.popleft()* method.\n","\n","Please modify the sample code above to pop a deque variable with the same one million copies of the 26 alphabet letters from the left and right, one by one. Compare the time complexity of the operations and discuss the result."]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30055,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-2-python-numeric-types.ipynb b/Part One/1-2-python-numeric-types.ipynb index 7dce00e..e121aeb 100644 --- a/Part One/1-2-python-numeric-types.ipynb +++ b/Part One/1-2-python-numeric-types.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 2: Python Numeric Variable Types**\n","\n","By Allen Y. Yang, PhD\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **Variable**: a variable defines a word using a combination of letters, numbers, and some symbols, which serves the purpose to reference a computer memory address where some data value is stored.\n","* **int**: The keyword of the integer type data in Python.\n","* **float**: The keyword of the floating-point type data in Python.\n","* **bool**: The keyword of the Boolean type data that takes only two possible values: True or False.\n","* **Operator**: An operator is a special function with a reserved symbol, such as + or /. The list of input arguments of an operator is pre-defined by the language, usually includes the values immediately before or/and after the symbol.\n","* **Module**: A Python module is a set of code that is stored in a stand-alone program file, ending with a suffix string \".py\" called a filename extension. Storing Python functions in a module further allows programmers to logically group a set of relevant functions in one file and then later can be imported into other Python code."]},{"cell_type":"markdown","metadata":{},"source":["# Integers in Python\n","\n","Integers are a basic numeric type. What is somewhat special and may be surprising to many beginners is that Python standards specify that it is required that an integer in Python may represent a value of arbitrary size, namely, any integer number between - infinity to + infinity.\n","\n","The next code block shows some examples:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2024-02-23T15:12:17.772127Z","iopub.status.busy":"2024-02-23T15:12:17.771412Z","iopub.status.idle":"2024-02-23T15:12:17.816813Z","shell.execute_reply":"2024-02-23T15:12:17.815519Z","shell.execute_reply.started":"2024-02-23T15:12:17.772086Z"},"trusted":true},"outputs":[],"source":["Int = 10\n","\n","i2 = int(False) # type casting from boolean to int\n","print(i2)\n","\n","int = 10 # What could be potential risk in this command\n","\n","result = Int + int\n","\n","print(result)"]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.execute_input":"2024-02-07T05:09:11.325003Z","iopub.status.busy":"2024-02-07T05:09:11.324588Z","iopub.status.idle":"2024-02-07T05:09:11.333990Z","shell.execute_reply":"2024-02-07T05:09:11.332592Z","shell.execute_reply.started":"2024-02-07T05:09:11.324971Z"},"trusted":true},"outputs":[],"source":["print(5-2)\n","print(5*2)\n","print(5**2) # 5^2\n","print(17/3) # Return is a float number\n","print(17//3) # Floor division with integers will return integers\n","print(17%3) # 17 = (17//3) * 3 + 17 % 3"]},{"cell_type":"markdown","metadata":{},"source":["In this example, arithmetic operators \"-\" and \"*\" take the same meaning as in math. In the previous lecture, we also showed the \"+\" operator.\n","\n","\"**\" operator represents \"to the power of\". Hence, 5 to the power of 2 is 25.\n","\n","\"//\" represents floor division, meaning the operation will first perform the regular float division followed by the floor() function to return only the integer part. For example, the floor() return of the float division \"17/3\" is 5, where \"/\" represents the regular floating-point division, which we will show more examples later in the lecture. As another example, the floor() return of the float division \"-17/3\" is -6.\n","\n","\"%\" represents modulo operation. In the above example, we can see that 17 = 17 // 3 + 17 % 3"]},{"cell_type":"markdown","metadata":{},"source":["When we have two integers, their values can also be compared in the traditional sense. Let us look at examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2024-02-07T05:09:15.138377Z","iopub.status.busy":"2024-02-07T05:09:15.137991Z","iopub.status.idle":"2024-02-07T05:09:15.144375Z","shell.execute_reply":"2024-02-07T05:09:15.143535Z","shell.execute_reply.started":"2024-02-07T05:09:15.138347Z"},"trusted":true},"outputs":[],"source":["print(3 > 2)\n","print(2 >= -1)\n","print(4//2 == 2)\n","print(4/2 == 2)\n","print(4/2 != 2)"]},{"cell_type":"markdown","metadata":{},"source":["From the above code block, comparison operators between two numbers (one can also view a comparison operator as a function with two input arguments) returns another value type that takes only two values: True or False. This type in Python and many other lauguages is called **Boolean**. A boolean type value is the return output from a comparison operator if executed properly.\n","\n","The following comparison operators in Python directly match to those same operators in arithmetic: <, <=, >, >=. \"is equal to\" comparison is denoted as \"==\", while \"is not equal to\" is denoated as \"!=\"\n","\n","Now let us dissect the five returns. The first two comparison results are trivial as just toy examples. The third comparison essentially tests whether (4//2) = 2 is equal to 2, which leads to return value True. However, we further observe in the fourth comparison that (4/2) = 2.0 (in here we simply recall that \"/\" in Python represents floating-point division, so the returning result is always a float, namely, with fraction portion even in cases that the fractional part is zero). So Python evaluation is telling us that 2.0 == 2. This verifies that comparison operators only compare their value magnitudes, but not their types or any other things. From the value magnitude, 2.0 and 2 are equal (but they are not equivalent, as we will soon see below)."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print(True == 1)\n","print(False == 0)\n","print(type(True))"]},{"cell_type":"markdown","metadata":{},"source":["The above two statements further review how boolean values are stored in computer. Specifically, True is stored as the same value as the integer value 1; while False is stored as the same value as the integer value 0. However, again, two numbers being equal in value does not mean that the two numbers are equivalent. In the third statement, if we print out the type of a boolean value, its type is shown as a Python class with the name 'bool', which is a text string referring to the boolean type. Clearly, the type of integer and the type of boolean are not equivalent or identical."]},{"cell_type":"markdown","metadata":{},"source":["# Variables in Python\n","\n","In computer, programs and data are stored in its memory space. When a program needs to use the data, such as an integer value of 3 after the calculation of 5-2, the program needs a convenient way to reference the location of the data 3 stored in the memory. \n","\n","One direct way to reference memory data is to declare its memory address, which will be a number starting from zero referencing the first **byte** of the memory, and so on and so forth. Byte is the fundamental memory unit when referencing and retrieving data in all modern computer systems. One byte contains a sequence of 8 bits, and 1 bit represents a single number of either 0 or 1. \n","\n","However, directly referencing memory addresses is very cumbersome due to at least two reasons: 1. Memory addresses are difficult to use in coding programs. An analogy is that it would be a lot easier to find people's phone number from today's smartphone systems using their names. 2. When addressing the memory, the memory address cannot be the only information. There is a whole list of other attributes Python requires to know to be able to properly retrieve the data from memory. One of such attributes is the value type as we mentioned before. An analogy that continues to borrow the phone number example would be associating a phone number not only with its user name but also the user's company, address, and other information. \n","\n","The concept of **variable** is created to solve the issues when a program references memory addresses to retrieve data. Let's see some examples below: "]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["a = 5-2\n","b = 5*a\n","print(a>b)\n","print(type(a))"]},{"cell_type":"markdown","metadata":{},"source":["In this simple example, we define a variable with a word using a single letter *a*. Variable *a* then is a reference of the calculation result: 5-2. In the second statement, the value of a is used to calculate the expression 5\\*a, which generates an integer result 15 and it is again stored in the memory and conveniently referenced by a variable *b*.\n","\n","We see in the third statement that the values of *a* and *b* are again retrieved in the comparison expression. We can also query the type of the memory value where the variable references, as shown in the fourth statement."]},{"cell_type":"markdown","metadata":{},"source":["# Floating-Point Numbers in Python\n","\n","A floating-point number is a rational number representation that contains an integer part and a fractional part. A rational number is defined by the division result of two integers. For example, let us look at the code block below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:36:46.08102Z","iopub.status.busy":"2021-06-16T07:36:46.08062Z","iopub.status.idle":"2021-06-16T07:36:46.087165Z","shell.execute_reply":"2021-06-16T07:36:46.086205Z","shell.execute_reply.started":"2021-06-16T07:36:46.080984Z"},"trusted":true},"outputs":[],"source":["a = 1/80\n","print(a)\n","print(a == 1.25*10**-2)\n","print(type(a))"]},{"cell_type":"markdown","metadata":{},"source":["A variable *a* is created to reference the division of two integers 1 and 80. The result is equal to 0.0125, where the integer part is 0, and the fractional part is .0125.\n","\n","The name \"floating point\" is so called because the same rational number can be represented by placing its decimal point at different places and then multiplied by a base-10 exponent. For example, \\\\(0.0125 = 0.125\\times 10^{-1} = 1.25 \\times 10^{-2} \\\\), etc. All three representations define the same rational number. The fact is verified in the third statement (recall \"**\" means to the power of).\n","\n","In Python, the type of a floating point number is denoted as 'float'. It is stored as a class structure as the same as the 'int' type, which we will discuss in much later part of the course. Because of this notation, floating-point numbers are often simply called floats.\n","\n","In addition to the typical arithmetic operators that continue to apply to floating-point calculation, such as +, -, \\*, \\\\, let us see some more examples below. The examples show that the operations of modulo, integer division, and powers are valid also to floats."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:35:41.072674Z","iopub.status.busy":"2021-06-16T07:35:41.072328Z","iopub.status.idle":"2021-06-16T07:35:41.07775Z","shell.execute_reply":"2021-06-16T07:35:41.076862Z","shell.execute_reply.started":"2021-06-16T07:35:41.072645Z"},"trusted":true},"outputs":[],"source":["print(3.14 % 2)\n","print(3.14 // 2)\n","print(3.14 ** 2 == 3.14*3.14)"]},{"cell_type":"markdown","metadata":{},"source":["In Python and many other languages, type conversion operations are defined to convert one type of variable to another type.\n","\n","In the above, we have discussed separately two types: int and float. Let us next discuss how to define type conversion between the two types. First, from int to float is trivial. It can be done in two ways:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:38:23.151285Z","iopub.status.busy":"2021-06-16T07:38:23.150915Z","iopub.status.idle":"2021-06-16T07:38:23.156427Z","shell.execute_reply":"2021-06-16T07:38:23.155336Z","shell.execute_reply.started":"2021-06-16T07:38:23.151255Z"},"trusted":true},"outputs":[],"source":["a = 3\n","print(a*1.0)\n","print(float(a))"]},{"cell_type":"markdown","metadata":{},"source":["We see in the above code block, an integer variable a is first defined to be equal to 3. Multiplying a by a float 1.0 will result in a float type return, but the magnitude of the result in floating-point remains the same.\n","\n","The second way is to use a built-in type conversion function *float()*. As the name suggests, the function takes in an input argument. As long as this argument can be understood to be represented by a float value, the function will output a float result of that value, as shown above. The *float()* function is also called a **casting** operation.\n","\n","The other direction to convert floats to ints is more complicated. The reason is that if a float contains nontrivial digits after the decimal point, then such a convertion from float to int will change the value of the input number. After the conversion, some information will be lost. Therefore, the conversion can be performed in a variety of ways, as we shall demonstrate below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:33:47.583356Z","iopub.status.busy":"2021-06-16T07:33:47.582977Z","iopub.status.idle":"2021-06-16T07:33:47.592585Z","shell.execute_reply":"2021-06-16T07:33:47.590309Z","shell.execute_reply.started":"2021-06-16T07:33:47.583322Z"},"trusted":true},"outputs":[],"source":["import math\n","\n","print(int(4.6))\n","print(int(-4.1))\n","print(round(4.6))\n","print(round(-4.1))\n","print(math.floor(4.6))\n","print(math.floor(-4.6))\n","print(math.ceil(4.1))\n","print(math.ceil(-4.1))"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, we see four ways a float value can be converted to int. The most important fact to remember is that, if the float value has nonzero numbers after the decimal point, then the conversion will lose information. For example, in the first case, converting 4.6 using the function *int()* returns 4, which directly takes the integer part and discard the fractional part. So *int()* is another so-called **casting function**.\n","\n","The second function is *round()*. It rounds up a float to its closest int number. For example, in the code block, we see that 4.6 rounds up to 5, and -4.1 rounds up to -4.\n","\n","The last two functions are retrieving the floor and ceiling integer values from floats, respectively. When we read the code, we notice that if we directly call the two functions *floor()*, *ceil()*, Python will return error:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print(floor(4.6))"]},{"cell_type":"markdown","metadata":{},"source":["The difference between using *floor()* and *math.floor()* highlights the ways Python organizes its available functions into separate modules. By default, Python at launch time will only load a set of so-called built-in functions. These build-in functions include *print()*, *int()*, *float()*, and *type()* that we have learned. We will learn a lot more as the course progresses.\n","\n","However, there are vast amounts of other functions that are not part of the built-in functions. These functions are organized into modules for two main reasons: \n","1. Placing more diverse functions into individual modules helps to enhance reusability of these functions, and each module can be organized in manageable size. Otherwise, consider the counter-example if all Python functions are stored in a single file, then this file would be impossibly large to store and load.\n","2. The action to **import** modules allows users to define and release their own modules. In fact, the real power of Python in the AI era has been that a lot of very powerful new modules have been open sourced by different developers. We benefit from their contributions by importing their modules in our code.\n","\n","So in summary, calling *floor()* and *ceil()* functions requires the code to explicitly declare to import the *math* module. Then, *math.floor()* returns the greatest integer that is smaller than the input argument; *math.ceil()* returns the least integer that is greater than the input argument."]},{"cell_type":"markdown","metadata":{},"source":["# Random Generation of Numbers\n","\n","Finally, let us review a following Python code that uses randomly generated numbers and operators to test your math abilities. Please refer to the lecture video for more details."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2023-07-24T21:28:01.119113Z","iopub.status.busy":"2023-07-24T21:28:01.118728Z","iopub.status.idle":"2023-07-24T21:28:26.196251Z","shell.execute_reply":"2023-07-24T21:28:26.195237Z","shell.execute_reply.started":"2023-07-24T21:28:01.119081Z"},"trusted":true},"outputs":[],"source":["# import two Python modules\n","import math # includes additional math functions\n","from random import randint # includes functions for generating random numbers\n","\n","# Define constants\n","OPERATOR_ROUND = 1\n","OPERATOR_INT = 2\n","OPERATOR_FLOOR = 3\n","OPERATOR_CEIL = 4\n","\n","random_operator = randint(1,4) # Select an operator, equiv to random.randint\n","random_A = randint(-10,10) # Select first value\n","random_B = randint(1,10) # Select second value\n","if random_operator == OPERATOR_ROUND: # If selected operator is round()\n"," result = round(random_A/random_B)\n"," operator_string = \"round\"\n","elif random_operator == OPERATOR_INT: # If selected operator is int()\n"," result = int(random_A/random_B)\n"," operator_string = \"int\"\n","elif random_operator == OPERATOR_FLOOR: # If selected operator is floor()\n"," result = math.floor(random_A/random_B)\n"," operator_string = \"floor\"\n","else: # If selected operator is ceil()\n"," result = math.ceil(random_A/random_B)\n"," operator_string = \"ceil\"\n","\n","# Prepare question string\n","question_string = ( \"Question: \" + operator_string + \"(\" + str(random_A)\n"," + \"/\" + str(random_B) + \") = ? \")\n","\n","user_result = input(question_string) # Wait for user input\n","user_result = int(user_result) # Convert string to int\n","if user_result == result: # The answer is correct, add one score\n"," print(\"Correct!\")\n","else: # The answer is wrong, add one score\n"," print(\"Incorrect!\")"]},{"cell_type":"markdown","metadata":{},"source":["In the above code, we see the good practice of variable naming convention, that constants, namely, variables that are not supposed to change their values, are named using all-cap words connected by underlines \"_\", and normal variables are named using small-cap words also connected by underlines.\n","\n","In the beginning, the code uses two formats to import modules into the Python code, one is the *math* module, the other is the *randint()* function from the *random* module. Using \n","\n"," from random import randint\n"," \n","allows subsequent code to directly call the *randint()* function. Alternatively, if the code merely does\n","\n"," import random\n"," \n","then subsequently the code should use *random.randint()* to call the same function. The *randint()* function has two arguments, and will return a random integer in between the two number arguments, with the given numbers also included in the selection range.\n","\n","Then the code not only uses *randint()* to select a numerator and a denominator, but also to select an operator, where 1 represents *round()*, 2 represents *int()*, 3 represents *floor()*, and 4 represents *ceil()*. The *if -- elif --else* statements are conditional flow control statements that we will study in details in later courses. In here, its function is to select a function to convert the fraction calculation *random_A/random_B* based on the value of *random_operator*. \n","\n","Finally, a *user_result* records a user inputed number that estimates the same calculation by the user. The last *if -- else* statement compares user's input and computer result, and uses *print()* to report either the user's answer is correct or incorrect."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* Python may represent integer numbers, or *int*, precisely up to arbitrary size, only limited by the available computer storage size.\n","* The following operations between two int's will return an int: +, -, *, //, %, **\n","* Boolean type values are stored as 1 (True) or 0 (False)\n","* Comparison operations, if legitimate between compatible variable types, return boolean values: ==, <, >, <=, >=, !=\n","* Python represents noninteger real numbers as using floating-point format, or *float*.\n","* The following operations between a float and another float or int will return a float: +, -, *, //, %, **.\n","* The float division always returns a float: /.\n","* A float can be converted to an int type, and may lose accuracy in the process: int(), round(), math.floor(), math.ceil().\n","* An int can also be converted to a float type: float()\n","* random.randin(left, right) function generates a random integer within the range [left, right]."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Discuss the difference between the results of two operations: 1. a = 10/5; 2. b = 10//5. Print out the boolean result that compares a == b.\n","\n","2. Please write a code block to implement the following operation: Obtain an integer value from user input, then separate the input value as the sum of two parts. First part is the result by integer division // of five (5), the second part is the result by modulo % of five (5). For example, if the input integer is 17, the output should be a string: 17 = 3 * 5 + 2.\n","\n","3. The math constant PI is defined in Python in the math module as math.pi. Please write a code block. In the code, first import the math module, then calculate a circle's area with its radius equal to 2. Assign the result to a variable called area, and then print out its final value.\n","\n","4. Continue with the above code block, with the value of the area of a circle given, please use math.pi constant and math.sqrt() function to calculate the radius of the circle. Please assign the result to a variable called radius, and then print out its final result.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["print (3 plus 2)\n","print (sqrt(9))"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Write a code block, in which the human user use function input() to input a number between 0 and 9, and then the computer use random.randint() function to also generate a number between 0 and 9. If the user's number is greater, print the string \"You Win\"; if the user's number is less, print \"You Lose\"; otherwise, print \"Draw\". Hint: Do not forget to type cast the user's input in str type to int type using the function int().\n","\n","2. Evaluate the code below, and then find a possible explanation why the return result is either True or False. Hint: this is not a \"bug\"."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2024-02-07T05:06:17.645820Z","iopub.status.busy":"2024-02-07T05:06:17.644929Z","iopub.status.idle":"2024-02-07T05:06:17.700851Z","shell.execute_reply":"2024-02-07T05:06:17.699691Z","shell.execute_reply.started":"2024-02-07T05:06:17.645779Z"},"trusted":true},"outputs":[],"source":["0.2 + 0.2 + 0.2 == 0.6"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30527,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.12"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 2: Python Numeric Variable Types**\n","\n","By Allen Y. Yang, PhD\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **Variable**: a variable defines a word using a combination of letters, numbers, and some symbols, which serves the purpose to reference a computer memory address where some data value is stored.\n","* **int**: The keyword of the integer type data in Python.\n","* **float**: The keyword of the floating-point type data in Python.\n","* **bool**: The keyword of the Boolean type data that takes only two possible values: True or False.\n","* **Operator**: An operator is a special function with a reserved symbol, such as + or /. The list of input arguments of an operator is pre-defined by the language, usually includes the values immediately before or/and after the symbol.\n","* **Module**: A Python module is a set of code that is stored in a stand-alone program file, ending with a suffix string \".py\" called a filename extension. Storing Python functions in a module further allows programmers to logically group a set of relevant functions in one file and then later can be imported into other Python code."]},{"cell_type":"markdown","metadata":{},"source":["# Integers in Python\n","\n","Integers are a basic numeric type. What is somewhat special and may be surprising to many beginners is that Python standards specify that it is required that an integer in Python may represent a value of arbitrary size, namely, any integer number between - infinity to + infinity.\n","\n","The next code block shows some examples:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2024-02-23T15:12:17.772127Z","iopub.status.busy":"2024-02-23T15:12:17.771412Z","iopub.status.idle":"2024-02-23T15:12:17.816813Z","shell.execute_reply":"2024-02-23T15:12:17.815519Z","shell.execute_reply.started":"2024-02-23T15:12:17.772086Z"},"trusted":true},"outputs":[],"source":["Int = 10\n","\n","i2 = int(False) # type casting from boolean to int\n","print(i2)\n","\n","int = 10 # What could be potential risk in this command\n","\n","result = Int + int\n","\n","print(result)"]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.execute_input":"2024-02-07T05:09:11.325003Z","iopub.status.busy":"2024-02-07T05:09:11.324588Z","iopub.status.idle":"2024-02-07T05:09:11.333990Z","shell.execute_reply":"2024-02-07T05:09:11.332592Z","shell.execute_reply.started":"2024-02-07T05:09:11.324971Z"},"trusted":true},"outputs":[],"source":["print(5-2)\n","print(5*2)\n","print(5**2) # 5^2\n","print(17/3) # Return is a float number\n","print(17//3) # Floor division with integers will return integers\n","print(17%3) # 17 = (17//3) * 3 + 17 % 3"]},{"cell_type":"markdown","metadata":{},"source":["In this example, arithmetic operators \"-\" and \"*\" take the same meaning as in math. In the previous lecture, we also showed the \"+\" operator.\n","\n","\"**\" operator represents \"to the power of\". Hence, 5 to the power of 2 is 25.\n","\n","\"//\" represents floor division, meaning the operation will first perform the regular float division followed by the floor() function to return only the integer part. For example, the floor() return of the float division \"17/3\" is 5, where \"/\" represents the regular floating-point division, which we will show more examples later in the lecture. As another example, the floor() return of the float division \"-17/3\" is -6.\n","\n","\"%\" represents modulo operation. In the above example, we can see that 17 = 17 // 3 + 17 % 3"]},{"cell_type":"markdown","metadata":{},"source":["When we have two integers, their values can also be compared in the traditional sense. Let us look at examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2024-02-07T05:09:15.138377Z","iopub.status.busy":"2024-02-07T05:09:15.137991Z","iopub.status.idle":"2024-02-07T05:09:15.144375Z","shell.execute_reply":"2024-02-07T05:09:15.143535Z","shell.execute_reply.started":"2024-02-07T05:09:15.138347Z"},"trusted":true},"outputs":[],"source":["print(3 > 2)\n","print(2 >= -1)\n","print(4//2 == 2)\n","print(4/2 == 2)\n","print(4/2 != 2)"]},{"cell_type":"markdown","metadata":{},"source":["From the above code block, comparison operators between two numbers (one can also view a comparison operator as a function with two input arguments) returns another value type that takes only two values: True or False. This type in Python and many other lauguages is called **Boolean**. A boolean type value is the return output from a comparison operator if executed properly.\n","\n","The following comparison operators in Python directly match to those same operators in arithmetic: <, <=, >, >=. \"is equal to\" comparison is denoted as \"==\", while \"is not equal to\" is denoated as \"!=\"\n","\n","Now let us dissect the five returns. The first two comparison results are trivial as just toy examples. The third comparison essentially tests whether (4//2) = 2 is equal to 2, which leads to return value True. However, we further observe in the fourth comparison that (4/2) = 2.0 (in here we simply recall that \"/\" in Python represents floating-point division, so the returning result is always a float, namely, with fraction portion even in cases that the fractional part is zero). So Python evaluation is telling us that 2.0 == 2. This verifies that comparison operators only compare their value magnitudes, but not their types or any other things. From the value magnitude, 2.0 and 2 are equal (but they are not equivalent, as we will soon see below)."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print(True == 1)\n","print(False == 0)\n","print(type(True))"]},{"cell_type":"markdown","metadata":{},"source":["The above two statements further review how boolean values are stored in computer. Specifically, True is stored as the same value as the integer value 1; while False is stored as the same value as the integer value 0. However, again, two numbers being equal in value does not mean that the two numbers are equivalent. In the third statement, if we print out the type of a boolean value, its type is shown as a Python class with the name 'bool', which is a text string referring to the boolean type. Clearly, the type of integer and the type of boolean are not equivalent or identical."]},{"cell_type":"markdown","metadata":{},"source":["# Variables in Python\n","\n","In computer, programs and data are stored in its memory space. When a program needs to use the data, such as an integer value of 3 after the calculation of 5-2, the program needs a convenient way to reference the location of the data 3 stored in the memory. \n","\n","One direct way to reference memory data is to declare its memory address, which will be a number starting from zero referencing the first **byte** of the memory, and so on and so forth. Byte is the fundamental memory unit when referencing and retrieving data in all modern computer systems. One byte contains a sequence of 8 bits, and 1 bit represents a single number of either 0 or 1. \n","\n","However, directly referencing memory addresses is very cumbersome due to at least two reasons: 1. Memory addresses are difficult to use in coding programs. An analogy is that it would be a lot easier to find people's phone number from today's smartphone systems using their names. 2. When addressing the memory, the memory address cannot be the only information. There is a whole list of other attributes Python requires to know to be able to properly retrieve the data from memory. One of such attributes is the value type as we mentioned before. An analogy that continues to borrow the phone number example would be associating a phone number not only with its user name but also the user's company, address, and other information. \n","\n","The concept of **variable** is created to solve the issues when a program references memory addresses to retrieve data. Let's see some examples below: "]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["a = 5-2\n","b = 5*a\n","print(a>b)\n","print(type(a))"]},{"cell_type":"markdown","metadata":{},"source":["In this simple example, we define a variable with a word using a single letter *a*. Variable *a* then is a reference of the calculation result: 5-2. In the second statement, the value of a is used to calculate the expression 5\\*a, which generates an integer result 15 and it is again stored in the memory and conveniently referenced by a variable *b*.\n","\n","We see in the third statement that the values of *a* and *b* are again retrieved in the comparison expression. We can also query the type of the memory value where the variable references, as shown in the fourth statement."]},{"cell_type":"markdown","metadata":{},"source":["# Floating-Point Numbers in Python\n","\n","A floating-point number is a rational number representation that contains an integer part and a fractional part. A rational number is defined by the division result of two integers. For example, let us look at the code block below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:36:46.08102Z","iopub.status.busy":"2021-06-16T07:36:46.08062Z","iopub.status.idle":"2021-06-16T07:36:46.087165Z","shell.execute_reply":"2021-06-16T07:36:46.086205Z","shell.execute_reply.started":"2021-06-16T07:36:46.080984Z"},"trusted":true},"outputs":[],"source":["a = 1/80\n","print(a)\n","print(a == 1.25*10**-2)\n","print(type(a))"]},{"cell_type":"markdown","metadata":{},"source":["A variable *a* is created to reference the division of two integers 1 and 80. The result is equal to 0.0125, where the integer part is 0, and the fractional part is .0125.\n","\n","The name \"floating point\" is so called because the same rational number can be represented by placing its decimal point at different places and then multiplied by a base-10 exponent. For example, \\\\(0.0125 = 0.125\\times 10^{-1} = 1.25 \\times 10^{-2} \\\\), etc. All three representations define the same rational number. The fact is verified in the third statement (recall \"**\" means to the power of).\n","\n","In Python, the type of a floating point number is denoted as 'float'. It is stored as a class structure as the same as the 'int' type, which we will discuss in much later part of the course. Because of this notation, floating-point numbers are often simply called floats.\n","\n","In addition to the typical arithmetic operators that continue to apply to floating-point calculation, such as +, -, \\*, \\\\, let us see some more examples below. The examples show that the operations of modulo, integer division, and powers are valid also to floats."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:35:41.072674Z","iopub.status.busy":"2021-06-16T07:35:41.072328Z","iopub.status.idle":"2021-06-16T07:35:41.07775Z","shell.execute_reply":"2021-06-16T07:35:41.076862Z","shell.execute_reply.started":"2021-06-16T07:35:41.072645Z"},"trusted":true},"outputs":[],"source":["print(3.14 % 2)\n","print(3.14 // 2)\n","print(3.14 ** 2 == 3.14*3.14)"]},{"cell_type":"markdown","metadata":{},"source":["In Python and many other languages, type conversion operations are defined to convert one type of variable to another type.\n","\n","In the above, we have discussed separately two types: int and float. Let us next discuss how to define type conversion between the two types. First, from int to float is trivial. It can be done in two ways:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:38:23.151285Z","iopub.status.busy":"2021-06-16T07:38:23.150915Z","iopub.status.idle":"2021-06-16T07:38:23.156427Z","shell.execute_reply":"2021-06-16T07:38:23.155336Z","shell.execute_reply.started":"2021-06-16T07:38:23.151255Z"},"trusted":true},"outputs":[],"source":["a = 3\n","print(a*1.0)\n","print(float(a))"]},{"cell_type":"markdown","metadata":{},"source":["We see in the above code block, an integer variable a is first defined to be equal to 3. Multiplying a by a float 1.0 will result in a float type return, but the magnitude of the result in floating-point remains the same.\n","\n","The second way is to use a built-in type conversion function *float()*. As the name suggests, the function takes in an input argument. As long as this argument can be understood to be represented by a float value, the function will output a float result of that value, as shown above. The *float()* function is also called a **casting** operation.\n","\n","The other direction to convert floats to ints is more complicated. The reason is that if a float contains nontrivial digits after the decimal point, then such a convertion from float to int will change the value of the input number. After the conversion, some information will be lost. Therefore, the conversion can be performed in a variety of ways, as we shall demonstrate below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-16T07:33:47.583356Z","iopub.status.busy":"2021-06-16T07:33:47.582977Z","iopub.status.idle":"2021-06-16T07:33:47.592585Z","shell.execute_reply":"2021-06-16T07:33:47.590309Z","shell.execute_reply.started":"2021-06-16T07:33:47.583322Z"},"trusted":true},"outputs":[],"source":["import math\n","\n","print(int(4.6))\n","print(int(-4.1))\n","print(round(4.6))\n","print(round(-4.1))\n","print(math.floor(4.6))\n","print(math.floor(-4.6))\n","print(math.ceil(4.1))\n","print(math.ceil(-4.1))"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, we see four ways a float value can be converted to int. The most important fact to remember is that, if the float value has nonzero numbers after the decimal point, then the conversion will lose information. For example, in the first case, converting 4.6 using the function *int()* returns 4, which directly takes the integer part and discard the fractional part. So *int()* is another so-called **casting function**.\n","\n","The second function is *round()*. It rounds up a float to its closest int number. For example, in the code block, we see that 4.6 rounds up to 5, and -4.1 rounds up to -4.\n","\n","The last two functions are retrieving the floor and ceiling integer values from floats, respectively. When we read the code, we notice that if we directly call the two functions *floor()*, *ceil()*, Python will return error:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print(floor(4.6))"]},{"cell_type":"markdown","metadata":{},"source":["The difference between using *floor()* and *math.floor()* highlights the ways Python organizes its available functions into separate modules. By default, Python at launch time will only load a set of so-called built-in functions. These build-in functions include *print()*, *int()*, *float()*, and *type()* that we have learned. We will learn a lot more as the course progresses.\n","\n","However, there are vast amounts of other functions that are not part of the built-in functions. These functions are organized into modules for two main reasons: \n","1. Placing more diverse functions into individual modules helps to enhance reusability of these functions, and each module can be organized in manageable size. Otherwise, consider the counter-example if all Python functions are stored in a single file, then this file would be impossibly large to store and load.\n","2. The action to **import** modules allows users to define and release their own modules. In fact, the real power of Python in the AI era has been that a lot of very powerful new modules have been open sourced by different developers. We benefit from their contributions by importing their modules in our code.\n","\n","So in summary, calling *floor()* and *ceil()* functions requires the code to explicitly declare to import the *math* module. Then, *math.floor()* returns the greatest integer that is smaller than the input argument; *math.ceil()* returns the least integer that is greater than the input argument."]},{"cell_type":"markdown","metadata":{},"source":["# Random Generation of Numbers\n","\n","Finally, let us review a following Python code that uses randomly generated numbers and operators to test your math abilities. Please refer to the lecture video for more details."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2023-07-24T21:28:01.119113Z","iopub.status.busy":"2023-07-24T21:28:01.118728Z","iopub.status.idle":"2023-07-24T21:28:26.196251Z","shell.execute_reply":"2023-07-24T21:28:26.195237Z","shell.execute_reply.started":"2023-07-24T21:28:01.119081Z"},"trusted":true},"outputs":[],"source":["# import two Python modules\n","import math # includes additional math functions\n","from random import randint # includes functions for generating random numbers\n","\n","# Define constants\n","OPERATOR_ROUND = 1\n","OPERATOR_INT = 2\n","OPERATOR_FLOOR = 3\n","OPERATOR_CEIL = 4\n","\n","random_operator = randint(1,4) # Select an operator, equiv to random.randint\n","random_A = randint(-10,10) # Select first value\n","random_B = randint(1,10) # Select second value\n","if random_operator == OPERATOR_ROUND: # If selected operator is round()\n"," result = round(random_A/random_B)\n"," operator_string = \"round\"\n","elif random_operator == OPERATOR_INT: # If selected operator is int()\n"," result = int(random_A/random_B)\n"," operator_string = \"int\"\n","elif random_operator == OPERATOR_FLOOR: # If selected operator is floor()\n"," result = math.floor(random_A/random_B)\n"," operator_string = \"floor\"\n","else: # If selected operator is ceil()\n"," result = math.ceil(random_A/random_B)\n"," operator_string = \"ceil\"\n","\n","# Prepare question string\n","question_string = ( \"Question: \" + operator_string + \"(\" + str(random_A)\n"," + \"/\" + str(random_B) + \") = ? \")\n","\n","user_result = input(question_string) # Wait for user input\n","user_result = int(user_result) # Convert string to int\n","if user_result == result: # The answer is correct, add one score\n"," print(\"Correct!\")\n","else: # The answer is wrong, add one score\n"," print(\"Incorrect!\")"]},{"cell_type":"markdown","metadata":{},"source":["In the above code, we see the good practice of variable naming convention, that constants, namely, variables that are not supposed to change their values, are named using all-cap words connected by underlines \"_\", and normal variables are named using small-cap words also connected by underlines.\n","\n","In the beginning, the code uses two formats to import modules into the Python code, one is the *math* module, the other is the *randint()* function from the *random* module. Using \n","\n"," from random import randint\n"," \n","allows subsequent code to directly call the *randint()* function. Alternatively, if the code merely does\n","\n"," import random\n"," \n","then subsequently the code should use *random.randint()* to call the same function. The *randint()* function has two arguments, and will return a random integer in between the two number arguments, with the given numbers also included in the selection range.\n","\n","Then the code not only uses *randint()* to select a numerator and a denominator, but also to select an operator, where 1 represents *round()*, 2 represents *int()*, 3 represents *floor()*, and 4 represents *ceil()*. The *if -- elif --else* statements are conditional flow control statements that we will study in details in later courses. In here, its function is to select a function to convert the fraction calculation *random_A/random_B* based on the value of *random_operator*. \n","\n","Finally, a *user_result* records a user inputed number that estimates the same calculation by the user. The last *if -- else* statement compares user's input and computer result, and uses *print()* to report either the user's answer is correct or incorrect."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* Python may represent integer numbers, or *int*, precisely up to arbitrary size, only limited by the available computer storage size.\n","* The following operations between two int's will return an int: +, -, *, //, %, **\n","* Boolean type values are stored as 1 (True) or 0 (False)\n","* Comparison operations, if legitimate between compatible variable types, return boolean values: ==, <, >, <=, >=, !=\n","* Python represents noninteger real numbers as using floating-point format, or *float*.\n","* The following operations between a float and another float or int will return a float: +, -, *, //, %, **.\n","* The float division always returns a float: /.\n","* A float can be converted to an int type, and may lose accuracy in the process: int(), round(), math.floor(), math.ceil().\n","* An int can also be converted to a float type: float()\n","* random.randin(left, right) function generates a random integer within the range [left, right]."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Discuss the difference between the results of two operations: 1. a = 10/5; 2. b = 10//5. Print out the boolean result that compares a == b.\n","\n","2. Please write a code block to implement the following operation: Obtain an integer value from user input, then separate the input value as the sum of two parts. First part is the result by integer division // of five (5), the second part is the result by modulo % of five (5). For example, if the input integer is 17, the output should be a string: 17 = 3 * 5 + 2.\n","\n","3. The math constant PI is defined in Python in the math module as math.pi. Please write a code block. In the code, first import the math module, then calculate a circle's area with its radius equal to 2. Assign the result to a variable called area, and then print out its final value.\n","\n","4. Continue with the above code block, with the value of the area of a circle given, please use math.pi constant and math.sqrt() function to calculate the radius of the circle. Please assign the result to a variable called radius, and then print out its final result.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["print (3 plus 2)\n","print (sqrt(9))"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Write a code block, in which the human user use function input() to input a number between 0 and 9, and then the computer use random.randint() function to also generate a number between 0 and 9. If the user's number is greater, print the string \"You Win\"; if the user's number is less, print \"You Lose\"; otherwise, print \"Draw\". Hint: Do not forget to type cast the user's input in str type to int type using the function int().\n","\n","2. Evaluate the code below, and then find a possible explanation why the return result is either True or False. Hint: this is not a \"bug\"."]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["You win\n"]}],"source":["from random import randint\n","player = int(input(\"num\"))\n","if player > randint(0,9):\n"," print(\"You win\")\n","elif player < randint(0,9):\n"," print(\"You lose\")\n","else:\n"," print('Draw')\n"]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2024-02-07T05:06:17.645820Z","iopub.status.busy":"2024-02-07T05:06:17.644929Z","iopub.status.idle":"2024-02-07T05:06:17.700851Z","shell.execute_reply":"2024-02-07T05:06:17.699691Z","shell.execute_reply.started":"2024-02-07T05:06:17.645779Z"},"trusted":true},"outputs":[{"data":{"text/plain":["False"]},"execution_count":2,"metadata":{},"output_type":"execute_result"}],"source":["0.2 + 0.2 + 0.2 == 0.6\n","#Accuracy up to machine epsilon prevents this from being equal"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30527,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-3-strings-and-text-input-output.ipynb b/Part One/1-3-strings-and-text-input-output.ipynb index e0e2e97..58882ae 100644 --- a/Part One/1-3-strings-and-text-input-output.ipynb +++ b/Part One/1-3-strings-and-text-input-output.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 3: Strings and Text Input/Output**\n","\n","**By Allen Y. Yang, PhD**\n","\n","**(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.**\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **str**: The keyword for the string data type in Python.\n","* **Indexing**: Indexing refers to finding the address and subsequently the stored value within a sequential data type such as a string of characters. Python starts the first index in a sequential data type as zero.\n","* **Slicing**: Extract a subset of sequential data by their indices.\n","* **Type casting**: Converting the representation of stored data value from one type to another. Casting may change the data accuracy and utility as determined by the implementation of the casting algorithm."]},{"cell_type":"markdown","metadata":{},"source":["# Defining Strings\n","\n","In the previous lecture, we have seen Python can output information about computation results using print(). Before the invention of graphical user interface (GUI), the computer interface was predominently using text. In Windows, Mac OSX, or Linux systems, if you search keyword \"terminal\", these systems include a terminal application that allows users to manage the computer using the legacy mode, called the console or terminal interface.\n","\n","As the No.1 programming language in Data Science, handling data encoded in text format is very important for Python. In this lecture, we will discuss basic operations how to use text as a Python program's input or output, collectively known as I/O functions."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T06:43:19.985761Z","iopub.status.busy":"2021-06-17T06:43:19.985114Z","iopub.status.idle":"2021-06-17T06:43:19.995229Z","shell.execute_reply":"2021-06-17T06:43:19.994480Z","shell.execute_reply.started":"2021-06-17T06:43:19.985724Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Hello World!\n","True\n","Hello\n","World!\n","True\n"]}],"source":["a_string = \"Hello World!\"\n","print(type(a_string))\n","\n","b_string = 'Hello World!'\n","print(a_string)\n","print(a_string == b_string)\n","\n","c_string = '''Hello\n","World!'''\n","print(c_string)\n","d_string = \"\"\"Hello\n","World!\"\"\"\n","print(c_string==d_string)"]},{"cell_type":"markdown","metadata":{},"source":["First, we see how a text can be defined in Python. The type of data that are responsible for storing text is called **string**. In the first example above, we define a string variable *a_string* to be the text \"Hello World!\". Then we check its type, and it is a variable class of the name 'str', short for string type.\n","\n","We can also print a string simply by using the same *print()* function.\n","\n","For the a_string variable, its text data are quoted using a pair of double quotation marks. What is contained in between the double quotation marks defines the string. However, For the next b_string variable, its text data are quoted using a pair of single quotation marks. In Python, creating string variables using a pair of either single or double quotation marks is equivalent.\n","\n","Next, we see the \"==\" operator previously was used to compare the equality of int or float values. In the string case, it can also be used to compare if two strings are identical. In the above example, a_string and b_string reference the same text, so the comparison result is True.\n","\n","Finally, Python has an additional text format, which is quite unique to itself. If we use a pair of triple quotation marks, again regardless if they are single or double quotations, it defines a string that contains multiple lines. Please note that using the previous single or double quotation marks, a string text must not have more than one line."]},{"cell_type":"markdown","metadata":{},"source":["By now,you may have wondered that the special characters Python takes over to denote strings, namely, the single and double quotation marks, themselve can be a part of a valid text. How can we include these special characters as data but not as Python symbols? Let us see the following examples first:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["e_string = \"World's best coffee\"\n","f_string = 'World\"s best coffee'\n","print(e_string == f_string)\n","\n","g_string = 'World\\'s best coffee'\n","print(g_string)\n","print(e_string == g_string)"]},{"cell_type":"markdown","metadata":{},"source":["The above code block demonstrates that, if a string is created using a pair of double quotation marks, then Python will treat single quotation marks as regular text data in the string. Vice versa, if a string is created using single quotation marks, then double quotation marks in the string will be treated as regular text.\n","\n","The second half of the code block demonstrates yet another way to declare that Python should treat special characters as regular text data, that is to use another special character specifically created for this purpose, namely, the backslash mark \"\\\". In the definition of g_string, the sequence \\\\' is treated as just a single quotation mark in the text.\n","\n","The special character \\\\ not only can declare regular quotation marks, it can also be used to define other special characters. Let's see a few more examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["h_string = \"This character \\\\ is special\"\n","print(h_string)\n","\n","i_string = \"Hello World!\\b\" \n","print(i_string)\n","\n","j_string = \"Line 1 \\nLine 2\"\n","print(j_string)"]},{"cell_type":"markdown","metadata":{},"source":["In the above three examples, a double backslash sequence *\\\\* is treated in text as a single backslash character. The sequence *\\b* removes one character that immediately precedes it. The sequence *\\n* represents a return character to display what is after it in a new line."]},{"cell_type":"markdown","metadata":{},"source":["# Addressing String Elements: Indexing and Slicing\n","\n","String data are stored in computer memory as a character array, which means an ordered sequence of characters. Python can address and retrieve individual characters in a string using the notation of square brackets. This operation is also known as **indexing**. Some examples are shown below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["a = \"Hello World!\"\n","print(a[0])\n","print(a[1:2])\n","print(a[0:6:2])\n","print(a[-1])\n","print(a[-5:-2])"]},{"cell_type":"markdown","metadata":{},"source":["Let us dissect the above examples. First, we can assume a string variable such as *a* in the example not only represents the entire string, but when in addressing string elements, it also indicates the memory address of the first element. Then any additional offsets from the beginning of the string are described within a pair of square brackets.\n","1. *a[0]* retrieves from the first string character plus zero offset, which represents the first character \"H\".\n","2. *a[1:2]* uses a colon to indicate retrieving a segment of the string characters. The left argument is called **begin**, and the right argument is called **end**. The following rule is somewhat special to Python, if the reader is familiar with other languages, that the string segment retrieved by [begin: end] will include the character at a[begin] position (if valid) but will exclude the character at a[end] position. For the print out of the second example is starting from a[1] = \"e\" but will exclude a[2] = \"l\".\n","3. If the brackets contain three numbers separated by two colons, then the third number is called the **step size**. Hence, the retrieved characters starting at a[0], stopping before a[6], and with step size 2 are a[0]=\"H\", a[2]=\"l\", and a[4]=\"o\".\n","4. The string character addresses can also be counted backwards from the last character. In Python, the last character of *a* is denoted as *a[-1]*.\n","5. Similarly, the same rule to retrieve a segment of a string applies when the offsets are given in negative numbers. In this example, the segment starts from a[-5]=\"o\" and stops before a[-2] = \"d\".\n","\n","Finally, the operations that use the format *string[begin:end:step]* are called **slicing**."]},{"cell_type":"markdown","metadata":{},"source":["# String Functions\n","\n","Next, we see some examples on Python functions that take strings as input arguments:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["first = \"John\"\n","last = \"Smith\"\n","space = \" \"\n","new_string = first + space + last\n","print(new_string)\n","\n","print(len(first))\n","print(ord(space))\n","print(chr(ord(space)) == space)"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, three strings are first created. Then the \"+\" operator applies to string type variables to concatenate the three strings into one new string.\n","\n","The function *len()* returns the length of the string, namely, the number of characters in the string.\n","\n","The next two statements convert a string character into an integer number, and then from the integer number back to a string character. Specifically, in computer memory, string characters are also stored as numbers. The correspondence between characters and numbers is called a codebook. The function *ord()* returns the code of characters based on a particular codebook called Unicode. \n","\n","Then the *chr()* function goes the opposite way, namely, generating a character based on a Unicode number input. In the example, we see that the Unicode for the space character is 32.\n","\n","There are more useful functions that are relevant to string type variables. We will introduce them later in other examples in the course."]},{"cell_type":"markdown","metadata":{},"source":["# Algorithm: Reverse a String\n","\n","Consider the problem that given an input string, we ask to solve for a output string whose characters are in exact reverse order of the input string. This can be done using the slicing operator."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T09:01:52.234913Z","iopub.status.busy":"2021-06-17T09:01:52.234382Z","iopub.status.idle":"2021-06-17T09:01:52.242242Z","shell.execute_reply":"2021-06-17T09:01:52.241209Z","shell.execute_reply.started":"2021-06-17T09:01:52.234879Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["nohty\n","nohtyP\n"]}],"source":["input_string = \"Python\"\n","\n","partial_string = input_string[-1:0:-1]\n","print(partial_string) # Not exactly correct\n","\n","sliced_string = input_string[::-1]\n","print(sliced_string)"]},{"cell_type":"markdown","metadata":{},"source":["We can see from the above code block that, firstly, slicing operation that retrieves the string characters backwards from the last one to the first one with step size -1 does not exactly achieve the goal. Looking at the slicing code, there are two key points to remember:\n","1. The last character is referenced using the negative offset value of -1. If we count the offset positively, this value should be *len(input_string)-1*. Because the string character offset starts from zero, so the length of the string actually points to an offset that is one character beyond the range of the string.\n","2. However, since Python dictates that the slicing will stop before the ending offset, so using the smallest non-negative value zero will not be able to retrieve the first character \"P\" in reverse order. Note we also cannot use values smaller than zero, because as we pointed out above, -1 actually refers to the last character of the string.\n","\n","So the proper way to reverse a string using slicing operation is to keep the -1 step size, but ignore the exact values for *begin* and *end*. In the second algorithm, neither *begin* nor *end* indexes is provided. In such a case, Python will automatically retrieve the longest possible string result. Hence, the algorithm uses step size -1 to traverse the input string in reverse order, and the result shows the intended output."]},{"cell_type":"markdown","metadata":{},"source":["# Using String in Text I/O\n","\n","We have used the function *print()* to output text strings. It is worth noting that *print()* is a rather special type of functions in Python in that it is capable of receiving no argument, one argument, or many arguments. Let us first see an example below:"]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T10:03:33.989074Z","iopub.status.busy":"2021-06-17T10:03:33.988752Z","iopub.status.idle":"2021-06-17T10:03:33.997021Z","shell.execute_reply":"2021-06-17T10:03:33.995835Z","shell.execute_reply.started":"2021-06-17T10:03:33.989045Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["------\n","\n","------\n","John Smith\n","------\n","John Smith 2021 True\n"]}],"source":["print('------')\n","print()\n","print('------')\n","first = \"John\"\n","last = \"Smith\"\n","print(first, last)\n","print('------')\n","print(first, last, 2021, True)"]},{"cell_type":"markdown","metadata":{},"source":["We see in this code block, three scenarios are tested and printed out separated by dash lines. In the first case, *print()* without any argument will output an empty line in the text console. In the second case, *print()* can print out multiple input arguments sequentially, each separated by a space character automatically. In the third case, we see that the multiple input arguments can even by of different types. Our example includes the string type, int type, and boolean type.\n","\n","Next, let us talk about text input. From the console mode, Python can receive a user's text input, conveniently using the statement:\n","\n","*input_string = input()*\n","\n","The return result is of the string type. In coding user and computer interaction, it is strongly recommended that the program provides sufficient text cues before the *input()* function to explain what the program expects the user to input."]},{"cell_type":"markdown","metadata":{},"source":["# Example: Test Your Math \n","\n","Below is our last example today. The program was presented in the last lecture as a math challenge. In this lecture, we will discuss more coding details in Python."]},{"cell_type":"code","execution_count":4,"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.execute_input":"2021-06-17T10:15:22.809893Z","iopub.status.busy":"2021-06-17T10:15:22.809579Z","iopub.status.idle":"2021-06-17T10:15:28.249210Z","shell.execute_reply":"2021-06-17T10:15:28.248104Z","shell.execute_reply.started":"2021-06-17T10:15:22.809863Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Question: floor(9/7) = ? 1\n"]},{"name":"stdout","output_type":"stream","text":["Correct!\n"]}],"source":["# import two Python modules\n","import math # includes additional math functions\n","import random # includes functions for generating random numbers\n","\n","# Define constants\n","OPERATOR_FLOOR = 1\n","OPERATOR_CEIL = 2\n","\n","random_operator = random.randint(1,2) # Select an operator, equiv to random.randint\n","random_A = random.randint(-10,10) # Select first value\n","random_B = random.randint(1,10) # Select second value. Note denominator cannot be zero\n","if random_operator == OPERATOR_FLOOR: # If selected operator is floor()\n"," result = math.floor(random_A/random_B)\n"," operator_string = \"floor\"\n","else: # If selected operator is ceil()\n"," result = math.ceil(random_A/random_B)\n"," operator_string = \"ceil\"\n","\n","# Prepare question string\n","# question_string = ( \"Question: \" + operator_string + \"(\" + str(random_A)\n","# + \"/\" + str(random_B) + \") = ? \")\n","question_string = \"Question: {0}({1}/{2}) = ?\".format(operator_string, str(random_A), str(random_B))\n","\n","user_result = input(question_string) # Wait for user input\n","user_result = int(user_result) # Convert string to int\n","if user_result == result: # The answer is correct, add one score\n"," print(\"Correct!\")\n","else: # The answer is wrong, add one score\n"," print(\"Incorrect!\")"]},{"cell_type":"markdown","metadata":{},"source":["Let us go over this complete Python program from the beginning. First, we see for the first time in this course, the use of comments in Python code. A comment space is denoted by two ways: 1. Using a pair of triple quotation marks directly in the source code (instead of within the print statement). A pair of triple quotation marks will claim everything in between them as comments, which may cover multiple lines. 2. In comparison, using the hash symbol (or being called the pound sign in the US) \"#\" designates immediately after it till the remainder of the same line as comments. When encountering comments, Python will simply ignore them.\n","\n","The purpose of including comments is to increase the readability for the benefits of both the author and equally importantly other readers. If the author of a program did not leave sufficient comments about the logic of the code and the purpose of individual variables, it would be difficult for other readers to second-guess the author's logic and it compromises the reusability of the code.\n","\n","Therefore, in modern software engineering, practitioners should pay equal attention to both the logic of their code and explaining it using sufficient comments. It is quite normal in commercial-quality source code that professional developers could reserve 1/3 to 1/2 space of their code for commenting and documentation purposes. In this course, we strongly recommend our students to start cultivate this practice.\n","\n","In lines 2 and 3, the code imports two modules: math and random. Importing math is to be able to use the *floor()* and *ceil()* functions. Importing random serves another purpose, that we will use a randomized integer generator called *randint()* to generate random arithmetic challenges so that every time the program is executed the challenge can be different.\n","\n","In lines 9 to 11, three random integer numbers are generated. *random_operator* assumes the value of 1 or 2 as the output from the function *random.randint(1, 2)*; *random_A* is the random numerator between the values -10 and 10; *random_B* is the random denominator between the values 1 and 10.\n","\n","In lines 12 to 17, we see for the first time the use of flow control statements: *if -- else --*. We will discuss flow control statements later in this course. In here, it can be simply understood as, if random_operator is equal to the constant representing floor operator, the correct result will be using *math.floor()* to convert the fraction random_A/random_B, otherwise, the correct result will be using *math.ceil()*\n","\n","Then in line 20 and 22, two different ways are demonstrated to format a string *question_string*. The first way uses \"+\" to concatenate the operator string and the division expression. The second way in line 22 uses curly brackets and *.format()* string method to substitute in a string location with one of format() function's input arguments.\n","\n","In line 24, this question is printed out and cue the user to answer in text using function *input()*. Since the *input()* return is always of string type, the code then uses *int()* to type cast the string variable into an int variable. Note, the reader can run this code and test what if the input text is not a valid integer. In such cases, Python will return an error."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* Single quotation marks and double quotation marks can be used to create a text string in one line, so long as the quotation marks must be in a pair of the same type.\n","* A pair of triple quotation marks can create a text string that contains multiple lines.\n","* Use of backslash \\ with the quotation marks inside a text string denotes the marks as regular characters rather than special characters.\n","* Some other backslash-defined characters include: \\\\, \\b, \\n\n","* A substring can be defined by **slicing** operation, defined by a pair of square brackets: string[begin: stop: step]. The substring will not take the *stop* position character.\n","* Negative values in *begin*, *stop*, or *step* indicate counting the positions from the end of the string backward.\n","* Functions that act on strings: len(), ord(), chr().\n","* input() function returns a user string input from the terminal."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Please create a string variable called *phrase*, and assign the value \"Hello World\". Then please use slicing method to separate the first word \"Hello\" to a variable called *subphrase_1*, and the second word \"World\" to another variable called *subphrase_2*. Note that please do not include the space in between the two words in either subphrases.\n","\n","2. Continue with the above program. Please write the code to remove the space character \" \" from the *phrase* variable, and print out the resulting value in the variable.\n","\n","3. Create three string variables that describe yourself: first_name, last_name, date_of_birth. Then concatenate the three strings into a new string called ID_string, using the \"+\" operator.\n","\n","4. Continue with the above program. Please extract from the string ID_string the following characters: the first letter of first_name, the first letter of last_name, and the first letter of date_of_birth. Assign the result into a new string variable called short_ID_string.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-27T23:14:15.415976Z","iopub.status.busy":"2021-05-27T23:14:15.415568Z","iopub.status.idle":"2021-05-27T23:14:18.400162Z","shell.execute_reply":"2021-05-27T23:14:18.399353Z","shell.execute_reply.started":"2021-05-27T23:14:15.415939Z"},"trusted":true},"outputs":[],"source":["a = input(\"Please input the first adden: \"); b = input(\"Please input the second adden: \")\n","print (\"The sum is \", a + b)"]},{"cell_type":"markdown","metadata":{},"source":["6. Debug:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T06:08:27.579981Z","iopub.status.busy":"2021-05-28T06:08:27.579446Z","iopub.status.idle":"2021-05-28T06:08:27.586183Z","shell.execute_reply":"2021-05-28T06:08:27.584784Z","shell.execute_reply.started":"2021-05-28T06:08:27.579933Z"},"trusted":true},"outputs":[],"source":["wrong_string = 'Mike's story'"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Based on the float value in math.pi, use the string type cast function str() to convert the float value into a string variable, called pi_string. Then keep the string type, move the decimal point character \".\" to the right by one position, and assign the result again back to pi_string. Finally, print out the resulting string. Hint: The result should look like \"31.41592653589793\""]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.6"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 3: Strings and Text Input/Output**\n","\n","**By Allen Y. Yang, PhD**\n","\n","**(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.**\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **str**: The keyword for the string data type in Python.\n","* **Indexing**: Indexing refers to finding the address and subsequently the stored value within a sequential data type such as a string of characters. Python starts the first index in a sequential data type as zero.\n","* **Slicing**: Extract a subset of sequential data by their indices.\n","* **Type casting**: Converting the representation of stored data value from one type to another. Casting may change the data accuracy and utility as determined by the implementation of the casting algorithm."]},{"cell_type":"markdown","metadata":{},"source":["# Defining Strings\n","\n","In the previous lecture, we have seen Python can output information about computation results using print(). Before the invention of graphical user interface (GUI), the computer interface was predominently using text. In Windows, Mac OSX, or Linux systems, if you search keyword \"terminal\", these systems include a terminal application that allows users to manage the computer using the legacy mode, called the console or terminal interface.\n","\n","As the No.1 programming language in Data Science, handling data encoded in text format is very important for Python. In this lecture, we will discuss basic operations how to use text as a Python program's input or output, collectively known as I/O functions."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T06:43:19.985761Z","iopub.status.busy":"2021-06-17T06:43:19.985114Z","iopub.status.idle":"2021-06-17T06:43:19.995229Z","shell.execute_reply":"2021-06-17T06:43:19.994480Z","shell.execute_reply.started":"2021-06-17T06:43:19.985724Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","Hello World!\n","True\n","Hello\n","World!\n","True\n"]}],"source":["a_string = \"Hello World!\"\n","print(type(a_string))\n","\n","b_string = 'Hello World!'\n","print(a_string)\n","print(a_string == b_string)\n","\n","c_string = '''Hello\n","World!'''\n","print(c_string)\n","d_string = \"\"\"Hello\n","World!\"\"\"\n","print(c_string==d_string)"]},{"cell_type":"markdown","metadata":{},"source":["First, we see how a text can be defined in Python. The type of data that are responsible for storing text is called **string**. In the first example above, we define a string variable *a_string* to be the text \"Hello World!\". Then we check its type, and it is a variable class of the name 'str', short for string type.\n","\n","We can also print a string simply by using the same *print()* function.\n","\n","For the a_string variable, its text data are quoted using a pair of double quotation marks. What is contained in between the double quotation marks defines the string. However, For the next b_string variable, its text data are quoted using a pair of single quotation marks. In Python, creating string variables using a pair of either single or double quotation marks is equivalent.\n","\n","Next, we see the \"==\" operator previously was used to compare the equality of int or float values. In the string case, it can also be used to compare if two strings are identical. In the above example, a_string and b_string reference the same text, so the comparison result is True.\n","\n","Finally, Python has an additional text format, which is quite unique to itself. If we use a pair of triple quotation marks, again regardless if they are single or double quotations, it defines a string that contains multiple lines. Please note that using the previous single or double quotation marks, a string text must not have more than one line."]},{"cell_type":"markdown","metadata":{},"source":["By now,you may have wondered that the special characters Python takes over to denote strings, namely, the single and double quotation marks, themselve can be a part of a valid text. How can we include these special characters as data but not as Python symbols? Let us see the following examples first:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["e_string = \"World's best coffee\"\n","f_string = 'World\"s best coffee'\n","print(e_string == f_string)\n","\n","g_string = 'World\\'s best coffee'\n","print(g_string)\n","print(e_string == g_string)"]},{"cell_type":"markdown","metadata":{},"source":["The above code block demonstrates that, if a string is created using a pair of double quotation marks, then Python will treat single quotation marks as regular text data in the string. Vice versa, if a string is created using single quotation marks, then double quotation marks in the string will be treated as regular text.\n","\n","The second half of the code block demonstrates yet another way to declare that Python should treat special characters as regular text data, that is to use another special character specifically created for this purpose, namely, the backslash mark \"\\\". In the definition of g_string, the sequence \\\\' is treated as just a single quotation mark in the text.\n","\n","The special character \\\\ not only can declare regular quotation marks, it can also be used to define other special characters. Let's see a few more examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["h_string = \"This character \\\\ is special\"\n","print(h_string)\n","\n","i_string = \"Hello World!\\b\" \n","print(i_string)\n","\n","j_string = \"Line 1 \\nLine 2\"\n","print(j_string)"]},{"cell_type":"markdown","metadata":{},"source":["In the above three examples, a double backslash sequence *\\\\* is treated in text as a single backslash character. The sequence *\\b* removes one character that immediately precedes it. The sequence *\\n* represents a return character to display what is after it in a new line."]},{"cell_type":"markdown","metadata":{},"source":["# Addressing String Elements: Indexing and Slicing\n","\n","String data are stored in computer memory as a character array, which means an ordered sequence of characters. Python can address and retrieve individual characters in a string using the notation of square brackets. This operation is also known as **indexing**. Some examples are shown below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["a = \"Hello World!\"\n","print(a[0])\n","print(a[1:2])\n","print(a[0:6:2])\n","print(a[-1])\n","print(a[-5:-2])"]},{"cell_type":"markdown","metadata":{},"source":["Let us dissect the above examples. First, we can assume a string variable such as *a* in the example not only represents the entire string, but when in addressing string elements, it also indicates the memory address of the first element. Then any additional offsets from the beginning of the string are described within a pair of square brackets.\n","1. *a[0]* retrieves from the first string character plus zero offset, which represents the first character \"H\".\n","2. *a[1:2]* uses a colon to indicate retrieving a segment of the string characters. The left argument is called **begin**, and the right argument is called **end**. The following rule is somewhat special to Python, if the reader is familiar with other languages, that the string segment retrieved by [begin: end] will include the character at a[begin] position (if valid) but will exclude the character at a[end] position. For the print out of the second example is starting from a[1] = \"e\" but will exclude a[2] = \"l\".\n","3. If the brackets contain three numbers separated by two colons, then the third number is called the **step size**. Hence, the retrieved characters starting at a[0], stopping before a[6], and with step size 2 are a[0]=\"H\", a[2]=\"l\", and a[4]=\"o\".\n","4. The string character addresses can also be counted backwards from the last character. In Python, the last character of *a* is denoted as *a[-1]*.\n","5. Similarly, the same rule to retrieve a segment of a string applies when the offsets are given in negative numbers. In this example, the segment starts from a[-5]=\"o\" and stops before a[-2] = \"d\".\n","\n","Finally, the operations that use the format *string[begin:end:step]* are called **slicing**."]},{"cell_type":"markdown","metadata":{},"source":["# String Functions\n","\n","Next, we see some examples on Python functions that take strings as input arguments:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["first = \"John\"\n","last = \"Smith\"\n","space = \" \"\n","new_string = first + space + last\n","print(new_string)\n","\n","print(len(first))\n","print(ord(space))\n","print(chr(ord(space)) == space)"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, three strings are first created. Then the \"+\" operator applies to string type variables to concatenate the three strings into one new string.\n","\n","The function *len()* returns the length of the string, namely, the number of characters in the string.\n","\n","The next two statements convert a string character into an integer number, and then from the integer number back to a string character. Specifically, in computer memory, string characters are also stored as numbers. The correspondence between characters and numbers is called a codebook. The function *ord()* returns the code of characters based on a particular codebook called Unicode. \n","\n","Then the *chr()* function goes the opposite way, namely, generating a character based on a Unicode number input. In the example, we see that the Unicode for the space character is 32.\n","\n","There are more useful functions that are relevant to string type variables. We will introduce them later in other examples in the course."]},{"cell_type":"markdown","metadata":{},"source":["# Algorithm: Reverse a String\n","\n","Consider the problem that given an input string, we ask to solve for a output string whose characters are in exact reverse order of the input string. This can be done using the slicing operator."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T09:01:52.234913Z","iopub.status.busy":"2021-06-17T09:01:52.234382Z","iopub.status.idle":"2021-06-17T09:01:52.242242Z","shell.execute_reply":"2021-06-17T09:01:52.241209Z","shell.execute_reply.started":"2021-06-17T09:01:52.234879Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["nohty\n","nohtyP\n"]}],"source":["input_string = \"Python\"\n","\n","partial_string = input_string[-1:0:-1]\n","print(partial_string) # Not exactly correct\n","\n","sliced_string = input_string[::-1]\n","print(sliced_string)"]},{"cell_type":"markdown","metadata":{},"source":["We can see from the above code block that, firstly, slicing operation that retrieves the string characters backwards from the last one to the first one with step size -1 does not exactly achieve the goal. Looking at the slicing code, there are two key points to remember:\n","1. The last character is referenced using the negative offset value of -1. If we count the offset positively, this value should be *len(input_string)-1*. Because the string character offset starts from zero, so the length of the string actually points to an offset that is one character beyond the range of the string.\n","2. However, since Python dictates that the slicing will stop before the ending offset, so using the smallest non-negative value zero will not be able to retrieve the first character \"P\" in reverse order. Note we also cannot use values smaller than zero, because as we pointed out above, -1 actually refers to the last character of the string.\n","\n","So the proper way to reverse a string using slicing operation is to keep the -1 step size, but ignore the exact values for *begin* and *end*. In the second algorithm, neither *begin* nor *end* indexes is provided. In such a case, Python will automatically retrieve the longest possible string result. Hence, the algorithm uses step size -1 to traverse the input string in reverse order, and the result shows the intended output."]},{"cell_type":"markdown","metadata":{},"source":["# Using String in Text I/O\n","\n","We have used the function *print()* to output text strings. It is worth noting that *print()* is a rather special type of functions in Python in that it is capable of receiving no argument, one argument, or many arguments. Let us first see an example below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T10:03:33.989074Z","iopub.status.busy":"2021-06-17T10:03:33.988752Z","iopub.status.idle":"2021-06-17T10:03:33.997021Z","shell.execute_reply":"2021-06-17T10:03:33.995835Z","shell.execute_reply.started":"2021-06-17T10:03:33.989045Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["------\n","\n","------\n","John Smith\n","------\n","John Smith 2021 True\n"]}],"source":["print('------')\n","print()\n","print('------')\n","first = \"John\"\n","last = \"Smith\"\n","print(first, last)\n","print('------')\n","print(first, last, 2021, True)"]},{"cell_type":"markdown","metadata":{},"source":["We see in this code block, three scenarios are tested and printed out separated by dash lines. In the first case, *print()* without any argument will output an empty line in the text console. In the second case, *print()* can print out multiple input arguments sequentially, each separated by a space character automatically. In the third case, we see that the multiple input arguments can even by of different types. Our example includes the string type, int type, and boolean type.\n","\n","Next, let us talk about text input. From the console mode, Python can receive a user's text input, conveniently using the statement:\n","\n","*input_string = input()*\n","\n","The return result is of the string type. In coding user and computer interaction, it is strongly recommended that the program provides sufficient text cues before the *input()* function to explain what the program expects the user to input."]},{"cell_type":"markdown","metadata":{},"source":["# Example: Test Your Math \n","\n","Below is our last example today. The program was presented in the last lecture as a math challenge. In this lecture, we will discuss more coding details in Python."]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.execute_input":"2021-06-17T10:15:22.809893Z","iopub.status.busy":"2021-06-17T10:15:22.809579Z","iopub.status.idle":"2021-06-17T10:15:28.249210Z","shell.execute_reply":"2021-06-17T10:15:28.248104Z","shell.execute_reply.started":"2021-06-17T10:15:22.809863Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Question: floor(9/7) = ? 1\n"]},{"name":"stdout","output_type":"stream","text":["Correct!\n"]}],"source":["# import two Python modules\n","import math # includes additional math functions\n","import random # includes functions for generating random numbers\n","\n","# Define constants\n","OPERATOR_FLOOR = 1\n","OPERATOR_CEIL = 2\n","\n","random_operator = random.randint(1,2) # Select an operator, equiv to random.randint\n","random_A = random.randint(-10,10) # Select first value\n","random_B = random.randint(1,10) # Select second value. Note denominator cannot be zero\n","if random_operator == OPERATOR_FLOOR: # If selected operator is floor()\n"," result = math.floor(random_A/random_B)\n"," operator_string = \"floor\"\n","else: # If selected operator is ceil()\n"," result = math.ceil(random_A/random_B)\n"," operator_string = \"ceil\"\n","\n","# Prepare question string\n","# question_string = ( \"Question: \" + operator_string + \"(\" + str(random_A)\n","# + \"/\" + str(random_B) + \") = ? \")\n","question_string = \"Question: {0}({1}/{2}) = ?\".format(operator_string, str(random_A), str(random_B))\n","\n","user_result = input(question_string) # Wait for user input\n","user_result = int(user_result) # Convert string to int\n","if user_result == result: # The answer is correct, add one score\n"," print(\"Correct!\")\n","else: # The answer is wrong, add one score\n"," print(\"Incorrect!\")"]},{"cell_type":"markdown","metadata":{},"source":["Let us go over this complete Python program from the beginning. First, we see for the first time in this course, the use of comments in Python code. A comment space is denoted by two ways: 1. Using a pair of triple quotation marks directly in the source code (instead of within the print statement). A pair of triple quotation marks will claim everything in between them as comments, which may cover multiple lines. 2. In comparison, using the hash symbol (or being called the pound sign in the US) \"#\" designates immediately after it till the remainder of the same line as comments. When encountering comments, Python will simply ignore them.\n","\n","The purpose of including comments is to increase the readability for the benefits of both the author and equally importantly other readers. If the author of a program did not leave sufficient comments about the logic of the code and the purpose of individual variables, it would be difficult for other readers to second-guess the author's logic and it compromises the reusability of the code.\n","\n","Therefore, in modern software engineering, practitioners should pay equal attention to both the logic of their code and explaining it using sufficient comments. It is quite normal in commercial-quality source code that professional developers could reserve 1/3 to 1/2 space of their code for commenting and documentation purposes. In this course, we strongly recommend our students to start cultivate this practice.\n","\n","In lines 2 and 3, the code imports two modules: math and random. Importing math is to be able to use the *floor()* and *ceil()* functions. Importing random serves another purpose, that we will use a randomized integer generator called *randint()* to generate random arithmetic challenges so that every time the program is executed the challenge can be different.\n","\n","In lines 9 to 11, three random integer numbers are generated. *random_operator* assumes the value of 1 or 2 as the output from the function *random.randint(1, 2)*; *random_A* is the random numerator between the values -10 and 10; *random_B* is the random denominator between the values 1 and 10.\n","\n","In lines 12 to 17, we see for the first time the use of flow control statements: *if -- else --*. We will discuss flow control statements later in this course. In here, it can be simply understood as, if random_operator is equal to the constant representing floor operator, the correct result will be using *math.floor()* to convert the fraction random_A/random_B, otherwise, the correct result will be using *math.ceil()*\n","\n","Then in line 20 and 22, two different ways are demonstrated to format a string *question_string*. The first way uses \"+\" to concatenate the operator string and the division expression. The second way in line 22 uses curly brackets and *.format()* string method to substitute in a string location with one of format() function's input arguments.\n","\n","In line 24, this question is printed out and cue the user to answer in text using function *input()*. Since the *input()* return is always of string type, the code then uses *int()* to type cast the string variable into an int variable. Note, the reader can run this code and test what if the input text is not a valid integer. In such cases, Python will return an error."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* Single quotation marks and double quotation marks can be used to create a text string in one line, so long as the quotation marks must be in a pair of the same type.\n","* A pair of triple quotation marks can create a text string that contains multiple lines.\n","* Use of backslash \\ with the quotation marks inside a text string denotes the marks as regular characters rather than special characters.\n","* Some other backslash-defined characters include: \\\\, \\b, \\n\n","* A substring can be defined by **slicing** operation, defined by a pair of square brackets: string[begin: stop: step]. The substring will not take the *stop* position character.\n","* Negative values in *begin*, *stop*, or *step* indicate counting the positions from the end of the string backward.\n","* Functions that act on strings: len(), ord(), chr().\n","* input() function returns a user string input from the terminal."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Please create a string variable called *phrase*, and assign the value \"Hello World\". Then please use slicing method to separate the first word \"Hello\" to a variable called *subphrase_1*, and the second word \"World\" to another variable called *subphrase_2*. Note that please do not include the space in between the two words in either subphrases.\n","\n","2. Continue with the above program. Please write the code to remove the space character \" \" from the *phrase* variable, and print out the resulting value in the variable.\n","\n","3. Create three string variables that describe yourself: first_name, last_name, date_of_birth. Then concatenate the three strings into a new string called ID_string, using the \"+\" operator.\n","\n","4. Continue with the above program. Please extract from the string ID_string the following characters: the first letter of first_name, the first letter of last_name, and the first letter of date_of_birth. Assign the result into a new string variable called short_ID_string.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":62,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Hello\n","World\n","['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']\n"]}],"source":["\n","#Q1\n","phrase = \"Hello World\"\n","L = list(phrase)\n","subphrase_1 = phrase[0:5]\n","subphrase_2= phrase[6:11]\n","print(subphrase_1)\n","print(subphrase_2)\n","#Q2\n","L.remove(\" \")\n","print(L)"]},{"cell_type":"code","execution_count":67,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Ian Petersen 3/23/2008\n","IP3\n"]}],"source":["\"\"\"Q3\"\"\"\n","first_name = \"Ian\"\n","#list[first_name]\n","#flen = len(first_name)\n","last_name = \"Petersen\"\n","date_of_birth = \"3/23/2008\"\n","ID_string = (first_name + \" \" + last_name + \" \" + date_of_birth)\n","print(ID_string)\n","\"\"\"Q4\"\"\"\n","short_ID_string = (ID_string[0] + ID_string[len(list(first_name))+1] + ID_string[len(list(last_name))+len(list(first_name))+2]) # add two to account for the spaces in the word\n","print(short_ID_string)"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-27T23:14:15.415976Z","iopub.status.busy":"2021-05-27T23:14:15.415568Z","iopub.status.idle":"2021-05-27T23:14:18.400162Z","shell.execute_reply":"2021-05-27T23:14:18.399353Z","shell.execute_reply.started":"2021-05-27T23:14:15.415939Z"},"trusted":true},"outputs":[],"source":["#Q5 DEBUG\n","a = int(input(\"Please input the first adden: \")); b = int(input(\"Please input the second adden: \"))\n","print (\"The sum is \", a + b)\n"]},{"cell_type":"markdown","metadata":{},"source":["6. Debug:"]},{"cell_type":"code","execution_count":23,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T06:08:27.579981Z","iopub.status.busy":"2021-05-28T06:08:27.579446Z","iopub.status.idle":"2021-05-28T06:08:27.586183Z","shell.execute_reply":"2021-05-28T06:08:27.584784Z","shell.execute_reply.started":"2021-05-28T06:08:27.579933Z"},"trusted":true},"outputs":[],"source":["wrong_string = \"Mike's story\""]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Based on the float value in math.pi, use the string type cast function str() to convert the float value into a string variable, called pi_string. Then keep the string type, move the decimal point character \".\" to the right by one position, and assign the result again back to pi_string. Finally, print out the resulting string. Hint: The result should look like \"31.41592653589793\""]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["3.141592653589793\n",".\n","31.4\n"]}],"source":["import math\n","pi_string= str(math.pi)\n","print(pi_string)\n","decimove = pi_string[1:2]\n","print(decimove)\n","integer = pi_string[0:1] + pi_string[2:3]\n","pi_string = integer + decimove + pi_string[3]\n","print(pi_string)\n"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-4-lists.ipynb b/Part One/1-4-lists.ipynb index 6ab1048..06d71fe 100644 --- a/Part One/1-4-lists.ipynb +++ b/Part One/1-4-lists.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 4: Lists**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **list**: The keyword for the list data type in Python.\n","* **Method**: In object-oriented programming languages such as Python, a method is a built-in function encaptulated together with the variable data.\n","* **Immutable data type**: A variable of an immutable data type cannot modify the stored data value at the referenced data address. Assigning a new value to the same variable leads to the variable pointing to a new memory address with the new value.\n","* **Mutable data type**: A variable of a mutable data type can modify the stored data value while keeping the same data address."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2022-02-11T02:47:47.636854Z","iopub.status.busy":"2022-02-11T02:47:47.636363Z","iopub.status.idle":"2022-02-11T02:47:47.644028Z","shell.execute_reply":"2022-02-11T02:47:47.642681Z","shell.execute_reply.started":"2022-02-11T02:47:47.636815Z"},"trusted":true},"outputs":[],"source":["a = 4990\n","b = 4990\n","print(id(a)==id(b))"]},{"cell_type":"markdown","metadata":{},"source":["# Definition and Indexing\n","\n","As a string stores an array of characters, the *list* type in Python stores an ordered sequence of variables. Most notable is that fact that the variables in a list can be of different types. Let us see some examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T21:28:08.085922Z","iopub.status.busy":"2021-06-17T21:28:08.085269Z","iopub.status.idle":"2021-06-17T21:28:08.094144Z","shell.execute_reply":"2021-06-17T21:28:08.092412Z","shell.execute_reply.started":"2021-06-17T21:28:08.085867Z"},"trusted":true},"outputs":[],"source":["l1 = []\n","l2 = ['a', 'b', 5]\n","l3 = [l1, l2, 5]\n","print(l3)"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, a list is defined by enumerating its elements contained within a pair of square brackets. A pair of empty brackets define an empty list (of length zero). The second list variable *l2* is formed from a list of mixed variables, namely, two string types and one integer type. \n","\n","More interestingly, a list may contain other lists as its elements. In the third example, *l3* contains first element as l1, second element as l2, and third element an integer.\n","\n","Next, we see how to address the elements in a list."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T21:28:38.028192Z","iopub.status.busy":"2021-06-17T21:28:38.027807Z","iopub.status.idle":"2021-06-17T21:28:38.035014Z","shell.execute_reply":"2021-06-17T21:28:38.03375Z","shell.execute_reply.started":"2021-06-17T21:28:38.028155Z"},"trusted":true},"outputs":[],"source":["L = [['a', 'b'], 5, 'c']\n","print(L[0])\n","print(L[0][1])\n","print(L[-1])"]},{"cell_type":"markdown","metadata":{},"source":["Similar to the string type, elements in a list can be addressed by their indexes. In the first example above, the first element in L has offset zero, so *L[0]* retrieves the first element, which itself is a list.\n","\n","Since *L[0]* is a list, we can recursively address the elements in this list using the same square brackets. In the second example, *L[0][1]* references the second element of *L[0]*, which is 'b'.\n","\n","The third example shows that a list can also be indexed from the end to the beginning by negative index values. For example, the last element of *L* also can be addressed by index -1."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2024-02-25T04:17:29.969490Z","iopub.status.busy":"2024-02-25T04:17:29.968691Z","iopub.status.idle":"2024-02-25T04:17:30.267027Z","shell.execute_reply":"2024-02-25T04:17:30.265603Z","shell.execute_reply.started":"2024-02-25T04:17:29.969414Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Slicing method: Elapsed time: 0.08 seconds\n","Built-in class method: Elapsed time: 0.01 seconds\n"]}],"source":["\"\"\"\n","In this sample code, we program an algorithm to reverse a list. Specifically, we will implement two methods and compare their time difference\n","The code shows a standard way to measure time to compare how fast an algorithm can run, using the time module\n","\"\"\"\n","\n","import time\n","\n","test_list = list('Python'*1000000) # Using \"*\" to duplicate a string 1,000,000 times\n","\n","# Method 1: Slicing operator\n","tic = time.time() # In practice, tic is a jargon referring the begin clock time\n","reverse_list = test_list[::-1]\n","toc = time.time() # toc is a jargon referring the end clock time in the unit of second\n","elapsed_time = toc - tic\n","print('Slicing method: Elapsed time: %.2f seconds' % elapsed_time )\n","\n","\n","# Method 2: Built-in object method\n","tic = time.time() \n","test_list.reverse() # a list type is a class in Python, which contains its own built-in functions\n","toc = time.time() \n","elapsed_time = toc - tic\n","print('Built-in class method: Elapsed time: {time:.2f} seconds'.format(time = elapsed_time) )"]},{"cell_type":"markdown","metadata":{},"source":["A good quality of an algorithm is measured by how fast it can run compared to other algorithms achieving the same results. In the above code block, we introduce a standard procedure to count the elapsed time, using the module function *time.time()*. The function returns a float value in the unit of seconds, which means the fraction part indicates sub-second accuracies. The function retrieves the current computer system clock, and reports a difference with the \"beginning of time\". In modern programming languages such as Python, the beginning of time with respect to modern computer systems is set to January 1, 1970, 00:00:00 (UTC). \n","\n","If we have designed an algorithm, when we retrieve *time.time()* before the execution as *tic*, and again after the execution as *toc*, then the difference is the elapsed time. This is a very useful measure of algorithm speed that the reader should learn to use fluently.\n","\n","Next let us talk about how the elapsed time is reported in a *print()* function. Since when we code the printed string format, it is not known to us about the value of elapsed_time. The exact value has to be formatted at runtime (meaning, when the code is actually running by the computer's processor). Python provides two basic ways to combine pre-defined constant string and dynamic argument together at runtime:\n","\n","1. The way inherited from older versions of Python is to use the \"%\" symbol to indicate an argument input to a string, which should be determined at runtime. One example is shown in line 15. In this example \".2f\" means displaying the string argument input as a floating point number with 2 digits after the decimal point.\n","2. The modern way recommended by Python 3 standards is to use a built-in function for any string type variables, as shown in line 23. The built-in function is called *format()*. Python will insert one or more arguments provided in *format()* function and convert them as part of the string as indicated by the reserved symbols {}. In this modern way, the displayed text still can be formatted by user specifications, such as \".2f\" in the example\n","\n","The new concept of owning built-in functions for different variable types is a benefit of so-called object-oriented programming (OOP). We will talk about OOP in the last part of the course, but previously we have noticed that all Python variable types are actually classes. A class in OOP languages contains data *and* methods that directly apply to the data (Note that in OOP, built-in functions in a class are often called **methods** to differentiate with regular functions that are not tightly associated with a class object). In other words, when a programmer creates a class, they not only have prepared a memory storage of the data, but also have prepared a list of functions that are properly coded to process the data. This is one of the benefits of using OOP.\n","\n","In the above sample code, we see that if the variable is a list, it also has a built-in method to perform exactly the task of reversing the list. Thanks to this built-in method, the operation can be coded in just one line built-in method call in line 20.\n","\n","Finally, the difference in algorithm design between the two used methods is that *list.reverse()* method is an \"in-place\" sorting algorithm, while slicing requires doubling the memory space to traverse from the list source. For more details, please be sure to watch the lecture video."]},{"cell_type":"markdown","metadata":{},"source":["# List Methods\n","\n","In Python and many object-oriented programming languages, a method refers to a built-in function encaptulated together with the variable data, when the variable is an object type. In Python, all variable types are objects. Therefore, each variable comes with its list of encaptulated methods. In this section, let us consider several some useful methods built in to the list type. \n","\n"," * clear(): Removes all list elements and causes the list to be empty.\n"," * insert(pos, element): Add an *element* at the *pos* position. If the position is greater than the current last position, then it will be added behind the current last element.\n"," * pop(pos): Remove and return the element at *pos* position. The argument can be empty, then the default position is the last one.\n"," * append(element): Add *element* from the end, and the length of the list is added by one.\n"," * extend(new_list): Add all elements from *new_list* to the end of the current list.\n"," * sort(): Sorts the list elements.\n"," * count(element): Counts the number of appearances of a specific element value."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T21:39:31.975108Z","iopub.status.busy":"2021-06-17T21:39:31.974457Z","iopub.status.idle":"2021-06-17T21:39:31.985853Z","shell.execute_reply":"2021-06-17T21:39:31.984705Z","shell.execute_reply.started":"2021-06-17T21:39:31.975074Z"},"trusted":true},"outputs":[],"source":["source = list('notebook')\n","# Add an element at position-0\n","source.insert(0, 'a')\n","print(source)\n","\n","# pop position-0, add a list element\n","# Note here append creates a nested list\n","source.pop(0)\n","source.append(list('notebook'))\n","print(source)\n","\n","# pop last position then merge two lists\n","source.pop()\n","source.extend(list('notebook'))\n","print(source)\n","\n","# built-in sort method\n","source.sort()\n","print(source)\n","print(source.count('o'))"]},{"cell_type":"markdown","metadata":{},"source":["The following example demonstrates functions to convert a string to a list, and vice versa."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T22:22:05.968026Z","iopub.status.busy":"2021-06-17T22:22:05.967639Z","iopub.status.idle":"2021-06-17T22:22:05.976324Z","shell.execute_reply":"2021-06-17T22:22:05.975486Z","shell.execute_reply.started":"2021-06-17T22:22:05.967995Z"},"trusted":true},"outputs":[],"source":["string = \"Python\"\n","L = list(string)\n","print(L)\n","\n","S1 = \"\".join(L)\n","S2 = \",\".join(L)\n","print(S1)\n","print(S2)\n","\n","list_string = str(L)\n","print(list_string)"]},{"cell_type":"markdown","metadata":{},"source":["# Mutable and Immutable Variable Types\n","\n","List type is also different from most of the previous variable types we have learned in the course in one important way. In Python, list type has an additional property to be mutable, while the variable types including int, float, bool, and string are immutable. In the rest of this lecture, let us familiarize ourselves about this distinction.\n","\n","In Python, we have said that each variable represents a class-type object stored in computer memory, and the object's class encapsulates both data and methods applied on the data. The use of class methods will be more clear when we formally introduce the OOP and classes. For the discussion about mutable versus immutable properties, we shall focus on the object's data.\n","\n","In particular, after an object is created and its memory allocated by Python, an **immutable** variable type will not permit the data to be updated later. For a **mutable** variable type, its data can be modified while the allocation of the object memory is preserved..\n","\n","To illustrate this distinction, let us introduce a Python function *id()*. The function takes a variable pointing to an object in the memory as its input, and return a unique reference to the said memory address. The Python standards guarantee for any Python implementation to provide unique ID numbers for unique objects in the memory. However, it is not guaranteed that the ID number is a valid memory address. The exact choice of the unique ID number is left for the language software to implement. \n","\n","In the following code block, we will examine the properties of mutability when different variables may represent the same or different class objects in Python:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-18T09:00:58.10331Z","iopub.status.busy":"2021-06-18T09:00:58.102752Z","iopub.status.idle":"2021-06-18T09:00:58.151269Z","shell.execute_reply":"2021-06-18T09:00:58.149588Z","shell.execute_reply.started":"2021-06-18T09:00:58.103183Z"},"trusted":true},"outputs":[],"source":["a = 10\n","print(id(a))\n","a = 32759680\n","print(id(a))\n","b = ['i','m','m','u','t','a','b','l','e']\n","print(b, id(b))\n","b.pop(0); b.pop(0)\n","print(b, id(b))\n","b = \"immutable\"\n","b[0] = \"a\""]},{"cell_type":"markdown","metadata":{},"source":["The above code block examines the mutability of three variable types when the code changes their value. First, *int* type is immutable. Therefore, updating variable *a*'s value leads to Python allocating two different memory locations for two integer values. Second, *list* type is mutable. Therefore, even when we pop the first two elements from the list ['i','m','m','u','t','a','b','l','e'] to ['m','u','t','a','b','l','e'], we can check that the variable *b*'s ID number remains the same. Finally, *string* is immutable. Therefore, any attempt to change a string's individual character in the array will lead to a runtime error."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-18T09:09:27.53464Z","iopub.status.busy":"2021-06-18T09:09:27.534159Z","iopub.status.idle":"2021-06-18T09:09:27.557906Z","shell.execute_reply":"2021-06-18T09:09:27.555766Z","shell.execute_reply.started":"2021-06-18T09:09:27.534593Z"},"trusted":true},"outputs":[],"source":["# Two small integers of the same value\n","a = 10\n","b = 10\n","print('small int: ', id(a), id(b), id(a)==id(b))\n","\n","# Two large integers of the same value\n","a = 32759680\n","b = 32759680\n","print('large int: ', id(a), id(b), id(a)==id(b))\n","\n","# Two floats of the same value\n","a = 10.1\n","b = 10.1\n","print('float: ', id(a), id(b), id(a)==id(b))\n","\n","# Two short strings of the same value\n","a = 'immutable'\n","b = 'immutable'\n","print('short str: ', id(a), id(b), id(a)==id(b))\n","\n","# Two long strings of the same value\n","a = 'immutable'*1000\n","b = 'immutable'*1000\n","print('long str: ', id(a), id(b), id(a)==id(b))\n","\n","# Two lists of the same value\n","a = ['m', 'u', 't', 'a', 'b', 'l', 'e']\n","b = ['m', 'u', 't', 'a', 'b', 'l', 'e']\n","print('list: ', id(a), id(b), id(a)==id(b))\n","\n","# Forcing one variable to be equal to the other\n","b = a\n","print('identified lists: ', id(a), id(b), id(a)==id(b))\n","a.clear()\n","print(a, b)\n","\n","# Creating duplicate objects that have different IDs\n","# Then modifying one varible will not be reflected on the second\n","b = a.copy()\n","print('copied lists: ', id(a), id(b), id(a)==id(b))\n","a.insert(0, 'new')\n","print(a, b)"]},{"cell_type":"markdown","metadata":{},"source":["Now let us consider a more subtle question: Previously, when two variable values or types are different, two distinct objects will be created by Python. Hence, their IDs and memory addresses will be different. However, consider the following question: *When two variables represent the same type and same value, are they referencing the same object or different objects in the memory?*\n","\n","The answer to this is not that straightforward. Please carefully review the above updated code block:\n","1. When †wo variables are small immutable integers, Python is smart enough to point the two variables to the same object in the memory. Hence their IDs are identical.\n","2. However, this conclusion cannot be blindly extended to consider large integers and float numbers, because searching for existing integer or float objects costs time. So a software cannot do that for an arbitrary range of integers and float. So in the second and third examples, we see that for two variables of identical large integer value and float value, their IDs are not the same.\n","3. The same argument also applies to the immutable string type. In the two subsequent examples, short strings of the same sequence \"immutable\" are assigned the same ID. However, two strings of the same long sequences are assigned different IDs. \n","4. For the next variation, we consider two mutable list variables of the same value. Since mutable variables can be modified after creation, even if their initial values are assigned to be the same, Python will allocate different IDs and different memory addresses to store the variable values.\n","5. Nevertheless, for all the above situations, there is an approach to force Python to identify two variable names to reference the same object in the memory, that is to assign one variable to be equal to the other, as in the example *b = a*. In such a case, regardless of the mutability type, the two variables will return the same ID number. Furthermore, since the two variables are referencing the same object, it causes the situation that modifying the first mutable variable will be reflected also on the second variable.\n","6. Finally, for mutable variables, we can use a common built-in method *copy()* to tell Python to create two objects but copy the data from one object to the other. In such cases, the two variables will be initially of the same value just like the case above. However, the two objects have different memory addresses, later modifying one variable will not affect the object referenced by the second variable.\n","\n","The reader may wonder what ultimately let a Python programming software to determine when to identify two objects of the same value in the memory. We caution that except in the case of explicitly identifying two variables as in the example of *b = a*, practitioners should not assume that two objects of the same value are identical in memory. The choice of doing so is entirely for implementation optimization considerations, and it is up to the software designer to decide. In other words, if we want two variables to be identical, we should explicitly proclaim *b = a*. In other cases we should not imply in any way that two variables are the same object."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* A list type variable stores an ordered sequence of variables, whose types can be different.\n","* A list element can be addressed by using a pair of square brackets: l[index]. Elements in a list of lists can be addressed recursively as: l[index0][index1]\n","* list is a class with built-in methods: clear(), insert(), pop(), append(), extend(), sort(), count().\n","* list is a mutable variable type. Earlier other variable types are immutable, including int, float, string, bool.\n","* id() function can be conveniently used to compare the assigned memory address of a variable. In particular, if two variables share the same ID, then they point to the same content in memory; if a variable after updating its value keeps the same ID, then it is a mutable variable type.\n","* list() casts an input argument to a list variable output."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Given a list variable: a = [2, 9, 1, \"2\", \"s\", 6], write a single line of code to sort the variable using the built-in sort() function. Explain the result.\n","\n","2. Write a code to type cast a string \"immutable\" into a list type variable, called input_list. Then remove the first two elements in input_list using the built-in method pop(). Finally, type cast the resulting input_list back to a string and print out.\n","\n","3. Continue with the above program. Now starting from a string \"mutable\", please type cast the variable to a list type, then add two new elements \"m\" and \"i\" one by one to the head of the list. Finally, type cast the resulting list back to a string and print out. Hint: The result should be \"immutable\".\n","\n","4. *sorted()* is a useful built-in function that can sort either a list or a string as input. Write a code to demonstrate of the output result of the function when the input argument is a list or a string.\n","\n","5. Debug"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["a = \"a test string\"\n","\n","a_list = list(a)\n","print(a_list.sort())\n","\n","# Please use the follow sorted() approach to again sort a string\n","# a_result = sorted(a)"]},{"cell_type":"markdown","metadata":{},"source":["6. Debug"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-07-20T18:46:57.546529Z","iopub.status.busy":"2021-07-20T18:46:57.546166Z","iopub.status.idle":"2021-07-20T18:46:57.552343Z","shell.execute_reply":"2021-07-20T18:46:57.551479Z","shell.execute_reply.started":"2021-07-20T18:46:57.546496Z"},"trusted":true},"outputs":[],"source":["# Please concatenate two strings from the elements of two lists\n","List = ['abcde']\n","List = List + list('fghij')\n","print(List)"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Create a list of lists with the variable name L. The first element of L is itself a list [1, 2], and the second element of L is another list ['a', 'b']. Then, swap the elements between L[0][1] and L[1][0]. Please note that a swap should be coded as a generic operation so as to not hard set the given values of L.\n","\n","2. Modify the above program: Use id() function to print out the ID of variable L before and after the swap operation. Observe that the ID numbers remain the same, and discuss the reason why.\n","\n","3. Further modify the above program: Use id() function to print out the ID values of elements L[0][1] and L[1][0] before and after the swap. Observe the change on the ID numbers and discuss the reason why."]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30646,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.13"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 4: Lists**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **list**: The keyword for the list data type in Python.\n","* **Method**: In object-oriented programming languages such as Python, a method is a built-in function encaptulated together with the variable data.\n","* **Immutable data type**: A variable of an immutable data type cannot modify the stored data value at the referenced data address. Assigning a new value to the same variable leads to the variable pointing to a new memory address with the new value.\n","* **Mutable data type**: A variable of a mutable data type can modify the stored data value while keeping the same data address."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2022-02-11T02:47:47.636854Z","iopub.status.busy":"2022-02-11T02:47:47.636363Z","iopub.status.idle":"2022-02-11T02:47:47.644028Z","shell.execute_reply":"2022-02-11T02:47:47.642681Z","shell.execute_reply.started":"2022-02-11T02:47:47.636815Z"},"trusted":true},"outputs":[],"source":["a = 4990\n","b = 4990\n","print(id(a)==id(b))"]},{"cell_type":"markdown","metadata":{},"source":["# Definition and Indexing\n","\n","As a string stores an array of characters, the *list* type in Python stores an ordered sequence of variables. Most notable is that fact that the variables in a list can be of different types. Let us see some examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T21:28:08.085922Z","iopub.status.busy":"2021-06-17T21:28:08.085269Z","iopub.status.idle":"2021-06-17T21:28:08.094144Z","shell.execute_reply":"2021-06-17T21:28:08.092412Z","shell.execute_reply.started":"2021-06-17T21:28:08.085867Z"},"trusted":true},"outputs":[],"source":["l1 = []\n","l2 = ['a', 'b', 5]\n","l3 = [l1, l2, 5]\n","print(l3)"]},{"cell_type":"markdown","metadata":{},"source":["In the above code block, a list is defined by enumerating its elements contained within a pair of square brackets. A pair of empty brackets define an empty list (of length zero). The second list variable *l2* is formed from a list of mixed variables, namely, two string types and one integer type. \n","\n","More interestingly, a list may contain other lists as its elements. In the third example, *l3* contains first element as l1, second element as l2, and third element an integer.\n","\n","Next, we see how to address the elements in a list."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T21:28:38.028192Z","iopub.status.busy":"2021-06-17T21:28:38.027807Z","iopub.status.idle":"2021-06-17T21:28:38.035014Z","shell.execute_reply":"2021-06-17T21:28:38.03375Z","shell.execute_reply.started":"2021-06-17T21:28:38.028155Z"},"trusted":true},"outputs":[],"source":["L = [['a', 'b'], 5, 'c']\n","print(L[0])\n","print(L[0][1])\n","print(L[-1])"]},{"cell_type":"markdown","metadata":{},"source":["Similar to the string type, elements in a list can be addressed by their indexes. In the first example above, the first element in L has offset zero, so *L[0]* retrieves the first element, which itself is a list.\n","\n","Since *L[0]* is a list, we can recursively address the elements in this list using the same square brackets. In the second example, *L[0][1]* references the second element of *L[0]*, which is 'b'.\n","\n","The third example shows that a list can also be indexed from the end to the beginning by negative index values. For example, the last element of *L* also can be addressed by index -1."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2024-02-25T04:17:29.969490Z","iopub.status.busy":"2024-02-25T04:17:29.968691Z","iopub.status.idle":"2024-02-25T04:17:30.267027Z","shell.execute_reply":"2024-02-25T04:17:30.265603Z","shell.execute_reply.started":"2024-02-25T04:17:29.969414Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Slicing method: Elapsed time: 0.08 seconds\n","Built-in class method: Elapsed time: 0.01 seconds\n"]}],"source":["\"\"\"\n","In this sample code, we program an algorithm to reverse a list. Specifically, we will implement two methods and compare their time difference\n","The code shows a standard way to measure time to compare how fast an algorithm can run, using the time module\n","\"\"\"\n","\n","import time\n","\n","test_list = list('Python'*1000000) # Using \"*\" to duplicate a string 1,000,000 times\n","\n","# Method 1: Slicing operator\n","tic = time.time() # In practice, tic is a jargon referring the begin clock time\n","reverse_list = test_list[::-1]\n","toc = time.time() # toc is a jargon referring the end clock time in the unit of second\n","elapsed_time = toc - tic\n","print('Slicing method: Elapsed time: %.2f seconds' % elapsed_time )\n","\n","\n","# Method 2: Built-in object method\n","tic = time.time() \n","test_list.reverse() # a list type is a class in Python, which contains its own built-in functions\n","toc = time.time() \n","elapsed_time = toc - tic\n","print('Built-in class method: Elapsed time: {time:.2f} seconds'.format(time = elapsed_time) )"]},{"cell_type":"markdown","metadata":{},"source":["A good quality of an algorithm is measured by how fast it can run compared to other algorithms achieving the same results. In the above code block, we introduce a standard procedure to count the elapsed time, using the module function *time.time()*. The function returns a float value in the unit of seconds, which means the fraction part indicates sub-second accuracies. The function retrieves the current computer system clock, and reports a difference with the \"beginning of time\". In modern programming languages such as Python, the beginning of time with respect to modern computer systems is set to January 1, 1970, 00:00:00 (UTC). \n","\n","If we have designed an algorithm, when we retrieve *time.time()* before the execution as *tic*, and again after the execution as *toc*, then the difference is the elapsed time. This is a very useful measure of algorithm speed that the reader should learn to use fluently.\n","\n","Next let us talk about how the elapsed time is reported in a *print()* function. Since when we code the printed string format, it is not known to us about the value of elapsed_time. The exact value has to be formatted at runtime (meaning, when the code is actually running by the computer's processor). Python provides two basic ways to combine pre-defined constant string and dynamic argument together at runtime:\n","\n","1. The way inherited from older versions of Python is to use the \"%\" symbol to indicate an argument input to a string, which should be determined at runtime. One example is shown in line 15. In this example \".2f\" means displaying the string argument input as a floating point number with 2 digits after the decimal point.\n","2. The modern way recommended by Python 3 standards is to use a built-in function for any string type variables, as shown in line 23. The built-in function is called *format()*. Python will insert one or more arguments provided in *format()* function and convert them as part of the string as indicated by the reserved symbols {}. In this modern way, the displayed text still can be formatted by user specifications, such as \".2f\" in the example\n","\n","The new concept of owning built-in functions for different variable types is a benefit of so-called object-oriented programming (OOP). We will talk about OOP in the last part of the course, but previously we have noticed that all Python variable types are actually classes. A class in OOP languages contains data *and* methods that directly apply to the data (Note that in OOP, built-in functions in a class are often called **methods** to differentiate with regular functions that are not tightly associated with a class object). In other words, when a programmer creates a class, they not only have prepared a memory storage of the data, but also have prepared a list of functions that are properly coded to process the data. This is one of the benefits of using OOP.\n","\n","In the above sample code, we see that if the variable is a list, it also has a built-in method to perform exactly the task of reversing the list. Thanks to this built-in method, the operation can be coded in just one line built-in method call in line 20.\n","\n","Finally, the difference in algorithm design between the two used methods is that *list.reverse()* method is an \"in-place\" sorting algorithm, while slicing requires doubling the memory space to traverse from the list source. For more details, please be sure to watch the lecture video."]},{"cell_type":"markdown","metadata":{},"source":["# List Methods\n","\n","In Python and many object-oriented programming languages, a method refers to a built-in function encaptulated together with the variable data, when the variable is an object type. In Python, all variable types are objects. Therefore, each variable comes with its list of encaptulated methods. In this section, let us consider several some useful methods built in to the list type. \n","\n"," * clear(): Removes all list elements and causes the list to be empty.\n"," * insert(pos, element): Add an *element* at the *pos* position. If the position is greater than the current last position, then it will be added behind the current last element.\n"," * pop(pos): Remove and return the element at *pos* position. The argument can be empty, then the default position is the last one.\n"," * append(element): Add *element* from the end, and the length of the list is added by one.\n"," * extend(new_list): Add all elements from *new_list* to the end of the current list.\n"," * sort(): Sorts the list elements.\n"," * count(element): Counts the number of appearances of a specific element value."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T21:39:31.975108Z","iopub.status.busy":"2021-06-17T21:39:31.974457Z","iopub.status.idle":"2021-06-17T21:39:31.985853Z","shell.execute_reply":"2021-06-17T21:39:31.984705Z","shell.execute_reply.started":"2021-06-17T21:39:31.975074Z"},"trusted":true},"outputs":[],"source":["source = list('notebook')\n","# Add an element at position-0\n","source.insert(0, 'a')\n","print(source)\n","\n","# pop position-0, add a list element\n","# Note here append creates a nested list\n","source.pop(0)\n","source.append(list('notebook'))\n","print(source)\n","\n","# pop last position then merge two lists\n","source.pop()\n","source.extend(list('notebook'))\n","print(source)\n","\n","# built-in sort method\n","source.sort()\n","print(source)\n","print(source.count('o'))"]},{"cell_type":"markdown","metadata":{},"source":["The following example demonstrates functions to convert a string to a list, and vice versa."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-17T22:22:05.968026Z","iopub.status.busy":"2021-06-17T22:22:05.967639Z","iopub.status.idle":"2021-06-17T22:22:05.976324Z","shell.execute_reply":"2021-06-17T22:22:05.975486Z","shell.execute_reply.started":"2021-06-17T22:22:05.967995Z"},"trusted":true},"outputs":[],"source":["string = \"Python\"\n","L = list(string)\n","print(L)\n","\n","S1 = \"\".join(L)\n","S2 = \",\".join(L)\n","print(S1)\n","print(S2)\n","\n","list_string = str(L)\n","print(list_string)"]},{"cell_type":"markdown","metadata":{},"source":["# Mutable and Immutable Variable Types\n","\n","List type is also different from most of the previous variable types we have learned in the course in one important way. In Python, list type has an additional property to be mutable, while the variable types including int, float, bool, and string are immutable. In the rest of this lecture, let us familiarize ourselves about this distinction.\n","\n","In Python, we have said that each variable represents a class-type object stored in computer memory, and the object's class encapsulates both data and methods applied on the data. The use of class methods will be more clear when we formally introduce the OOP and classes. For the discussion about mutable versus immutable properties, we shall focus on the object's data.\n","\n","In particular, after an object is created and its memory allocated by Python, an **immutable** variable type will not permit the data to be updated later. For a **mutable** variable type, its data can be modified while the allocation of the object memory is preserved..\n","\n","To illustrate this distinction, let us introduce a Python function *id()*. The function takes a variable pointing to an object in the memory as its input, and return a unique reference to the said memory address. The Python standards guarantee for any Python implementation to provide unique ID numbers for unique objects in the memory. However, it is not guaranteed that the ID number is a valid memory address. The exact choice of the unique ID number is left for the language software to implement. \n","\n","In the following code block, we will examine the properties of mutability when different variables may represent the same or different class objects in Python:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-18T09:00:58.10331Z","iopub.status.busy":"2021-06-18T09:00:58.102752Z","iopub.status.idle":"2021-06-18T09:00:58.151269Z","shell.execute_reply":"2021-06-18T09:00:58.149588Z","shell.execute_reply.started":"2021-06-18T09:00:58.103183Z"},"trusted":true},"outputs":[],"source":["a = 10\n","print(id(a))\n","a = 32759680\n","print(id(a))\n","b = ['i','m','m','u','t','a','b','l','e']\n","print(b, id(b))\n","b.pop(0); b.pop(0)\n","print(b, id(b))\n","b = \"immutable\"\n","b[0] = \"a\""]},{"cell_type":"markdown","metadata":{},"source":["The above code block examines the mutability of three variable types when the code changes their value. First, *int* type is immutable. Therefore, updating variable *a*'s value leads to Python allocating two different memory locations for two integer values. Second, *list* type is mutable. Therefore, even when we pop the first two elements from the list ['i','m','m','u','t','a','b','l','e'] to ['m','u','t','a','b','l','e'], we can check that the variable *b*'s ID number remains the same. Finally, *string* is immutable. Therefore, any attempt to change a string's individual character in the array will lead to a runtime error."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-18T09:09:27.53464Z","iopub.status.busy":"2021-06-18T09:09:27.534159Z","iopub.status.idle":"2021-06-18T09:09:27.557906Z","shell.execute_reply":"2021-06-18T09:09:27.555766Z","shell.execute_reply.started":"2021-06-18T09:09:27.534593Z"},"trusted":true},"outputs":[],"source":["# Two small integers of the same value\n","a = 10\n","b = 10\n","print('small int: ', id(a), id(b), id(a)==id(b))\n","\n","# Two large integers of the same value\n","a = 32759680\n","b = 32759680\n","print('large int: ', id(a), id(b), id(a)==id(b))\n","\n","# Two floats of the same value\n","a = 10.1\n","b = 10.1\n","print('float: ', id(a), id(b), id(a)==id(b))\n","\n","# Two short strings of the same value\n","a = 'immutable'\n","b = 'immutable'\n","print('short str: ', id(a), id(b), id(a)==id(b))\n","\n","# Two long strings of the same value\n","a = 'immutable'*1000\n","b = 'immutable'*1000\n","print('long str: ', id(a), id(b), id(a)==id(b))\n","\n","# Two lists of the same value\n","a = ['m', 'u', 't', 'a', 'b', 'l', 'e']\n","b = ['m', 'u', 't', 'a', 'b', 'l', 'e']\n","print('list: ', id(a), id(b), id(a)==id(b))\n","\n","# Forcing one variable to be equal to the other\n","b = a\n","print('identified lists: ', id(a), id(b), id(a)==id(b))\n","a.clear()\n","print(a, b)\n","\n","# Creating duplicate objects that have different IDs\n","# Then modifying one varible will not be reflected on the second\n","b = a.copy()\n","print('copied lists: ', id(a), id(b), id(a)==id(b))\n","a.insert(0, 'new')\n","print(a, b)"]},{"cell_type":"markdown","metadata":{},"source":["Now let us consider a more subtle question: Previously, when two variable values or types are different, two distinct objects will be created by Python. Hence, their IDs and memory addresses will be different. However, consider the following question: *When two variables represent the same type and same value, are they referencing the same object or different objects in the memory?*\n","\n","The answer to this is not that straightforward. Please carefully review the above updated code block:\n","1. When †wo variables are small immutable integers, Python is smart enough to point the two variables to the same object in the memory. Hence their IDs are identical.\n","2. However, this conclusion cannot be blindly extended to consider large integers and float numbers, because searching for existing integer or float objects costs time. So a software cannot do that for an arbitrary range of integers and float. So in the second and third examples, we see that for two variables of identical large integer value and float value, their IDs are not the same.\n","3. The same argument also applies to the immutable string type. In the two subsequent examples, short strings of the same sequence \"immutable\" are assigned the same ID. However, two strings of the same long sequences are assigned different IDs. \n","4. For the next variation, we consider two mutable list variables of the same value. Since mutable variables can be modified after creation, even if their initial values are assigned to be the same, Python will allocate different IDs and different memory addresses to store the variable values.\n","5. Nevertheless, for all the above situations, there is an approach to force Python to identify two variable names to reference the same object in the memory, that is to assign one variable to be equal to the other, as in the example *b = a*. In such a case, regardless of the mutability type, the two variables will return the same ID number. Furthermore, since the two variables are referencing the same object, it causes the situation that modifying the first mutable variable will be reflected also on the second variable.\n","6. Finally, for mutable variables, we can use a common built-in method *copy()* to tell Python to create two objects but copy the data from one object to the other. In such cases, the two variables will be initially of the same value just like the case above. However, the two objects have different memory addresses, later modifying one variable will not affect the object referenced by the second variable.\n","\n","The reader may wonder what ultimately let a Python programming software to determine when to identify two objects of the same value in the memory. We caution that except in the case of explicitly identifying two variables as in the example of *b = a*, practitioners should not assume that two objects of the same value are identical in memory. The choice of doing so is entirely for implementation optimization considerations, and it is up to the software designer to decide. In other words, if we want two variables to be identical, we should explicitly proclaim *b = a*. In other cases we should not imply in any way that two variables are the same object."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* A list type variable stores an ordered sequence of variables, whose types can be different.\n","* A list element can be addressed by using a pair of square brackets: l[index]. Elements in a list of lists can be addressed recursively as: l[index0][index1]\n","* list is a class with built-in methods: clear(), insert(), pop(), append(), extend(), sort(), count().\n","* list is a mutable variable type. Earlier other variable types are immutable, including int, float, string, bool.\n","* id() function can be conveniently used to compare the assigned memory address of a variable. In particular, if two variables share the same ID, then they point to the same content in memory; if a variable after updating its value keeps the same ID, then it is a mutable variable type.\n","* list() casts an input argument to a list variable output."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Given a list variable: a = [2, 9, 1, \"2\", \"s\", 6], write a single line of code to sort the variable using the built-in sort() function. Explain the result.\n","\n","2. Write a code to type cast a string \"immutable\" into a list type variable, called input_list. Then remove the first two elements in input_list using the built-in method pop(). Finally, type cast the resulting input_list back to a string and print out.\n","\n","3. Continue with the above program. Now starting from a string \"mutable\", please type cast the variable to a list type, then add two new elements \"m\" and \"i\" one by one to the head of the list. Finally, type cast the resulting list back to a string and print out. Hint: The result should be \"immutable\".\n","\n","4. *sorted()* is a useful built-in function that can sort either a list or a string as input. Write a code to demonstrate of the output result of the function when the input argument is a list or a string.\n","\n","5. Debug"]},{"cell_type":"code","execution_count":10,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["['1', '2', '2', '6', '9', 's']\n","mutable\n","immutable\n"]}],"source":["a = [2, 9, 1, \"2\", \"s\", 6]\n","a = [str(b) for b in a]\n","a.sort()\n","print(a)\n","#Q2\n","string = \"immutable\"\n","input_list = list(string)\n","input_list.pop(0); input_list.pop(0)\n","print(\"\".join(input_list))\n","#Q3\n","input_list.insert(0,\"m\")\n","input_list.insert(0,\"i\")\n","print(\"\".join(input_list))"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["['a', 'b', 'c', 'c', 'd', 'g']\n"]}],"source":["#Q4\n","strlist = [\"b\", \"a\", \"c\", \"c\", \"d\", \"g\"]\n","intlist = [1,2,6,6,4,3,9,0]\n","print(sorted(strlist))\n","print(sorted(intlist))"]},{"cell_type":"code","execution_count":29,"metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["[' ', ' ', 'a', 'e', 'g', 'i', 'n', 'r', 's', 's', 't', 't', 't']\n"]}],"source":["\"\"\"Q5 DEBUG\"\"\"\n","a = \"a test string\"\n","\n","a_result = sorted(a)\n","print(a_result)\n","\n","# Please use the follow sorted() approach to again sort a string\n","# a_result = sorted(a)"]},{"cell_type":"markdown","metadata":{},"source":["6. Debug"]},{"cell_type":"code","execution_count":18,"metadata":{"execution":{"iopub.execute_input":"2021-07-20T18:46:57.546529Z","iopub.status.busy":"2021-07-20T18:46:57.546166Z","iopub.status.idle":"2021-07-20T18:46:57.552343Z","shell.execute_reply":"2021-07-20T18:46:57.551479Z","shell.execute_reply.started":"2021-07-20T18:46:57.546496Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["abcdefghij\n"]}],"source":["# Please concatenate two strings from the elements of two lists\n","List = ['abcde']\n","List = List + (list('fghij'))\n","string = \"\".join(List)\n","print(string)"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Create a list of lists with the variable name L. The first element of L is itself a list [1, 2], and the second element of L is another list ['a', 'b']. Then, swap the elements between L[0][1] and L[1][0]. Please note that a swap should be coded as a generic operation so as to not hard set the given values of L.\n","\n","2. Modify the above program: Use id() function to print out the ID of variable L before and after the swap operation. Observe that the ID numbers remain the same, and discuss the reason why.\n","\n","3. Further modify the above program: Use id() function to print out the ID values of elements L[0][1] and L[1][0] before and after the swap. Observe the change on the ID numbers and discuss the reason why."]},{"cell_type":"code","execution_count":27,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["4428352960\n","[[1, 'a'], ['a', 'b']]\n","[[1, 'a'], [2, 'b']]\n","4428352960\n","4369382192\n","4368247120\n"]}],"source":["#Q1\n","\n","L = [[1,2],[\"a\",\"b\"]]\n","print(id(L))\n","\n","print(id(L[0][1]))\n","print(id(L[1][0]))\n","\n","a= L[0][1]\n","L[0][1]=L[1][0]\n","print(L)\n","L[1][0]=a\n","print(L)\n","\n","#Q2\n","print(id(L))\n","#ID nums remain same because small\n","\n","\n","#Q3\n","#they change because they are two seperate different things\n","print(id(L[0][1]))\n","print(id(L[1][0]))"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30646,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-5-conditions-and-loops.ipynb b/Part One/1-5-conditions-and-loops.ipynb index 38cc357..ef54774 100644 --- a/Part One/1-5-conditions-and-loops.ipynb +++ b/Part One/1-5-conditions-and-loops.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 5: Conditions and Loops**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **Flow control statements**: A high-level language such as Python usually follows a sequential order to execute multiple lines of code. Exceptions are given to flow-control statements where the flow of the execution may be altered. Flow-control statements can be either selective (using if statements) or repetitive (using while and for statements)."]},{"cell_type":"markdown","metadata":{},"source":["# if-elif-else\n","\n","The *if* statement allows a program to deviate from a linear order of execution, and can choose to execute different code blocks based on the evaluation of the condition as defined in the if statement. \n","\n","The basic syntax of the *if* statement is as follows:\n","\n"," if CONDITION: \n"," BLOCK_1\n"," BLOCK_2\n"," \n","In this code structure, if the CONDITION expression is True, then BLOCK 1 will be executed; if False, then BLOCK_1 will be skipped. Then BLOCK_2 will be executed regardless of the *if* statement. Please note that the result of the CONDITION expression must be a boolean value.\n","\n","Another syntax involving the *if* statement is as follows:\n","\n"," if CONDITION: \n"," BLOCK_1\n"," else:\n"," BLOCK_2\n"," BLOCK_3\n"," \n","In this code structure, if the CONDITION expression is True, then BLOCK_1 will be executed but not BLOCK_2; however, if False, then BLOCK_2 will be executed but not BLOCK_1. This order matches the English meaning of the phrase *if - else -*. After that, BLOCK_3 will be executed regardless of the CONDITION value.\n","\n","In another syntax, an *if* code block can check a series of conditions sequentially. This is created by the use of the *elif* statement, a shorthand for *else if*:\n","\n"," if CONDITION_1: \n"," BLOCK_1\n"," elif CONDITION_2:\n"," BLOCK_2\n"," else:\n"," BLOCK_3\n"," BLOCK_4\n"," \n","Note that the above code is equivalent to the code below:\n","\n"," if CONDITION_1: \n"," BLOCK_1\n"," else:\n"," if CONDITION_2:\n"," BLOCK_2\n"," else:\n"," BLOCK_3\n"," BLOCK_4\n"," \n","First, let us consider the following sample code:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","Rock-Paper-Scissors Example Code\n","\"\"\"\n","import random\n","\n","# Ask user to input R or P or S\n","print('Please input [R] Rock, [P] Paper, or [S] Scissors: ')\n","user_input = input()\n","user_input = user_input.upper() # convert lower case to upper case\n","\n","if user_input !='R' and user_input !='P' and user_input !='S': # Doing sanity test\n"," print(\"Input not supported\")\n","else:\n"," computer_input = random.choice(['R', 'P', 'S'])\n"," print('Computer input is ', computer_input)\n"," if computer_input == user_input:\n"," print(\"Draw!\")\n"," elif (computer_input=='R' and user_input == 'S') or \\\n"," (computer_input=='S' and user_input == 'P') or \\\n"," (computer_input=='P' and user_input == 'R'):\n"," print('You Lose!')\n"," else:\n"," print('You Win!')\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["The code block implements a simple Rock-Paper-Scissors game, in which the user's guess input is acquired in between lines 7 and 9. In line 9, we use the string type's built-in method *upper()* to identify lower and upper cases of \"R\", \"P\", and \"S\".\n","\n","When a program requires to process user input, it is highly recommended that the program always check whether the user input is within the expected range of input values. In the Rock-Paper-Scissors game, if a user inputs text other than \"R\", \"P\", or \"S\", clearly the input should be rejected out right because responses to other values are not defined in the game. In line 11, we see the first use of the *if* statement:\n","\n"," if CONDITION: \n"," STATEMENTS\n","\n","Note that in the definition of the *if* statement, the CONDITION expression must be followed by a colon mark. This is because after the CONDITION expression and the colon sign, the code may include a block of multiple statements which will be either executed together or skipped together. Such statements who are bundled together are called a code block. \n","\n","In addition to the use of colon, a code block also must satisfy the requirement of indentation, namely, all statements in the same block (and hence will be executed sequentially) must start with the same size of indentation. Note that Python does not explicitly set the amount of indentation, as long as all indentation in one code block is consistent. Further, Python requires that the very first code block that is at the same level as the first statement of the code must not have any indentation.\n","\n","These requirements about the use of indentation to group statements into code blocks are quite unique in Python compared to many of its predecessors (such as C++ and Java). A beginner shall pay special attention to the proper use of colons and indentation.\n","\n","Next, we use print() function to illustrate the change of the code flow under the *if* statement."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print('Level-0 code block')\n","\n","if False:\n"," print('Level-1 code block')\n","else:\n"," print('Another level-1 code block')\n"," \n","print('Back to level-0 code block')"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print('Level-0 code block')\n","\n","if False:\n"," print('Level-1 code block')\n","elif False:\n"," print('Another level-1 code block')\n","else:\n"," print('Yet another level-1 code block')\n","\n","print('Back to level-0 code block')"]},{"cell_type":"markdown","metadata":{},"source":["# while Loop\n","\n","The *while CONDITION* statement will check the CONDITION expression in a loop. As long as the CONDITION remains True, its subsequent code block will be executed. But the loop will terminate if and when the CONDITION becomes False\n","\n","Let us see the following sample code:"]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2021-06-24T08:01:33.288843Z","iopub.status.busy":"2021-06-24T08:01:33.288330Z","iopub.status.idle":"2021-06-24T08:01:33.295374Z","shell.execute_reply":"2021-06-24T08:01:33.294375Z","shell.execute_reply.started":"2021-06-24T08:01:33.288809Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["nohtyP\n"]}],"source":["\"\"\"\n","Reverse a string using while loop\n","\"\"\"\n","\n","input_string = \"Python\"\n","reverse_string = \"\"\n","index = len(input_string)\n","while index>0:\n"," index = index - 1\n"," reverse_string = reverse_string + input_string[index]\n"," \n","print(reverse_string)\n"," "]},{"cell_type":"markdown","metadata":{},"source":["In this sample, the task is to create a new string that reverses the characters from input_string. Since a string can be addressed by its index, the while loop is defined based on an index variable that starts from the last element of the string (i.e., len(input_string) - 1), then iteratively reduces the index until zero (i.e., the first element). Note that since string is immutable, every execution of line 10 inside the loop will allocate a new string object for the updated reverse_string object, although their variable name remains the same."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","An infinite while loop with break\n","\"\"\"\n","\n","animal_list = ['dog', 'cat','fish','pony','parrot','leopard','frog','mouse','snake']\n","\n","index = 0\n","while True:\n"," print('Would you like to adopt a '+ animal_list[index%9]+ '? [Y/N]')\n"," answer = input()\n"," if answer.lower()=='y':\n"," break\n"," index += 1\n","\n","print('We will have your ' + animal_list[index%9] + ' ready for pick up!')"]},{"cell_type":"markdown","metadata":{},"source":["The above code block demonstrates a quite persistent salesperson who always wants to sell you something. As a result, the program set the while loop condition to always be True. In each loop, the program will query user's input to ask whether the user would like to adopt one of the animals from the *animal_list*. This construction is called an infinite loop. In an infinite loop, the result can be finite so long as a termination condition is being checked inside the while block. In the above example, the termination condition is whether the user answers \"Y\" or \"y\" for agreeing to adopt an animal. When inside a while loop, the loop can be terminated by calling the *break* function. Upon executing *break*, the flow of the code will jump to the next statement after the while block.\n","\n","Using *break* inside a while loop will cause the loop to abort without satisfying the while condition. In Python, a while loop can be coded to execute a block of code only if the loop exits normally, namely, the while condition is indeed equal to False. This is achieved by using the *while -- else* combination. We use this combination in the sample code below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","Test prime number\n","\"\"\"\n","import math\n","n = int(input()) # input an integer\n","\n","if n<2: \n"," print(n, 'is not a prime number')\n","elif n ==2: \n"," print (n, 'is a prime number')\n","else:\n"," x = 2\n"," while x<=math.sqrt(n) + 1:\n"," if n % x == 0: # n = x * y for some y\n"," print(n, 'is not a prime number')\n"," break\n"," else: \n"," x = x + 1\n","\n"," else:\n"," print(n, 'is a prime number')"]},{"cell_type":"markdown","metadata":{},"source":["In this sample code, the goal is to test whether a human input integer is a prime number. The algorithm is so designed to use a while loop to test integers from 2 to square root of n + 1 whether n can be evenly divided. If the condition is true, then n *is* a prime number, and the algorithm will report it and *break*. On the other hand, if the condition is not true for the entire while loop, then when exits normally the code will report that n is a prime number.\n","\n","Note that the *while -- else* combination is quite unique to Python. In other more traditional languages when the while loop could not be followed by an *else* condition, then a standard coding practice would rely on a boolean flag, such as *is_prime_flag* used in the following sample code:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","Test prime number: Not relying on while -- else\n","\"\"\"\n","import math\n","n = int(input()) # input an integer\n","\n","if n<2: \n"," print(n, 'is not a prime number')\n","elif n ==2: \n"," print (n, 'is a prime number')\n","else:\n"," x = 2\n"," is_prime_flag = True\n"," while x<=math.sqrt(n) + 1:\n"," if n % x == 0: # n = x * y for some y\n"," is_prime_flag = False\n"," break\n"," else: \n"," x = x + 1\n","\n"," if is_prime_flag:\n"," print(n, 'is a prime number')\n"," else:\n"," print(n, 'is not a prime number')"]},{"cell_type":"markdown","metadata":{},"source":["# for Loop\n","\n","Another supported loop statement is the *for* loop. A for loop will need to define an index that will go over a sequence of pre-defined values. The sequence can be defined in two basic ways:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["for i in range(0, 10, 2): \n"," print(i, end = ' ')\n","\n","print() \n","loop_list = ['The', 'date', 'is', [2, 20, 2020]]\n","for i in loop_list: print(i, end = \" \")"]},{"cell_type":"markdown","metadata":{},"source":["In the first example above, the index sequence is defined by the function *range(begin, end, step)*. In the example, we see that *range(0, 10, 2)* contains five numbers: 0, 2, 4, 6, 8, and as in slicing, the end number will not be taken.\n","\n","In the second example, the index sequence is in fact a list. The for loop simply causes the loop index to enumerate the values of the elements from the list. \n","\n","At this point, we shall highlight one major difference when setting up a loop using *for* statement compared to *while*. The index sequence defined in the *for* loop is created at the beginning of the *for* loop. If during the *for* loop, however, the code explicitly changes either the index value or the index sequence elements, the changes will not alter the pre-set control flow. To illustrate this, let us see the example below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["for_string = \"abcde\"\n","for i in for_string:\n"," for_string = \"uvwxyz\"\n"," print(i, end = \" \")\n"," i = 5\n"," print(i, end = \" \")"]},{"cell_type":"markdown","metadata":{},"source":["We see in the above example that neither changing the *for* loop index sequence nor changing the index value changes the flow control of the *for* loop. At the beginning, the *for* loop index is set to enumerate the five string elements \"a\", \"b\", \"c\", \"d\", \"e\". \n","\n","We also recall that, similar to the *while* loop, a *for* loop can be aborted from inside the loop using *break*.\n","\n","Finally, let us see the following sample code."]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2021-06-24T17:38:32.577582Z","iopub.status.busy":"2021-06-24T17:38:32.577124Z","iopub.status.idle":"2021-06-24T17:38:49.518045Z","shell.execute_reply":"2021-06-24T17:38:49.517256Z","shell.execute_reply.started":"2021-06-24T17:38:32.577543Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Would you like to adopt a dog? [Y/N] Y\n","Would you like to adopt a cat? [Y/N] N\n","Would you like to adopt a fish? [Y/N] Y\n","Would you like to adopt a pony? [Y/N] Y\n","Would you like to adopt a parrot? [Y/N] N\n","Would you like to adopt a leopard? [Y/N] N\n","Would you like to adopt a frog? [Y/N] N\n","Would you like to adopt a mouse? [Y/N] N\n","Would you like to adopt a snake? [Y/N] N\n"]},{"name":"stdout","output_type":"stream","text":["We will have your ['dog', 'fish', 'pony'] ready for pick up!\n"]}],"source":["animal_list = ['dog', 'cat','fish','pony','parrot','leopard','frog','mouse','snake']\n","\n","index = 0\n","adopted_animals=[]\n","for i in animal_list:\n"," answer = input('Would you like to adopt a '+ i + '? [Y/N]')\n"," if answer.lower()!='y':\n"," continue\n","\n"," adopted_animals.append(i)\n","else:\n"," if not adopted_animals:\n"," print('Your adoption list is empty. See you next time!')\n"," else:\n"," print('We will have your ' + str(adopted_animals) + ' ready for pick up!')"]},{"cell_type":"markdown","metadata":{},"source":["In this sample code, we re-program another salesperson strategy, whereby the code uses the *for* loop to only ask the user to adopt animals from the *animal_list* once. In the *for* loop, if the user input to any of the animal name is \"Y\" or \"y\", then the animal name will be appended to the *adopted_animals* list. In the code, we see the use of *for -- else*. It serves the same function, that if a *for* loop terminates normally, the *else* code block will be executed. Similarly, if the code aborts inside the *for* loop, then the *else* block will not be executed.\n","\n","In line 9, we see a new flow control statement, called **continue**. *continue* acts differently than *break* inside a loop. When the flow of the code meets *continue*, it will then skip the rest of the code in the loop block, and immediately start from the beginning of the next loop. For a *while* loop, this means re-testing the while condition; for a *for* loop, this means setting the loop index to the next pre-defined value from the index sequence."]},{"cell_type":"markdown","metadata":{},"source":["Finally, we again use the toy example of reversing a list to compare the time efficiency in Python between using built-in methods and using explicit for or while loops. From the resulting time difference, we can see that it is much more efficient to be able to directly use built-in methods versus re-implementing these methods using a Python code block."]},{"cell_type":"code","execution_count":7,"metadata":{"execution":{"iopub.execute_input":"2021-06-24T17:59:00.373750Z","iopub.status.busy":"2021-06-24T17:59:00.373361Z","iopub.status.idle":"2021-06-24T18:00:05.300071Z","shell.execute_reply":"2021-06-24T18:00:05.298978Z","shell.execute_reply.started":"2021-06-24T17:59:00.373718Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["WHILE LOOP REVERSE: Total elapsed time: 63.72 seconds\n","REVERSE() METHOD: Total elapsed time: 1.01 seconds\n","REVERSE() METHOD: Total elapsed time: 0.19 seconds\n"]}],"source":["# Compare time complexity of reversing a list using three methods and over 1 million repeats\n","import time\n","\n","List = list('abcdefghijklmnopqrstuvwxyz'*10)\n","repeat_time = 1000000 # The source list is not long, but we ask repeat 1 million times\n","\n","# Method 1: Reverse a list using a while loop code block\n","tic = time.time()\n","for i in range(repeat_time):\n"," reversed_list = []\n"," index = len(List)\n"," while index>0:\n"," index = index -1\n"," reversed_list.append(List[index])\n","toc = time.time()\n","elapsed_time = toc - tic\n","print(\"WHILE LOOP REVERSE: Total elapsed time: %.2f seconds\" % elapsed_time)\n","\n","# Method 2: Reverse a list using built-in reverse() method\n","tic = time.time()\n","for i in range(repeat_time):\n"," reversed_list = List.copy()\n"," reversed_list.reverse()\n","toc = time.time()\n","elapsed_time = toc - tic\n","print(\"REVERSE() METHOD: Total elapsed time: %.2f seconds\" % elapsed_time)\n","\n","# Method 3: Reverse a list using built-in reverse() method without copy() penalty\n","reversed_list = List.copy()\n","tic = time.time()\n","for i in range(repeat_time):\n"," reversed_list.reverse()\n","toc = time.time()\n","elapsed_time = toc - tic\n","print(\"REVERSE() METHOD: Total elapsed time: %.2f seconds\" % elapsed_time)"]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* if -- elif -- else statements can alter the linear order of code execution based on the imposed conditions.\n","* while loop creates a looped code block based on a condition, which is evaluated in the beginning of every loop.\n","* while loop condition can be always True. In such case, the condition to terminate the loop can be tested inside the loop and use another command: break.\n","* while -- else statements will execute the code block after else upon the while loop exits. The while code block may skip the else code block only by using break, which then will redirect the code flow to after the else code block.\n","* for loop creates a looped code block by enumerating through a sequence of loop index values. Most noticeable about the loop index is that the index sequence will be determined only at the time the loop is created. If the index value is changed by user inside the loop, it will still be reset to its deterministic sequence when a new loop starts.\n","* continue statement from inside a loop will skip the remaining code in the loop and redirect the flow to start a new loop at the beginning of the code block."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. According to Wikipedia, the following pseudo-code is an algorithm to determine a *year* variable as a positive integer represents a leap year. Please write a program, which will receive an integer input from the user as the value of the *year* variable, and then determine if it is a leap year.\n","\n",">\n","\n"," if (year is not divisible by 4) then (it is a common year)\n"," else if (year is not divisible by 100) then (it is a leap year)\n"," else if (year is not divisible by 400) then (it is a common year)\n"," else (it is a leap year) \n"," \n","2. Please use the combination of *while* loop and time.time() function, to create a loop that will run for exactly 5 seconds. Hint: Inside the loop, the code block can use *pass* statement.\n","\n","3. Please modify Rock-Paper-Scissors Example Code in the lecture to add a score variable, namely, when the user wins, the score will increase by one point; when the user loses, the score will decrease by one point. Create a loop structure starting from the initial value score = 0, and continue running the Rock-Paper-Scissors game until the score reaches three (3).\n","\n","4. Please reverse a string variable using the *for* loop.\n","\n","5. Debug"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["for i in range(10)\n"," print(i)\n","else\n"," pass"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Using a list and a *for* loop to calculate and save the Fibonacci number for the first 10 nonnegative integers. The Fibonacci number is defined as:\n","> Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2) for any n>1;\n",">\n","> Fibonacci(0) = 0; Fibonacci(1) = 1.\n","\n","2. Use for loop to print the following pattern for n layers. For example, when n = 4, the pattern is:\n","\n","> 1\n",">\n","> 1 1\n",">\n","> 1 2 1\n",">\n","> 1 3 3 1\n",">\n","> 1 4 6 4 1"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.6"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 5: Conditions and Loops**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **Flow control statements**: A high-level language such as Python usually follows a sequential order to execute multiple lines of code. Exceptions are given to flow-control statements where the flow of the execution may be altered. Flow-control statements can be either selective (using if statements) or repetitive (using while and for statements)."]},{"cell_type":"markdown","metadata":{},"source":["# if-elif-else\n","\n","The *if* statement allows a program to deviate from a linear order of execution, and can choose to execute different code blocks based on the evaluation of the condition as defined in the if statement. \n","\n","The basic syntax of the *if* statement is as follows:\n","\n"," if CONDITION: \n"," BLOCK_1\n"," BLOCK_2\n"," \n","In this code structure, if the CONDITION expression is True, then BLOCK 1 will be executed; if False, then BLOCK_1 will be skipped. Then BLOCK_2 will be executed regardless of the *if* statement. Please note that the result of the CONDITION expression must be a boolean value.\n","\n","Another syntax involving the *if* statement is as follows:\n","\n"," if CONDITION: \n"," BLOCK_1\n"," else:\n"," BLOCK_2\n"," BLOCK_3\n"," \n","In this code structure, if the CONDITION expression is True, then BLOCK_1 will be executed but not BLOCK_2; however, if False, then BLOCK_2 will be executed but not BLOCK_1. This order matches the English meaning of the phrase *if - else -*. After that, BLOCK_3 will be executed regardless of the CONDITION value.\n","\n","In another syntax, an *if* code block can check a series of conditions sequentially. This is created by the use of the *elif* statement, a shorthand for *else if*:\n","\n"," if CONDITION_1: \n"," BLOCK_1\n"," elif CONDITION_2:\n"," BLOCK_2\n"," else:\n"," BLOCK_3\n"," BLOCK_4\n"," \n","Note that the above code is equivalent to the code below:\n","\n"," if CONDITION_1: \n"," BLOCK_1\n"," else:\n"," if CONDITION_2:\n"," BLOCK_2\n"," else:\n"," BLOCK_3\n"," BLOCK_4\n"," \n","First, let us consider the following sample code:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","Rock-Paper-Scissors Example Code\n","\"\"\"\n","import random\n","\n","# Ask user to input R or P or S\n","print('Please input [R] Rock, [P] Paper, or [S] Scissors: ')\n","user_input = input()\n","user_input = user_input.upper() # convert lower case to upper case\n","\n","if user_input !='R' and user_input !='P' and user_input !='S': # Doing sanity test\n"," print(\"Input not supported\")\n","else:\n"," computer_input = random.choice(['R', 'P', 'S'])\n"," print('Computer input is ', computer_input)\n"," if computer_input == user_input:\n"," print(\"Draw!\")\n"," elif (computer_input=='R' and user_input == 'S') or \\\n"," (computer_input=='S' and user_input == 'P') or \\\n"," (computer_input=='P' and user_input == 'R'):\n"," print('You Lose!')\n"," else:\n"," print('You Win!')\n","\n"]},{"cell_type":"markdown","metadata":{},"source":["The code block implements a simple Rock-Paper-Scissors game, in which the user's guess input is acquired in between lines 7 and 9. In line 9, we use the string type's built-in method *upper()* to identify lower and upper cases of \"R\", \"P\", and \"S\".\n","\n","When a program requires to process user input, it is highly recommended that the program always check whether the user input is within the expected range of input values. In the Rock-Paper-Scissors game, if a user inputs text other than \"R\", \"P\", or \"S\", clearly the input should be rejected out right because responses to other values are not defined in the game. In line 11, we see the first use of the *if* statement:\n","\n"," if CONDITION: \n"," STATEMENTS\n","\n","Note that in the definition of the *if* statement, the CONDITION expression must be followed by a colon mark. This is because after the CONDITION expression and the colon sign, the code may include a block of multiple statements which will be either executed together or skipped together. Such statements who are bundled together are called a code block. \n","\n","In addition to the use of colon, a code block also must satisfy the requirement of indentation, namely, all statements in the same block (and hence will be executed sequentially) must start with the same size of indentation. Note that Python does not explicitly set the amount of indentation, as long as all indentation in one code block is consistent. Further, Python requires that the very first code block that is at the same level as the first statement of the code must not have any indentation.\n","\n","These requirements about the use of indentation to group statements into code blocks are quite unique in Python compared to many of its predecessors (such as C++ and Java). A beginner shall pay special attention to the proper use of colons and indentation.\n","\n","Next, we use print() function to illustrate the change of the code flow under the *if* statement."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print('Level-0 code block')\n","\n","if False:\n"," print('Level-1 code block')\n","else:\n"," print('Another level-1 code block')\n"," \n","print('Back to level-0 code block')"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["print('Level-0 code block')\n","\n","if False:\n"," print('Level-1 code block')\n","elif False:\n"," print('Another level-1 code block')\n","else:\n"," print('Yet another level-1 code block')\n","\n","print('Back to level-0 code block')"]},{"cell_type":"markdown","metadata":{},"source":["# while Loop\n","\n","The *while CONDITION* statement will check the CONDITION expression in a loop. As long as the CONDITION remains True, its subsequent code block will be executed. But the loop will terminate if and when the CONDITION becomes False\n","\n","Let us see the following sample code:"]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2021-06-24T08:01:33.288843Z","iopub.status.busy":"2021-06-24T08:01:33.288330Z","iopub.status.idle":"2021-06-24T08:01:33.295374Z","shell.execute_reply":"2021-06-24T08:01:33.294375Z","shell.execute_reply.started":"2021-06-24T08:01:33.288809Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["nohtyP\n"]}],"source":["\"\"\"\n","Reverse a string using while loop\n","\"\"\"\n","\n","input_string = \"Python\"\n","reverse_string = \"\"\n","index = len(input_string)\n","while index>0:\n"," index = index - 1\n"," reverse_string = reverse_string + input_string[index]\n"," \n","print(reverse_string)\n"," "]},{"cell_type":"markdown","metadata":{},"source":["In this sample, the task is to create a new string that reverses the characters from input_string. Since a string can be addressed by its index, the while loop is defined based on an index variable that starts from the last element of the string (i.e., len(input_string) - 1), then iteratively reduces the index until zero (i.e., the first element). Note that since string is immutable, every execution of line 10 inside the loop will allocate a new string object for the updated reverse_string object, although their variable name remains the same."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","An infinite while loop with break\n","\"\"\"\n","\n","animal_list = ['dog', 'cat','fish','pony','parrot','leopard','frog','mouse','snake']\n","\n","index = 0\n","while True:\n"," print('Would you like to adopt a '+ animal_list[index%9]+ '? [Y/N]')\n"," answer = input()\n"," if answer.lower()=='y':\n"," break\n"," index += 1\n","\n","print('We will have your ' + animal_list[index%9] + ' ready for pick up!')"]},{"cell_type":"markdown","metadata":{},"source":["The above code block demonstrates a quite persistent salesperson who always wants to sell you something. As a result, the program set the while loop condition to always be True. In each loop, the program will query user's input to ask whether the user would like to adopt one of the animals from the *animal_list*. This construction is called an infinite loop. In an infinite loop, the result can be finite so long as a termination condition is being checked inside the while block. In the above example, the termination condition is whether the user answers \"Y\" or \"y\" for agreeing to adopt an animal. When inside a while loop, the loop can be terminated by calling the *break* function. Upon executing *break*, the flow of the code will jump to the next statement after the while block.\n","\n","Using *break* inside a while loop will cause the loop to abort without satisfying the while condition. In Python, a while loop can be coded to execute a block of code only if the loop exits normally, namely, the while condition is indeed equal to False. This is achieved by using the *while -- else* combination. We use this combination in the sample code below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","Test prime number\n","\"\"\"\n","import math\n","n = int(input()) # input an integer\n","\n","if n<2: \n"," print(n, 'is not a prime number')\n","elif n ==2: \n"," print (n, 'is a prime number')\n","else:\n"," x = 2\n"," while x<=math.sqrt(n) + 1:\n"," if n % x == 0: # n = x * y for some y\n"," print(n, 'is not a prime number')\n"," break\n"," else: \n"," x = x + 1\n","\n"," else:\n"," print(n, 'is a prime number')"]},{"cell_type":"markdown","metadata":{},"source":["In this sample code, the goal is to test whether a human input integer is a prime number. The algorithm is so designed to use a while loop to test integers from 2 to square root of n + 1 whether n can be evenly divided. If the condition is true, then n *is* a prime number, and the algorithm will report it and *break*. On the other hand, if the condition is not true for the entire while loop, then when exits normally the code will report that n is a prime number.\n","\n","Note that the *while -- else* combination is quite unique to Python. In other more traditional languages when the while loop could not be followed by an *else* condition, then a standard coding practice would rely on a boolean flag, such as *is_prime_flag* used in the following sample code:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["\"\"\"\n","Test prime number: Not relying on while -- else\n","\"\"\"\n","import math\n","n = int(input()) # input an integer\n","\n","if n<2: \n"," print(n, 'is not a prime number')\n","elif n ==2: \n"," print (n, 'is a prime number')\n","else:\n"," x = 2\n"," is_prime_flag = True\n"," while x<=math.sqrt(n) + 1:\n"," if n % x == 0: # n = x * y for some y\n"," is_prime_flag = False\n"," break\n"," else: \n"," x = x + 1\n","\n"," if is_prime_flag:\n"," print(n, 'is a prime number')\n"," else:\n"," print(n, 'is not a prime number')"]},{"cell_type":"markdown","metadata":{},"source":["# for Loop\n","\n","Another supported loop statement is the *for* loop. A for loop will need to define an index that will go over a sequence of pre-defined values. The sequence can be defined in two basic ways:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["for i in range(0, 10, 2): \n"," print(i, end = ' ')\n","\n","print() \n","loop_list = ['The', 'date', 'is', [2, 20, 2020]]\n","for i in loop_list: print(i, end = \" \")"]},{"cell_type":"markdown","metadata":{},"source":["In the first example above, the index sequence is defined by the function *range(begin, end, step)*. In the example, we see that *range(0, 10, 2)* contains five numbers: 0, 2, 4, 6, 8, and as in slicing, the end number will not be taken.\n","\n","In the second example, the index sequence is in fact a list. The for loop simply causes the loop index to enumerate the values of the elements from the list. \n","\n","At this point, we shall highlight one major difference when setting up a loop using *for* statement compared to *while*. The index sequence defined in the *for* loop is created at the beginning of the *for* loop. If during the *for* loop, however, the code explicitly changes either the index value or the index sequence elements, the changes will not alter the pre-set control flow. To illustrate this, let us see the example below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["for_string = \"abcde\"\n","for i in for_string:\n"," for_string = \"uvwxyz\"\n"," print(i, end = \" \")\n"," i = 5\n"," print(i, end = \" \")"]},{"cell_type":"markdown","metadata":{},"source":["We see in the above example that neither changing the *for* loop index sequence nor changing the index value changes the flow control of the *for* loop. At the beginning, the *for* loop index is set to enumerate the five string elements \"a\", \"b\", \"c\", \"d\", \"e\". \n","\n","We also recall that, similar to the *while* loop, a *for* loop can be aborted from inside the loop using *break*.\n","\n","Finally, let us see the following sample code."]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2021-06-24T17:38:32.577582Z","iopub.status.busy":"2021-06-24T17:38:32.577124Z","iopub.status.idle":"2021-06-24T17:38:49.518045Z","shell.execute_reply":"2021-06-24T17:38:49.517256Z","shell.execute_reply.started":"2021-06-24T17:38:32.577543Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Would you like to adopt a dog? [Y/N] Y\n","Would you like to adopt a cat? [Y/N] N\n","Would you like to adopt a fish? [Y/N] Y\n","Would you like to adopt a pony? [Y/N] Y\n","Would you like to adopt a parrot? [Y/N] N\n","Would you like to adopt a leopard? [Y/N] N\n","Would you like to adopt a frog? [Y/N] N\n","Would you like to adopt a mouse? [Y/N] N\n","Would you like to adopt a snake? [Y/N] N\n"]},{"name":"stdout","output_type":"stream","text":["We will have your ['dog', 'fish', 'pony'] ready for pick up!\n"]}],"source":["animal_list = ['dog', 'cat','fish','pony','parrot','leopard','frog','mouse','snake']\n","\n","index = 0\n","adopted_animals=[]\n","for i in animal_list:\n"," answer = input('Would you like to adopt a '+ i + '? [Y/N]')\n"," if answer.lower()!='y':\n"," continue\n","\n"," adopted_animals.append(i)\n","else:\n"," if not adopted_animals:\n"," print('Your adoption list is empty. See you next time!')\n"," else:\n"," print('We will have your ' + str(adopted_animals) + ' ready for pick up!')"]},{"cell_type":"markdown","metadata":{},"source":["In this sample code, we re-program another salesperson strategy, whereby the code uses the *for* loop to only ask the user to adopt animals from the *animal_list* once. In the *for* loop, if the user input to any of the animal name is \"Y\" or \"y\", then the animal name will be appended to the *adopted_animals* list. In the code, we see the use of *for -- else*. It serves the same function, that if a *for* loop terminates normally, the *else* code block will be executed. Similarly, if the code aborts inside the *for* loop, then the *else* block will not be executed.\n","\n","In line 9, we see a new flow control statement, called **continue**. *continue* acts differently than *break* inside a loop. When the flow of the code meets *continue*, it will then skip the rest of the code in the loop block, and immediately start from the beginning of the next loop. For a *while* loop, this means re-testing the while condition; for a *for* loop, this means setting the loop index to the next pre-defined value from the index sequence."]},{"cell_type":"markdown","metadata":{},"source":["Finally, we again use the toy example of reversing a list to compare the time efficiency in Python between using built-in methods and using explicit for or while loops. From the resulting time difference, we can see that it is much more efficient to be able to directly use built-in methods versus re-implementing these methods using a Python code block."]},{"cell_type":"code","execution_count":7,"metadata":{"execution":{"iopub.execute_input":"2021-06-24T17:59:00.373750Z","iopub.status.busy":"2021-06-24T17:59:00.373361Z","iopub.status.idle":"2021-06-24T18:00:05.300071Z","shell.execute_reply":"2021-06-24T18:00:05.298978Z","shell.execute_reply.started":"2021-06-24T17:59:00.373718Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["WHILE LOOP REVERSE: Total elapsed time: 63.72 seconds\n","REVERSE() METHOD: Total elapsed time: 1.01 seconds\n","REVERSE() METHOD: Total elapsed time: 0.19 seconds\n"]}],"source":["# Compare time complexity of reversing a list using three methods and over 1 million repeats\n","import time\n","\n","List = list('abcdefghijklmnopqrstuvwxyz'*10)\n","repeat_time = 1000000 # The source list is not long, but we ask repeat 1 million times\n","\n","# Method 1: Reverse a list using a while loop code block\n","tic = time.time()\n","for i in range(repeat_time):\n"," reversed_list = []\n"," index = len(List)\n"," while index>0:\n"," index = index -1\n"," reversed_list.append(List[index])\n","toc = time.time()\n","elapsed_time = toc - tic\n","print(\"WHILE LOOP REVERSE: Total elapsed time: %.2f seconds\" % elapsed_time)\n","\n","# Method 2: Reverse a list using built-in reverse() method\n","tic = time.time()\n","for i in range(repeat_time):\n"," reversed_list = List.copy()\n"," reversed_list.reverse()\n","toc = time.time()\n","elapsed_time = toc - tic\n","print(\"REVERSE() METHOD: Total elapsed time: %.2f seconds\" % elapsed_time)\n","\n","# Method 3: Reverse a list using built-in reverse() method without copy() penalty\n","reversed_list = List.copy()\n","tic = time.time()\n","for i in range(repeat_time):\n"," reversed_list.reverse()\n","toc = time.time()\n","elapsed_time = toc - tic\n","print(\"REVERSE() METHOD: Total elapsed time: %.2f seconds\" % elapsed_time)"]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* if -- elif -- else statements can alter the linear order of code execution based on the imposed conditions.\n","* while loop creates a looped code block based on a condition, which is evaluated in the beginning of every loop.\n","* while loop condition can be always True. In such case, the condition to terminate the loop can be tested inside the loop and use another command: break.\n","* while -- else statements will execute the code block after else upon the while loop exits. The while code block may skip the else code block only by using break, which then will redirect the code flow to after the else code block.\n","* for loop creates a looped code block by enumerating through a sequence of loop index values. Most noticeable about the loop index is that the index sequence will be determined only at the time the loop is created. If the index value is changed by user inside the loop, it will still be reset to its deterministic sequence when a new loop starts.\n","* continue statement from inside a loop will skip the remaining code in the loop and redirect the flow to start a new loop at the beginning of the code block."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. According to Wikipedia, the following pseudo-code is an algorithm to determine a *year* variable as a positive integer represents a leap year. Please write a program, which will receive an integer input from the user as the value of the *year* variable, and then determine if it is a leap year.\n","\n",">\n","\n"," if (year is not divisible by 4) then (it is a common year)\n"," else if (year is not divisible by 100) then (it is a leap year)\n"," else if (year is not divisible by 400) then (it is a common year)\n"," else (it is a leap year) \n"," \n","2. Please use the combination of *while* loop and time.time() function, to create a loop that will run for exactly 5 seconds. Hint: Inside the loop, the code block can use *pass* statement.\n","\n","3. Please modify Rock-Paper-Scissors Example Code in the lecture to add a score variable, namely, when the user wins, the score will increase by one point; when the user loses, the score will decrease by one point. Create a loop structure starting from the initial value score = 0, and continue running the Rock-Paper-Scissors game until the score reaches three (3).\n","\n","4. Please reverse a string variable using the *for* loop.\n","\n","5. Debug"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["leap year\n"]}],"source":["#Q1\n","year = int(input(\"year\"))\n","if year % 4 != 0:\n"," print(\"common year\")\n","elif year % 100 != 0:\n"," print(\"leap year\")\n","elif year % 400 != 0:\n"," print(\"common year\")\n","else:\n"," print(\"leap year\")\n"]},{"cell_type":"code","execution_count":16,"metadata":{},"outputs":[],"source":["\"\"\"Q2\"\"\"\n","import time\n","\n","while time.sleep(5):\n"," break"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Please input [R] Rock, [P] Paper, or [S] Scissors: \n","Input not supported\n"]}],"source":["\"\"\"Q3\"\"\"\n","\"\"\"\n","Rock-Paper-Scissors With Score\n","\"\"\"\n","import random\n","score = 0\n","# Ask user to input R or P or S\n","print('Please input [R] Rock, [P] Paper, or [S] Scissors: ')\n","while score <3:\n"," user_input = input()\n"," user_input = user_input.upper() # convert lower case to upper case\n"," if user_input == \"STOP\":\n"," break\n"," else:\n"," if user_input !='R' and user_input !='P' and user_input !='S': # Doing sanity test\n"," print(\"Input not supported\")\n"," else:\n"," computer_input = random.choice(['R', 'P', 'S'])\n"," print('Computer input is ', computer_input)\n"," if computer_input == user_input:\n"," print(\"Draw!\")\n"," elif (computer_input=='R' and user_input == 'S') or \\\n"," (computer_input=='S' and user_input == 'P') or \\\n"," (computer_input=='P' and user_input == 'R'):\n"," print('You Lose!')\n"," score -=1\n"," print(score)\n"," else:\n"," print('You Win!')\n"," score +=1\n"," print(score)"]},{"cell_type":"code","execution_count":25,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["w\n","ow\n","row\n","drow\n","sdrow\n","sdrow\n"]}],"source":["\"\"\"Q4\"\"\"\n","original = \"words\"\n","new = ''\n","for i in original:\n"," new = i + new\n"," print(new)\n","print(new)"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["for i in range(10):\n"," print(i)\n","else:\n"," pass"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Using a list and a *for* loop to calculate and save the Fibonacci number for the first 10 nonnegative integers. The Fibonacci number is defined as:\n","> Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2) for any n>1;\n",">\n","> Fibonacci(0) = 0; Fibonacci(1) = 1.\n","\n","2. Use for loop to print the following pattern for n layers. For example, when n = 4, the pattern is:\n","\n","> 1\n",">\n","> 1 1\n",">\n","> 1 2 1\n",">\n","> 1 3 3 1\n",">\n","> 1 4 6 4 1"]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[0, 1, 1]\n","[0, 1, 1, 2]\n","[0, 1, 1, 2, 3]\n","[0, 1, 1, 2, 3, 5]\n","[0, 1, 1, 2, 3, 5, 8]\n","[0, 1, 1, 2, 3, 5, 8, 13]\n","[0, 1, 1, 2, 3, 5, 8, 13, 21]\n","[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n","[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n"]}],"source":["a = [0,1]\n","for i in range(2,11):\n"," a.append(a[i-1]+a[i-2])\n"," print(a)"]},{"cell_type":"code","execution_count":24,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["1\n","11\n","121\n","1331\n"]}],"source":["npattern = 1\n","for i in range(5):\n"," print(npattern)\n"," npattern = npattern * 11\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-6-functions.ipynb b/Part One/1-6-functions.ipynb index 58149e5..8c5f817 100644 --- a/Part One/1-6-functions.ipynb +++ b/Part One/1-6-functions.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 6: Functions**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","In our course so far, we have discussed three types of functions. A function is a block of code that is packed together that is given a function name and possibly a list of input arguments and and output results. \n","\n","* Built-in stand-alone functions: Examples include print(), type(), int(), and range().\n","* Imported functions: Examples include math.floor(), time.time(), and random.randint().\n","* Methods in classes: Examples include list.reverse(), list.append(), and string.lower().\n"," \n","In this lecture, we will learn how to code user-defined Python functions.\n","\n","# Define Functions"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T17:11:43.653389Z","iopub.status.busy":"2021-06-25T17:11:43.653016Z","iopub.status.idle":"2021-06-25T17:11:43.659763Z","shell.execute_reply":"2021-06-25T17:11:43.659119Z","shell.execute_reply.started":"2021-06-25T17:11:43.653358Z"},"trusted":true},"outputs":[],"source":["def print_hello_world():\n"," '''The function prints Hello World! string.'''\n","\n"," print(\"Hello World!\")\n","\n","def print_string(s):\n"," \"\"\"The function prints an input string.\n"," Input:\n"," s: a string\n"," Output:\n"," n/a\n"," \"\"\"\n","\n"," print(s)\n"," \n","print_hello_world()\n","print_string('Hello New World!')\n","print(print_string.__doc__)\n","\n","# Test function return value when return value is not provided\n","\n","print(print_hello_world()) # Return is None of NoneType"]},{"cell_type":"markdown","metadata":{},"source":["The above sample code defines two functions: *print_hello_world()* and *print_string()*. To define a function, the code shall start with a keyword *def*, followed by the name of the function provided by the programmer. \n","\n","A function also may or may not have a list of input arguments. In the first function, since the purpose of the function is always to print \"Hello World!\", no additional input is needed. The use of a pair of empty parentheses indicates that the function has no input argument.\n","\n","In the second example, *print_string()* codes a print function, but its function code does not specify what is the message to be printed. Instead, the function uses the input argument *s*. When the function is called, the function call must specify the input argument value. This value then will be assigned to variable *s*.\n","\n","There is one more common component in both *print_hello_world()* and *print_string()*, that is the inclusion of a comment section right next to the definition of function name and its input arguments, namely, right after the colon mark. The comment section is required to use the triple quotation marks, and they can be either single or double quotation marks. There is a name for the comment created as such, called *docstring*. \n","\n","Different from other types of code comments, the use of docstrings is strongly recommended. Developers can use docstrings to document the main design goal and logic of the function and a list of input/output arguments. Docstrings help third-party users to better interface with the functions without going through the detailed coding implementation.\n","\n","The content of docstrings will be also assigned as a built-in attribute of the functions or methods that include docstrings, called *.__doc__*. In the above example, the function's docstring can be printed out by: *print(print_string.__doc__)*\n","\n","To emphasize its generality, built-in Python functions and methods also include docstrings extensively. For example, below let us review the docstring of Python's own *print()* function:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T17:09:25.217804Z","iopub.status.busy":"2021-06-25T17:09:25.217461Z","iopub.status.idle":"2021-06-25T17:09:25.221886Z","shell.execute_reply":"2021-06-25T17:09:25.221225Z","shell.execute_reply.started":"2021-06-25T17:09:25.217771Z"},"trusted":true},"outputs":[],"source":["print(print.__doc__)"]},{"cell_type":"markdown","metadata":{},"source":["# Function Arguments\n","\n","In the previous example, we have seen a user-defined function may include a list of arguments. Let us consider the two distinct cases when the function arguments may be of mutable type or of immutable type."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T15:37:45.378539Z","iopub.status.busy":"2021-06-25T15:37:45.378153Z","iopub.status.idle":"2021-06-25T15:37:45.385628Z","shell.execute_reply":"2021-06-25T15:37:45.384847Z","shell.execute_reply.started":"2021-06-25T15:37:45.378495Z"},"trusted":true},"outputs":[],"source":["# Sample code to use mutable and immutable function arguments\n","def func_test(L = ['a', 'b'], S = 'ab'):\n"," L.append('c')\n"," S = S + 'c'\n"," return L, S\n","\n","# Without return, mutable argument changes affect outside\n","# But immutable argument changes do not\n","L = ['a', 'b']; S = 'ab'\n","func_test(L, S) \n","print('{0}, {1}'.format(L,S))\n","\n","# When argument values are not assigned, default value\n","# must be defined\n","L, S = func_test() \n","print('{0}, {1}'.format(L,S))\n","\n","# Default value of a mutable argument only used ONCE\n","L, S = func_test()\n","print('{0}, {1}'.format(L,S))"]},{"cell_type":"markdown","metadata":{},"source":["Let us unpack the above three lines of result returns when the same functions are called three times.\n","\n","1. When a function includes a list of arguments, it is allowed that the code also declare a default value when no value is provided when the function is called in the code. The first line of printed results indicates this case, when *L, S = func_test()* does not provide the argument values, and the default values of *L = ['a', 'b']* and *S = 'ab'* are used. \n","2. It may come as a surprise that while the same function is called the second time in the same fashion, the returned values of *L* and *S* are different from the first time. This is because an important rule defined in Python regarding the type of an input argument to be mutable or immutable:\n"," * When an argument type is immutable, then its default value will be reset to the one listed in the function definition. In the above example, *S = 'ab'* is immutable string type. Therefore, when its input value is not provided by the function call, the default value is always used.\n"," * When an argument type is mutable, then its default value will be set only once based on the value in the function definition. Subsequently, the default value of a mutable argument remains the same from the last time the function is called. In the above example, when the function is first called, the mutable argument *L* has changed its value to ['a', 'b', 'c']. Therefore, when the function is called the second time without explicit setting the argument value, the default value of *L* is the same value from the last function call. Adding another 'c' to this value will return the result ['a', 'b', 'c', 'c'].\n"," * The third line of printed result illustrates the situation that when a mutable argument is changed inside a function, the modified value is carried over to the outside of the function regardless if the value is part of the function output. However, when an immutable argument is modified inside a function, it is not carried over to change the variable value outside the function. This conclusion makes sense because when the function executes the statement *S = S + 'c'*, the assigned new string *S* is a local string object that has different memory address and ID than the string *S* of the same name outside the function. \n"," \n"," \n","In conclusion, when arguments are passed into a function, mutable variables share the same objects inside and outside the function, while immutable variables do not share the same objects. As a result, changes on immutable variables inside a function do not change the variables of the same names outside. Such immutable variables inside a function are called local variables.\n","\n","Contrast to local variables, Python also defines a keyword called *global* to define global variables. When a variable is declared as global, then Python will force all variables of the same name to share the same object and memory address. Consequently, changing the value of a global variable in one place will affect all the other places in the code when the same variable is used. Let us see the example below."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T20:06:30.826638Z","iopub.status.busy":"2021-06-25T20:06:30.826017Z","iopub.status.idle":"2021-06-25T20:06:30.837867Z","shell.execute_reply":"2021-06-25T20:06:30.836546Z","shell.execute_reply.started":"2021-06-25T20:06:30.826589Z"},"trusted":true},"outputs":[],"source":["S = 'ab'\n","\n","def func_test_global(L = ['a', 'b']):\n"," global S\n"," \n"," L.append('c')\n"," S = S + 'c'\n"," return L, S\n","\n","L, S = func_test_global() \n","print('{0}, {1}'.format(L,S))\n","print('id(S): ',id(S))\n","\n","L, S = func_test_global()\n","print('{0}, {1}'.format(L,S))\n","print('id(S): ',id(S))\n","\n","func_test_global(L)\n","print('{0}, {1}'.format(L,S))\n","print('id(S): ',id(S))"]},{"cell_type":"markdown","metadata":{},"source":["In the above example, we change the definition of the function to *func_test_global()* for variable *S* to be declared as global. When we now see the returned results, the value of the immutable variable *S* is carried over between outside and inside the function, as if the string type is a mutable variable type."]},{"cell_type":"markdown","metadata":{},"source":["# Define an insert sort function\n","\n","Previously, we have seen the use of several built-in sorting functions. Let us see a few examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T16:09:29.487926Z","iopub.status.busy":"2021-06-25T16:09:29.48762Z","iopub.status.idle":"2021-06-25T16:09:29.494786Z","shell.execute_reply":"2021-06-25T16:09:29.493856Z","shell.execute_reply.started":"2021-06-25T16:09:29.487899Z"},"trusted":true},"outputs":[],"source":["List = [7, 4, 3, 8, 5, 6, 1, 9, 2, 0]\n","List.sort()\n","print(List)\n","List.sort(reverse=True)\n","print(List)\n","\n","String = \"cdeab\"\n","sorted_result = sorted(String)\n","print(sorted_result)\n","new_String = ''.join(sorted_result)\n","print(new_String)"]},{"cell_type":"markdown","metadata":{},"source":["Next, we design a sorting function called *insert sort*:"]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2024-03-03T04:13:15.159516Z","iopub.status.busy":"2024-03-03T04:13:15.158949Z","iopub.status.idle":"2024-03-03T04:13:29.069685Z","shell.execute_reply":"2024-03-03T04:13:29.068514Z","shell.execute_reply.started":"2024-03-03T04:13:15.159479Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["*** Insert Sort ***\n","Elapsed Time: 13.869377613067627\n","[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]\n","*** Python Sort ***\n","Elapsed Time: 0.0016734600067138672\n","[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]\n"]}],"source":["import random\n","import time\n","\n","def insert_sort(input_list):\n"," ''' A custom function to sort number sequences using insert sort\n"," Parameters:\n"," Input: input_list - Expecting a list of numerical numbers\n","\n"," Output: input_list - sorted list\n"," '''\n"," if type(input_list)!=list:\n"," input_list = list(input_list)\n","\n"," for index in range(1, len(input_list)):\n","\n"," # Compare and sort elements one by one\n"," current = input_list[index]\n","\n"," # Verify the type of each element\n"," if type(current)!=int and type(current)!=float:\n"," current = float(current)\n","\n"," # Insert to previous sorted sub-list\n"," while index>0 and input_list[index-1]>current:\n"," # Insert iteratively until insert condition is False\n"," input_list[index] = input_list[index-1]\n"," input_list[index-1] = current\n"," index -=1\n"," \n"," return input_list\n","\n","# Generate a sufficiently long list for sorting\n","sample_count = 10000\n","random_input = random.sample(range(0, sample_count),sample_count)\n","\n","# ******** Method 1: Insert Sort ********\n","print('*** Insert Sort ***')\n","result = random_input.copy()\n","begin_time = time.time()\n","insert_sort(result)\n","\n","# tic-toc\n","elapsed_time = time.time() - begin_time\n","print('Elapsed Time: ', elapsed_time)\n","print(result[0:20])\n","\n","# ******** Method 2: Built-in Timsort ******\n","print('*** Python Sort ***')\n","result = random_input.copy()\n","begin_time = time.time()\n","result.sort()\n","\n","# tic-toc\n","elapsed_time = time.time() - begin_time\n","print('Elapsed Time: ', elapsed_time)\n","print(result[0:20])"]},{"cell_type":"markdown","metadata":{},"source":["Please refer to the lecture video for the important discussion about the difference in the time complexity between a user-defined insert sort and the built-in Python sort function."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* A custom-defined function can be declared by the keyword: def, followed by the function name, a list or input arguments within a pair of parentheses, and then a colon that indicates the function code block that follows.\n","* Input arguments may be mutable or immutable type. A mutable input argument shares the same memory address and value as the corresponding variable outside the function, while an immutable input argument merely creates a copy of the corresponding variable outside the function. As a result, any changes to a mutable input argument will change the variable outside the function, but changes to an immutable input argument will only affect itself inside the function.\n","* Variables inside a function can be passed to the outside by the command: return.\n","* Another way to pass variable with the same name and value to inside a function is by declaring a global variable. A global variable only has one instance both inside and outside the function.\n","* A custom-defined function can be imported from a .py file by the command: import."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Please code a function *calculation(arg_1, arg_2)*, which takes in two arguments and calculate the multiplication result and float division result of them and then returns a list-type value of both results.\n","\n","2. Please code an *AND()* boolean function, which will take in two input boolean arguments, and output its logic *and* result. Please correctly include the function docstring and argument type checking to verify the input variables are boolean type.\n","\n","3. Please code a function called shorten_string(). The function takes in one string-type argument, and then will remove its first character and last character and return the result. If the input string is shorter than length-2, then the function shall return an empty string. If the input argument is not a string type, the function shall also return an empty string. Hint: Please remember to check the variable type of the input argument.\n","\n","4. In the lecture, an insert sort algorithm with default ascending order is discussed. Please modify the code that allows the function to sort a list in either ascending order or descending order, by setting a second argument *reverse* to be True or False.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T06:18:24.648443Z","iopub.status.busy":"2021-05-28T06:18:24.648017Z","iopub.status.idle":"2021-05-28T06:18:24.665754Z","shell.execute_reply":"2021-05-28T06:18:24.664012Z","shell.execute_reply.started":"2021-05-28T06:18:24.648408Z"},"trusted":true},"outputs":[],"source":["result_1 = int('2020 year')\n","\n","int = 0\n","float = int(10.57)"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Please code a timer function called tic_toc(). The first time calling the function, it will be set in the TIC state, calling time.time() to save the current system clock time; The second time calling the function, it will then be set in the TOC state, returning the time difference between the current system clock time and the previously saved system clock time. After the TOC state return, the function will be reset to wait for the next TIC state function call. Hint: The saved system clock time and the function's state whether it is in the first tic state or the second toc state can be defined as global variables. \n","\n","2. Please code a circular_shift() function, which takes in two arguments: a string called *input_string* and an integer called *direction*. When *direction = -1*, the function will return a string that circularly shifts *input_string* elements to the left by one position. When *direction = 1*, the function will return a string that circularly shifts *input_string* elements to the right by one position. Hint: In here, circular shift means whenever an element is shifted outside the range of the existing string, it will be added back to the string from the opposite side such that the total length and all elements remain the same after circular shift."]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30042,"isGpuEnabled":false,"isInternetEnabled":false,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.6"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 6: Functions**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes."]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","In our course so far, we have discussed three types of functions. A function is a block of code that is packed together that is given a function name and possibly a list of input arguments and and output results. \n","\n","* Built-in stand-alone functions: Examples include print(), type(), int(), and range().\n","* Imported functions: Examples include math.floor(), time.time(), and random.randint().\n","* Methods in classes: Examples include list.reverse(), list.append(), and string.lower().\n"," \n","In this lecture, we will learn how to code user-defined Python functions.\n","\n","# Define Functions"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T17:11:43.653389Z","iopub.status.busy":"2021-06-25T17:11:43.653016Z","iopub.status.idle":"2021-06-25T17:11:43.659763Z","shell.execute_reply":"2021-06-25T17:11:43.659119Z","shell.execute_reply.started":"2021-06-25T17:11:43.653358Z"},"trusted":true},"outputs":[],"source":["def print_hello_world():\n"," '''The function prints Hello World! string.'''\n","\n"," print(\"Hello World!\")\n","\n","def print_string(s):\n"," \"\"\"The function prints an input string.\n"," Input:\n"," s: a string\n"," Output:\n"," n/a\n"," \"\"\"\n","\n"," print(s)\n"," \n","print_hello_world()\n","print_string('Hello New World!')\n","print(print_string.__doc__)\n","\n","# Test function return value when return value is not provided\n","\n","print(print_hello_world()) # Return is None of NoneType"]},{"cell_type":"markdown","metadata":{},"source":["The above sample code defines two functions: *print_hello_world()* and *print_string()*. To define a function, the code shall start with a keyword *def*, followed by the name of the function provided by the programmer. \n","\n","A function also may or may not have a list of input arguments. In the first function, since the purpose of the function is always to print \"Hello World!\", no additional input is needed. The use of a pair of empty parentheses indicates that the function has no input argument.\n","\n","In the second example, *print_string()* codes a print function, but its function code does not specify what is the message to be printed. Instead, the function uses the input argument *s*. When the function is called, the function call must specify the input argument value. This value then will be assigned to variable *s*.\n","\n","There is one more common component in both *print_hello_world()* and *print_string()*, that is the inclusion of a comment section right next to the definition of function name and its input arguments, namely, right after the colon mark. The comment section is required to use the triple quotation marks, and they can be either single or double quotation marks. There is a name for the comment created as such, called *docstring*. \n","\n","Different from other types of code comments, the use of docstrings is strongly recommended. Developers can use docstrings to document the main design goal and logic of the function and a list of input/output arguments. Docstrings help third-party users to better interface with the functions without going through the detailed coding implementation.\n","\n","The content of docstrings will be also assigned as a built-in attribute of the functions or methods that include docstrings, called *.__doc__*. In the above example, the function's docstring can be printed out by: *print(print_string.__doc__)*\n","\n","To emphasize its generality, built-in Python functions and methods also include docstrings extensively. For example, below let us review the docstring of Python's own *print()* function:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T17:09:25.217804Z","iopub.status.busy":"2021-06-25T17:09:25.217461Z","iopub.status.idle":"2021-06-25T17:09:25.221886Z","shell.execute_reply":"2021-06-25T17:09:25.221225Z","shell.execute_reply.started":"2021-06-25T17:09:25.217771Z"},"trusted":true},"outputs":[],"source":["print(print.__doc__)"]},{"cell_type":"markdown","metadata":{},"source":["# Function Arguments\n","\n","In the previous example, we have seen a user-defined function may include a list of arguments. Let us consider the two distinct cases when the function arguments may be of mutable type or of immutable type."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T15:37:45.378539Z","iopub.status.busy":"2021-06-25T15:37:45.378153Z","iopub.status.idle":"2021-06-25T15:37:45.385628Z","shell.execute_reply":"2021-06-25T15:37:45.384847Z","shell.execute_reply.started":"2021-06-25T15:37:45.378495Z"},"trusted":true},"outputs":[],"source":["# Sample code to use mutable and immutable function arguments\n","def func_test(L = ['a', 'b'], S = 'ab'):\n"," L.append('c')\n"," S = S + 'c'\n"," return L, S\n","\n","# Without return, mutable argument changes affect outside\n","# But immutable argument changes do not\n","L = ['a', 'b']; S = 'ab'\n","func_test(L, S) \n","print('{0}, {1}'.format(L,S))\n","\n","# When argument values are not assigned, default value\n","# must be defined\n","L, S = func_test() \n","print('{0}, {1}'.format(L,S))\n","\n","# Default value of a mutable argument only used ONCE\n","L, S = func_test()\n","print('{0}, {1}'.format(L,S))"]},{"cell_type":"markdown","metadata":{},"source":["Let us unpack the above three lines of result returns when the same functions are called three times.\n","\n","1. When a function includes a list of arguments, it is allowed that the code also declare a default value when no value is provided when the function is called in the code. The first line of printed results indicates this case, when *L, S = func_test()* does not provide the argument values, and the default values of *L = ['a', 'b']* and *S = 'ab'* are used. \n","2. It may come as a surprise that while the same function is called the second time in the same fashion, the returned values of *L* and *S* are different from the first time. This is because an important rule defined in Python regarding the type of an input argument to be mutable or immutable:\n"," * When an argument type is immutable, then its default value will be reset to the one listed in the function definition. In the above example, *S = 'ab'* is immutable string type. Therefore, when its input value is not provided by the function call, the default value is always used.\n"," * When an argument type is mutable, then its default value will be set only once based on the value in the function definition. Subsequently, the default value of a mutable argument remains the same from the last time the function is called. In the above example, when the function is first called, the mutable argument *L* has changed its value to ['a', 'b', 'c']. Therefore, when the function is called the second time without explicit setting the argument value, the default value of *L* is the same value from the last function call. Adding another 'c' to this value will return the result ['a', 'b', 'c', 'c'].\n"," * The third line of printed result illustrates the situation that when a mutable argument is changed inside a function, the modified value is carried over to the outside of the function regardless if the value is part of the function output. However, when an immutable argument is modified inside a function, it is not carried over to change the variable value outside the function. This conclusion makes sense because when the function executes the statement *S = S + 'c'*, the assigned new string *S* is a local string object that has different memory address and ID than the string *S* of the same name outside the function. \n"," \n"," \n","In conclusion, when arguments are passed into a function, mutable variables share the same objects inside and outside the function, while immutable variables do not share the same objects. As a result, changes on immutable variables inside a function do not change the variables of the same names outside. Such immutable variables inside a function are called local variables.\n","\n","Contrast to local variables, Python also defines a keyword called *global* to define global variables. When a variable is declared as global, then Python will force all variables of the same name to share the same object and memory address. Consequently, changing the value of a global variable in one place will affect all the other places in the code when the same variable is used. Let us see the example below."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T20:06:30.826638Z","iopub.status.busy":"2021-06-25T20:06:30.826017Z","iopub.status.idle":"2021-06-25T20:06:30.837867Z","shell.execute_reply":"2021-06-25T20:06:30.836546Z","shell.execute_reply.started":"2021-06-25T20:06:30.826589Z"},"trusted":true},"outputs":[],"source":["S = 'ab'\n","\n","def func_test_global(L = ['a', 'b']):\n"," global S\n"," \n"," L.append('c')\n"," S = S + 'c'\n"," return L, S\n","\n","L, S = func_test_global() \n","print('{0}, {1}'.format(L,S))\n","print('id(S): ',id(S))\n","\n","L, S = func_test_global()\n","print('{0}, {1}'.format(L,S))\n","print('id(S): ',id(S))\n","\n","func_test_global(L)\n","print('{0}, {1}'.format(L,S))\n","print('id(S): ',id(S))"]},{"cell_type":"markdown","metadata":{},"source":["In the above example, we change the definition of the function to *func_test_global()* for variable *S* to be declared as global. When we now see the returned results, the value of the immutable variable *S* is carried over between outside and inside the function, as if the string type is a mutable variable type."]},{"cell_type":"markdown","metadata":{},"source":["# Define an insert sort function\n","\n","Previously, we have seen the use of several built-in sorting functions. Let us see a few examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T16:09:29.487926Z","iopub.status.busy":"2021-06-25T16:09:29.48762Z","iopub.status.idle":"2021-06-25T16:09:29.494786Z","shell.execute_reply":"2021-06-25T16:09:29.493856Z","shell.execute_reply.started":"2021-06-25T16:09:29.487899Z"},"trusted":true},"outputs":[],"source":["List = [7, 4, 3, 8, 5, 6, 1, 9, 2, 0]\n","List.sort()\n","print(List)\n","List.sort(reverse=True)\n","print(List)\n","\n","String = \"cdeab\"\n","sorted_result = sorted(String)\n","print(sorted_result)\n","new_String = ''.join(sorted_result)\n","print(new_String)"]},{"cell_type":"markdown","metadata":{},"source":["Next, we design a sorting function called *insert sort*:"]},{"cell_type":"code","execution_count":55,"metadata":{"execution":{"iopub.execute_input":"2024-03-03T04:13:15.159516Z","iopub.status.busy":"2024-03-03T04:13:15.158949Z","iopub.status.idle":"2024-03-03T04:13:29.069685Z","shell.execute_reply":"2024-03-03T04:13:29.068514Z","shell.execute_reply.started":"2024-03-03T04:13:15.159479Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["*** Insert Sort ***\n"]},{"ename":"TypeError","evalue":"'list' object is not callable","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn[55], line 40\u001b[0m\n\u001b[1;32m 38\u001b[0m result \u001b[38;5;241m=\u001b[39m random_input\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 39\u001b[0m begin_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[0;32m---> 40\u001b[0m \u001b[43minsert_sort\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresult\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;66;03m# tic-toc\u001b[39;00m\n\u001b[1;32m 43\u001b[0m elapsed_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime() \u001b[38;5;241m-\u001b[39m begin_time\n","Cell \u001b[0;32mIn[55], line 12\u001b[0m, in \u001b[0;36minsert_sort\u001b[0;34m(input_list)\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m''' A custom function to sort number sequences using insert sort\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;124;03mParameters:\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;124;03mInput: input_list - Expecting a list of numerical numbers\u001b[39;00m\n\u001b[1;32m 8\u001b[0m \n\u001b[1;32m 9\u001b[0m \u001b[38;5;124;03mOutput: input_list - sorted list\u001b[39;00m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;124;03m'''\u001b[39;00m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mtype\u001b[39m(input_list)\u001b[38;5;241m!=\u001b[39m\u001b[38;5;28mlist\u001b[39m:\n\u001b[0;32m---> 12\u001b[0m input_list \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43minput_list\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m index \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;28mlen\u001b[39m(input_list)):\n\u001b[1;32m 15\u001b[0m \n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m# Compare and sort elements one by one\u001b[39;00m\n\u001b[1;32m 17\u001b[0m current \u001b[38;5;241m=\u001b[39m input_list[index]\n","\u001b[0;31mTypeError\u001b[0m: 'list' object is not callable"]}],"source":["import random\n","import time\n","\n","def insert_sort(input_list):\n"," ''' A custom function to sort number sequences using insert sort\n"," Parameters:\n"," Input: input_list - Expecting a list of numerical numbers\n","\n"," Output: input_list - sorted list\n"," '''\n"," if type(input_list)!=list:\n"," input_list = list(input_list)\n","\n"," for index in range(1, len(input_list)):\n","\n"," # Compare and sort elements one by one\n"," current = input_list[index]\n","\n"," # Verify the type of each element\n"," if type(current)!=int and type(current)!=float:\n"," current = float(current)\n","\n"," # Insert to previous sorted sub-list\n"," while index>0 and input_list[index-1]>current:\n"," # Insert iteratively until insert condition is False\n"," input_list[index] = input_list[index-1]\n"," input_list[index-1] = current\n"," index -=1\n"," \n"," return input_list\n","\n","# Generate a sufficiently long list for sorting\n","sample_count = 10000\n","random_input = random.sample(range(0, sample_count),sample_count)\n","\n","# ******** Method 1: Insert Sort ********\n","print('*** Insert Sort ***')\n","result = random_input.copy()\n","begin_time = time.time()\n","insert_sort(result)\n","\n","# tic-toc\n","elapsed_time = time.time() - begin_time\n","print('Elapsed Time: ', elapsed_time)\n","print(result[0:20])\n","\n","# ******** Method 2: Built-in Timsort ******\n","print('*** Python Sort ***')\n","result = random_input.copy()\n","begin_time = time.time()\n","result.sort()\n","\n","# tic-toc\n","elapsed_time = time.time() - begin_time\n","print('Elapsed Time: ', elapsed_time)\n","print(result[0:20])"]},{"cell_type":"markdown","metadata":{},"source":["Please refer to the lecture video for the important discussion about the difference in the time complexity between a user-defined insert sort and the built-in Python sort function."]},{"cell_type":"markdown","metadata":{},"source":["# Summary\n","\n","* A custom-defined function can be declared by the keyword: def, followed by the function name, a list or input arguments within a pair of parentheses, and then a colon that indicates the function code block that follows.\n","* Input arguments may be mutable or immutable type. A mutable input argument shares the same memory address and value as the corresponding variable outside the function, while an immutable input argument merely creates a copy of the corresponding variable outside the function. As a result, any changes to a mutable input argument will change the variable outside the function, but changes to an immutable input argument will only affect itself inside the function.\n","* Variables inside a function can be passed to the outside by the command: return.\n","* Another way to pass variable with the same name and value to inside a function is by declaring a global variable. A global variable only has one instance both inside and outside the function.\n","* A custom-defined function can be imported from a .py file by the command: import."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Please code a function *calculation(arg_1, arg_2)*, which takes in two arguments and calculate the multiplication result and float division result of them and then returns a list-type value of both results.\n","\n","2. Please code an *AND()* boolean function, which will take in two input boolean arguments, and output its logic *and* result. Please correctly include the function docstring and argument type checking to verify the input variables are boolean type.\n","\n","3. Please code a function called shorten_string(). The function takes in one string-type argument, and then will remove its first character and last character and return the result. If the input string is shorter than length-2, then the function shall return an empty string. If the input argument is not a string type, the function shall also return an empty string. Hint: Please remember to check the variable type of the input argument.\n","\n","4. In the lecture, an insert sort algorithm with default ascending order is discussed. Please modify the code that allows the function to sort a list in either ascending order or descending order, by setting a second argument *reverse* to be True or False.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[12, 3.0]\n"]}],"source":["\n","def calculation(arg_1,arg_2):\n"," multresult = int(arg_1) * int(arg_2)\n"," floatresult = int(arg_1) / int(arg_2)\n"," final_list = [multresult, floatresult]\n"," print(final_list)\n","calculation(input(\"num1\"), input(\"num2\"))\n","\n"]},{"cell_type":"code","execution_count":41,"metadata":{},"outputs":[{"data":{"text/plain":["False"]},"execution_count":41,"metadata":{},"output_type":"execute_result"}],"source":["\n","def AND(a,b):\n"," '''docstring\n"," returns true if both true, otherwise false\n"," '''\n"," if a == \"t\" and b == a:\n"," return True\n"," else:\n"," return False\n","\n","\n","inp = input(\"t/f\"),input(\"t/f\")\n","AND(inp[0],inp[1])\n"," "]},{"cell_type":"code","execution_count":45,"metadata":{},"outputs":[{"data":{"text/plain":["' few word'"]},"execution_count":45,"metadata":{},"output_type":"execute_result"}],"source":["string = 'a few words'\n","\n","def shorten_string(a):\n"," shortstring=''\n"," if len(a) <= 2 or type(a) != str:\n"," return shortstring\n"," else:\n"," shortstring = list(string)\n"," shortstring.pop(0)\n"," shortstring.pop(-1)\n"," return \"\".join(shortstring)\n","shorten_string(string)\n"," \n"," "]},{"cell_type":"code","execution_count":62,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[2340, 234.0, 88.0, 65.0, 37.0, 34.0, 1.0, 1, 0]\n"]}],"source":["import random\n","import time\n","\n","\n","def insert_sort(input_list, reverse):\n"," ''' A custom function to sort number sequences using insert sort\n"," Parameters:\n"," Input: input_list - Expecting a list of numerical numbers\n","\n"," Output: input_list - sorted list\n"," '''\n"," if type(input_list)!=list:\n"," input_list = list(input_list)\n"," for index in range(1, len(input_list)):\n"," # Compare and sort elements one by one\n"," current = input_list[index]\n","\n"," # Verify the type of each element\n"," if type(current)!=int and type(current)!=float:\n"," current = float(current)\n","\n"," # Insert to previous sorted sub-list\n"," while index>0 and input_list[index-1]>current:\n"," # Insert iteratively until insert condition is False\n"," input_list[index] = input_list[index-1]\n"," input_list[index-1] = current\n"," index -=1\n"," if reverse == True:\n"," input_list.reverse()\n"," \n"," print(input_list)\n","# Generate a sufficiently long list for sorting\n","insert_sort([0,1,2340,65,234,1,34,37,88], True)"]},{"cell_type":"code","execution_count":24,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T06:18:24.648443Z","iopub.status.busy":"2021-05-28T06:18:24.648017Z","iopub.status.idle":"2021-05-28T06:18:24.665754Z","shell.execute_reply":"2021-05-28T06:18:24.664012Z","shell.execute_reply.started":"2021-05-28T06:18:24.648408Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","\n","\n"]}],"source":["result_1 = str(\"2020 year\")\n","\n","int = 0\n","float = 10.57\n","print(type(float))\n","print(type(int))\n","print(type(result_1))"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Please code a timer function called tic_toc(). The first time calling the function, it will be set in the TIC state, calling time.time() to save the current system clock time; The second time calling the function, it will then be set in the TOC state, returning the time difference between the current system clock time and the previously saved system clock time. After the TOC state return, the function will be reset to wait for the next TIC state function call. Hint: The saved system clock time and the function's state whether it is in the first tic state or the second toc state can be defined as global variables. \n","\n","2. Please code a circular_shift() function, which takes in two arguments: a string called *input_string* and an integer called *direction*. When *direction = -1*, the function will return a string that circularly shifts *input_string* elements to the left by one position. When *direction = 1*, the function will return a string that circularly shifts *input_string* elements to the right by one position. Hint: In here, circular shift means whenever an element is shifted outside the range of the existing string, it will be added back to the string from the opposite side such that the total length and all elements remain the same after circular shift."]},{"cell_type":"markdown","metadata":{},"source":[]},{"cell_type":"code","execution_count":117,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["None\n"]}],"source":["import time\n","tic = 1\n","toc = 0\n","state = None\n","current_time = toc\n","def tic_toc():\n"," global current_time\n"," global state\n"," #flips between tic and toc\n"," if state == tic:\n"," state = toc\n"," time_dif = time.time() - current_time\n"," return time_dif\n"," else:\n"," state = tic\n"," current_time = time.time()\n","\n","tic_toc()\n","print(tic_toc())\n"]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["23451\n"]}],"source":["def circular_shift(input_string,direction):\n"," string = list(input_string)\n"," t = string[:-direction % len(string)]\n"," t2 = string[-direction % len(string):]\n"," return \"\".join(t2+t)\n","s = input()\n","d = int(input())\n","print(circular_shift(s,d))"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30042,"isGpuEnabled":false,"isInternetEnabled":false,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-7-tuples-and-dictionaries.ipynb b/Part One/1-7-tuples-and-dictionaries.ipynb index 75f4394..5611783 100644 --- a/Part One/1-7-tuples-and-dictionaries.ipynb +++ b/Part One/1-7-tuples-and-dictionaries.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 7: Tuples and Dictionaries**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **tuple**: Keyword for the tuple data type in Python. Tuple is an immutable type.\n","* **dict**: Keyword for the dictionary data type in Python. Dictionary is a mutable type. Each element in a dictionary is a (key, value) pair.\n","* **Histogram**: A data structure that represents a list of unique elements and their frequency of occurances within some data."]},{"cell_type":"markdown","metadata":{},"source":["# Tuples\n","\n","A tuple variable stores an ordered sequence of values. The following examples show the three ways a tuple object can be assigned:\n"," 1. Using a pair of parentheses: t = ('A', 'B')\n"," 2. A sequence of values separated by commas without the parentheses: t = 'a', 'b', 'c', 'd', 'e'\n"," 3. Using tuple() function: t = tuple('abcde')"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T09:07:42.457852Z","iopub.status.busy":"2021-06-26T09:07:42.456626Z","iopub.status.idle":"2021-06-26T09:07:42.468893Z","shell.execute_reply":"2021-06-26T09:07:42.467966Z","shell.execute_reply.started":"2021-06-26T09:07:42.457801Z"},"trusted":true},"outputs":[],"source":["t = 'a', 'b', 'c', 'd', 'e'\n","print(t == tuple('abcde') )\n","\n","t = ('A', 'B') + t[2:]\n","print(t)\n","\n","print(() == tuple())"]},{"cell_type":"markdown","metadata":{},"source":["In many ways, tuples are similar to lists in Python. In the above example, we see that elements in a tuple can be addressed using square brackets just like in a list. Concatenating two tuples into a new tuple variable is denoted using the \"+\" operator. In the last example, an empty tuple is denoted using *()* or *tuple()*.\n","\n","A tuple may contain just one element. However, the way to declare a single-element tuple must be different from the way to declare a single variable. See the examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T09:09:02.34211Z","iopub.status.busy":"2021-06-26T09:09:02.341229Z","iopub.status.idle":"2021-06-26T09:09:02.351823Z","shell.execute_reply":"2021-06-26T09:09:02.350894Z","shell.execute_reply.started":"2021-06-26T09:09:02.342069Z"},"trusted":true},"outputs":[],"source":["t = 'a', # Single-element tuple\n","s = ('a') # a string\n","print(type(t), type(s))\n","\n","t = 0, # Single-element tuple\n","i = (0) # an integer\n","print(type(t), type(i))"]},{"cell_type":"markdown","metadata":{},"source":["Different from lists, however, tuples are immutable type variables. Once created, tuple elements cannot be changed without forcing Python to create a new object. The following statement will return runtime error:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["t = 'a', 'b'\n","t[1] = 'c'"]},{"cell_type":"markdown","metadata":{},"source":["However, if tuple elements are themselves mutable, then the values of the elements can be changed without changing the tuple object itself. See the following examples:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T09:11:38.945441Z","iopub.status.busy":"2021-06-26T09:11:38.945046Z","iopub.status.idle":"2021-06-26T09:11:38.953129Z","shell.execute_reply":"2021-06-26T09:11:38.952125Z","shell.execute_reply.started":"2021-06-26T09:11:38.945404Z"},"trusted":true},"outputs":[],"source":["# Negative example: when the elements are not mutable\n","string = 'A'; number = 1\n","t = string, number\n","print('Initial value: ', t)\n","number = 2\n","print('Values are immutable: ', t)\n","\n","# Positive example: when the elements are mutable\n","l = list('abc')\n","t = l, l\n","print('Initial value: ', t)\n","l[2] = 'a'\n","print('Mutable elements: ', t)"]},{"cell_type":"markdown","metadata":{},"source":["In Python, a sequence of values can be compared to another sequence. The comparison is performed from left to right element-wise, with two exceptions:\n"," 1. Circuit breaker: When comparing \"<\" or \">\" relationships, the comparison will return True or False when the first non-identical position satisfies either \"<\" or \">\" relationships, and will disregard any possible situation after the position.\n"," 2. Element-wise comparison must be of the same type: When comparing two elements at the same sequence position, they must have the same type. Otherwise Python will return \"TypeError\"."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["# String comparison with circuit breaker\n","print('abc'>'a')\n","\n","# Tuple comparison with circuit breaker\n","print( (1, 2, 'c') > (1, 2))\n","print( (1, 2, 'c') > (1, 3, 3))\n","\n","# List comparison\n","print([1, 2, 'c'] > [1, 2, 'a'])\n","print([1, 2, 'c'] > [1, 2, 3])"]},{"cell_type":"markdown","metadata":{},"source":["Another scenario where tuples are used is in defining input and output values of functions. Let us see some examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-27T10:15:42.352307Z","iopub.status.busy":"2021-06-27T10:15:42.351928Z","iopub.status.idle":"2021-06-27T10:15:42.359526Z","shell.execute_reply":"2021-06-27T10:15:42.358292Z","shell.execute_reply.started":"2021-06-27T10:15:42.352258Z"},"trusted":true},"outputs":[],"source":["email = 'allenyang@berkeley.edu'\n","name, address = email.split('@') # return of the string.split() method is a tuple\n","print(name, address)\n","\n","poem = 'Roses are red, Violets are blue, Sugar is sweet'\n","a, b = poem.split(',', 1)\n","print(a, b)\n","\n","a, b, c = poem.split(',')\n","print(c)"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, a built-in method of string type *split()* will return a tuple. For example, if we split a string of an email address using the pattern \"@\", then the substring before \"@\" will be assigned to the first element of the tuple *name* and the substring after \"@\" will be assigned to the second element \"address\". In the second example, *split()* may return a tuple of multiple elements, if the split pattern appears in multiple locations of the string. \n","\n","Tuples can be used to hold return values from a function. They can also be used to hold input argument values of variable length. Let us see another simple example below:"]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2022-07-30T20:58:38.382747Z","iopub.status.busy":"2022-07-30T20:58:38.382339Z","iopub.status.idle":"2022-07-30T20:58:38.392033Z","shell.execute_reply":"2022-07-30T20:58:38.390298Z","shell.execute_reply.started":"2022-07-30T20:58:38.382708Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["3\n","4\n","Input length: 1\n","args = (1,)\n","1\n"]}],"source":["print(max(2, 3))\n","print(max(2, 3, 4))\n","\n","def my_max(*args):\n"," print('Input length: ', len(args))\n"," print('args = ', args)\n"," return(max(args))\n","\n","print(my_max(1))"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we see that some Python functions accept input arguments of variable length, such as *max()* and *print()*. In addition, using tuples, we can define our own functions that accept arguments of variable length. In the definition of *my_max()*, we use a reserved symbol \"*\" to indicate that args should be treated as a tuple to hold multiple input values of variable length. In Python, the \"*\" symbol used in this scenario is called the **packing operator**."]},{"cell_type":"markdown","metadata":{},"source":["# Dictionaries\n","\n","Dictionary can be viewed as a generalization of the list type. In the list type, each element is indexed by an unique integer in ascending order. In dictionaries, each element is a **(key, value)** pair. Furthermore, the value of a dictionary entry will be addressed by its corresponding unique key. \n","\n","Let us see a few examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-27T10:58:35.412219Z","iopub.status.busy":"2021-06-27T10:58:35.41183Z","iopub.status.idle":"2021-06-27T10:58:35.419596Z","shell.execute_reply":"2021-06-27T10:58:35.418606Z","shell.execute_reply.started":"2021-06-27T10:58:35.412188Z"},"trusted":true},"outputs":[],"source":["D = {1: 'one', 2: 'two', 3: 'three'}\n","print(len(D))\n","print(D[2])\n","\n","English_to_Chinese={} # Define an empty dictionary\n","English_to_Chinese['one'] = '一'\n","English_to_Chinese['two'] = '二'\n","English_to_Chinese['three'] = '三'\n","\n","del(English_to_Chinese['two'])\n","print(English_to_Chinese)"]},{"cell_type":"markdown","metadata":{},"source":["In the first example above, the dictionary *D* has three entries, i.e., first entry has the (key, value) pair as (1, 'one), etc. Retrieving the entry value corresponding to the key value of 2 is by *D[2]*.\n","\n","The second example demonstrates more powerful ways to retrieve a dictionary's entry values. The key can be other variable types such as strings. We can create a dictionary for translation purposes, where a unique English word is used as the key, and its corresponding entry value is its translation in another language such as Chinese. \n","\n","In here, we should note that any immutable type value can be assigned to be a key. However, not all variable type can be used as a key value. Let us consider the counterexample below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["English_to_Chinese={} \n","English_to_Chinese[[1, 2, 3]] = 'variable'"]},{"cell_type":"markdown","metadata":{},"source":["If you run the above code, Python will return a runtime error: \"TypeError: unhashable type: 'list'\". It shows list type variables cannot be used as valid keys. The concept of **hashable** mentioned in the error message will be discussed in more detail in the next class. \n","\n","One of the widely used applications for dictionaries is the construction of histograms. A histogram is a representation of the frequency of distinct data values. A histogram can be conveniently stored in a dictionary:\n","\n"," * Key: distinct data values\n"," * Value: occurrence frequency (absolute count or relative percentage)\n"," \n","Let us see the sample code below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T23:47:20.030401Z","iopub.status.busy":"2021-06-25T23:47:20.030046Z","iopub.status.idle":"2021-06-25T23:47:20.045078Z","shell.execute_reply":"2021-06-25T23:47:20.044023Z","shell.execute_reply.started":"2021-06-25T23:47:20.030371Z"},"trusted":true},"outputs":[],"source":["# Build a character histogram\n","\n","histogram = dict()\n","text = 'We can know only that we know nothing. \\\n"," And that is the highest degree of human wisdom.' # From War and Peace\n","\n","for c in text:\n"," if c.isalpha(): # Test alphabet property\n"," c = c.lower() # Identify uppercase and lowercase\n"," if c in histogram:\n"," histogram[c] += 1\n"," else:\n"," histogram[c] = 1\n","\n","for key in histogram:\n"," print(key, end = ' ')\n","print()\n","for key in histogram:\n"," print(histogram[key], end = ' ')"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, a *for* loop enumerates all the characters in the text variable. The goal is to calculate the occurrence count of distinct English letters. The histogram only calculates valid alphabets and also ignores the difference between uppercase and lowercase. Therefore, the algorithm used *c.isalpha()* and *c.lower()* functions. \n","\n","The expression *c in histogram* uses the *in* operator to search if the value of *c* is already a key in the dictionary. If yes, then the algorithm will add the occurrence plus one; otherwise, the dictionary will create a new (key, value) pair with the new value assigned to the initial value of 1.\n","\n","The final output of the alphabet histogram from the *text* quote indicates there are five occurrences of letter \"w\" or \"W\", seven occurrences of letter \"e\" or \"E\", etc.\n","\n","Next, we consider a problem of inverting a dictionary (key, value) pair. That is, creating a new dictionary whereby the existing dictionary's values are keys in the new dictionary, and vice versa. \n","\n","Let us first see the solution code:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T08:35:21.923474Z","iopub.status.busy":"2021-06-26T08:35:21.92287Z","iopub.status.idle":"2021-06-26T08:35:21.940109Z","shell.execute_reply":"2021-06-26T08:35:21.938759Z","shell.execute_reply.started":"2021-06-26T08:35:21.923436Z"},"trusted":true},"outputs":[],"source":["# Build a histogram dictionary\n","histogram = dict()\n","text = 'We can know only that we know nothing. And that is the highest degree of human wisdom'\n","\n","for c in text:\n"," if c.isalpha():\n"," c = c.lower()\n"," if c in histogram:\n"," histogram[c] += 1\n"," else:\n"," histogram[c] = 1\n","\n","def invert_dictionary(input_dictionary):\n"," '''\n"," Invert the mapping between keys and values of a dictionary\n"," Parameters\n"," Input: input_dictionary - a dict type\n"," Output: result - dict result\n"," '''\n","\n"," if type(input_dictionary)!=dict:\n"," raise TypeError('Argument must be dict type.')\n","\n"," result = dict()\n"," for key in input_dictionary:\n"," value = input_dictionary[key]\n"," if value not in result:\n"," result[value] = [key]\n"," else:\n"," result[value].append(key)\n","\n"," return result\n","\n","# print out the histogram\n","for key in histogram:\n"," print(key, end = ' ')\n","print()\n","for key in histogram:\n"," print(histogram[key], end = ' ')\n","print()\n","# Call invert_dictionary\n","print(\"Invert the histogram ...\")\n","inverse = invert_dictionary(histogram)\n","print(inverse)\n"]},{"cell_type":"markdown","metadata":{},"source":["The function *invert_dictionary() creates and returns a new dictionary, whose keys are the value entries of the input dictionary and the values are the keys of the input dictionary. In line 25, the *for* loop enumerates all the unique entries of *input_dictionary* with their key value assigned to the variable *key*. Then the corresponding *value* entry is retrieved in line 26. In lines 27 to 30, the *result* dictionary accepts *value* as its key value.\n","\n","Specifically, since *value* is retrieved from *input_dictionary*, it may not be unique. In the above case, multiple alphabets may have the same occurrence. Therefore, those keys from *input_dictionary* will need to be organized into a list corresponding to using their occurrence number as the key in the new dictionary.\n","\n","Python supports very efficient search to determine if a key is in a dictionary or not using the operator *in*, such as in line 27 we have: *if value not in result:*\n","\n","To demonstrate how efficient is the key search implemented in Python, let us evaluate another sample code below:"]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2023-06-29T17:51:04.351670Z","iopub.status.busy":"2023-06-29T17:51:04.351398Z","iopub.status.idle":"2023-06-29T17:51:11.287255Z","shell.execute_reply":"2023-06-29T17:51:11.286626Z","shell.execute_reply.started":"2023-06-29T17:51:04.351644Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Reading text file from url ... done\n","Generating 1M random tickers ... done\n","Searching a size-10 dictionary 1M times takes: 0.18244504928588867s\n","Searching a size-1000 dictionary 1M times takes: 0.14960026741027832s\n","Searching a size-5203 dictionary 1M times takes: 0.1539783477783203s\n"]}],"source":["# IMPORTANT: to run this script, you need to enable Internet in Kaggle. Default Kaggle kernels do not have Internet access\n","# Enabling Internet is on the right side of the Settings menu. \n","# If you run this Jupyter Notebook on your own computer, then make sure your computer has Internet access\n","\n","from urllib.request import urlopen\n","import random\n","import time\n","\n","Dictionary10 = dict()\n","Dictionary1000 = dict()\n","DictionaryTotal = dict()\n","file_url = \"http://www.nasdaqtrader.com/dynamic/symdir/nasdaqlisted.txt\" \n","\n","# Put IO functions in try -- finally\n","print('Reading text file from url ... ', end = ' ')\n","file = urlopen(file_url)\n","\n","# Create three dictionaries of different lengths\n","count = 0\n","for line in file:\n"," decoded_line = line.decode(\"utf-8\")\n"," count += 1\n"," ticker, info = decoded_line.split('|',1)\n"," if count<=10:\n"," Dictionary10[ticker] = info\n"," if count<=1000:\n"," Dictionary1000[ticker] = info\n"," DictionaryTotal[ticker] = info\n","\n","print('done')\n","\n","# Create 1M queries to time the performance of three dictionaries\n","print('Generating 1M random tickers ... ', end = ' ')\n","trial_total = 1000000\n","TICKER_LETTER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n","search_list = []\n","for index in range(trial_total):\n"," new_random_ticker = ''\n"," for letter_index in range(random.randint(1,5)):\n"," new_random_ticker = new_random_ticker + (random.choice(TICKER_LETTER))\n","\n"," search_list.append(new_random_ticker)\n","print('done')\n","\n","# Test speed for query Dictionary10\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Dictionary10\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(Dictionary10),\n"," elapsed_time))\n","\n","# Test speed for query Dictionary1000\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Dictionary1000\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(Dictionary1000),\n"," elapsed_time))\n","\n","# Test speed for query DictionaryTotal\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in DictionaryTotal\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(DictionaryTotal),\n"," elapsed_time))"]},{"cell_type":"markdown","metadata":{},"source":["In this sample code, we demonstrated using a new Python function *urlopen()* from the imported module *urllib.request* to retrieve a text file from the Internet. The file \"nasdaqlisted.txt\" is a public file that lists all the companies currently listed on the United States Nasdaq stock exchange. Naturally, for any public company, it has a unique ticker number for trading, such as AAPL for Apple and GOOGL for Google's parent company Alphabet Inc.\n","\n","In the code, we break down each line in the text file to retrieve its ticker string as the key and the rest of the string as the value for one dictionary entry. For comparison purposes, we constructed three dictionaries of different sizes, from 10 entries to 1000 entries to the total 4023 entries.\n","\n","Then we will randomly query 1 million times to check if a random ticker string exists as a key in the three dictionaries. We observe the final results for their total time complexity. We see that regardless of the size of the dictionary, the random 1 million key query roughly costs the same amount of time, which is somewhat counter-intuitive. \n","\n","The constant-time key search algorithm in Python is related to the concept of \"hashable\" that we have mentioned above. We will explain in more details in the next lecture. For now, the good news is regardless of the size of a dictionary, the search for its keys seems to be quite efficient."]},{"cell_type":"markdown","metadata":{},"source":["Finally, the sample code below demonstrates how to convert the tuple type and dictionary type variables in Python. The code uses the cast functions *list()* and *dict()*. Grouping two lists of the same length into tuple pairs is by the function *zip()*."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2022-04-30T23:09:30.509730Z","iopub.status.busy":"2022-04-30T23:09:30.509071Z","iopub.status.idle":"2022-04-30T23:09:30.520548Z","shell.execute_reply":"2022-04-30T23:09:30.519500Z","shell.execute_reply.started":"2022-04-30T23:09:30.509692Z"},"trusted":true},"outputs":[],"source":["# From list to zip into tuples\n","list1 = [1, 2, 3, 4]\n","list2 = ['one', 'two', 'three', 'four']\n","list3 = ['uno', 'due', 'tre']\n","for pair in zip(list1, list2, list3): print(pair)\n","# (1, 'one', 'uno')\n","# (2, 'two', 'due')\n","# (3, 'three', 'tre')\n","\n","print(\"List of tuples: \", list(zip(list1, list2, list3)))\n","\n","# From tuple to dictionary\n","tuple_list = [(1, 'one'), (2, 'two'), (3, 'three')]\n","D = dict(tuple_list)\n","print(\"Dictionary: \", D)"]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Following the example of my_max() function in the lecture, code another function my_min(), which returns the minimal value from a variable number of input arguments.\n","\n","2. Use type() function to verify the variable type of two assignment values: ('a'), ('a', ). Please discuss the difference.\n","\n","3. Use id() function to code an example, which demonstrates that dictionary is a mutable variable type.\n","\n","4. Create a simple English-to-Italian dictionary, with the following five (key, value) pairs:\n","> (\"one\", \"uno\"), (\"two\", \"due\"), (\"three\", \"tre\"), (\"four\", \"quattro\"), (\"five\", \"cinque\")\n","\n"," Please code a program that performs the following two functions (can be implemented separately or jointly):\n"," 1. When a user inputs an English word from the dictionary keys, output the corresponding value to translate English to Italian.\n"," 2. When a user inputs an Italian word from the dictionary values, output the corresponding key to translate Italian to English.\n"," 3. In any of the above cases, it the corresponding (key, value) is not found, display a message: Translation is not available.\n"," \n","\n","5. Although a tuple is an immutable type, sometimes Python may successfully modify values inside a tuple, such as the code below. Explain why?"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T12:10:26.003097Z","iopub.status.busy":"2021-05-28T12:10:26.002738Z","iopub.status.idle":"2021-05-28T12:10:26.00935Z","shell.execute_reply":"2021-05-28T12:10:26.008289Z","shell.execute_reply.started":"2021-05-28T12:10:26.003065Z"},"trusted":true},"outputs":[],"source":["T = (0.11, [30, 35], 20, [40,45], 50)\n","T[1][0] = 3\n","print(T)"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Take the same text input:\n",">text = 'We can know only that we know nothing. And that is the highest degree of human wisdom.' # From War and Peace\n","\n"," Now use a dictionary type to construct a histogram. Each key in the dictionary is a unique word in the text string by identifying upper case and lower case letters, and the corresponding value is the count of occurrence in the text. For example, \"we\" is a valid key phrase from the text, and its occurrence value in the histogram is 2. Similarly, the histogram value for \"that\" is also two. Hint: Use string.split() to split a string into words separated by spaces. Use string.lower() to convert all words to lower cases, and remember to ignore symbols from the text as they are not counted as words."]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.6"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 7: Tuples and Dictionaries**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **tuple**: Keyword for the tuple data type in Python. Tuple is an immutable type.\n","* **dict**: Keyword for the dictionary data type in Python. Dictionary is a mutable type. Each element in a dictionary is a (key, value) pair.\n","* **Histogram**: A data structure that represents a list of unique elements and their frequency of occurances within some data."]},{"cell_type":"markdown","metadata":{},"source":["# Tuples\n","\n","A tuple variable stores an ordered sequence of values. The following examples show the three ways a tuple object can be assigned:\n"," 1. Using a pair of parentheses: t = ('A', 'B')\n"," 2. A sequence of values separated by commas without the parentheses: t = 'a', 'b', 'c', 'd', 'e'\n"," 3. Using tuple() function: t = tuple('abcde')"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T09:07:42.457852Z","iopub.status.busy":"2021-06-26T09:07:42.456626Z","iopub.status.idle":"2021-06-26T09:07:42.468893Z","shell.execute_reply":"2021-06-26T09:07:42.467966Z","shell.execute_reply.started":"2021-06-26T09:07:42.457801Z"},"trusted":true},"outputs":[],"source":["t = 'a', 'b', 'c', 'd', 'e'\n","print(t == tuple('abcde') )\n","\n","t = ('A', 'B') + t[2:]\n","print(t)\n","\n","print(() == tuple())"]},{"cell_type":"markdown","metadata":{},"source":["In many ways, tuples are similar to lists in Python. In the above example, we see that elements in a tuple can be addressed using square brackets just like in a list. Concatenating two tuples into a new tuple variable is denoted using the \"+\" operator. In the last example, an empty tuple is denoted using *()* or *tuple()*.\n","\n","A tuple may contain just one element. However, the way to declare a single-element tuple must be different from the way to declare a single variable. See the examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T09:09:02.34211Z","iopub.status.busy":"2021-06-26T09:09:02.341229Z","iopub.status.idle":"2021-06-26T09:09:02.351823Z","shell.execute_reply":"2021-06-26T09:09:02.350894Z","shell.execute_reply.started":"2021-06-26T09:09:02.342069Z"},"trusted":true},"outputs":[],"source":["t = 'a', # Single-element tuple\n","s = ('a') # a string\n","print(type(t), type(s))\n","\n","t = 0, # Single-element tuple\n","i = (0) # an integer\n","print(type(t), type(i))"]},{"cell_type":"markdown","metadata":{},"source":["Different from lists, however, tuples are immutable type variables. Once created, tuple elements cannot be changed without forcing Python to create a new object. The following statement will return runtime error:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["t = 'a', 'b'\n","t[1] = 'c'"]},{"cell_type":"markdown","metadata":{},"source":["However, if tuple elements are themselves mutable, then the values of the elements can be changed without changing the tuple object itself. See the following examples:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T09:11:38.945441Z","iopub.status.busy":"2021-06-26T09:11:38.945046Z","iopub.status.idle":"2021-06-26T09:11:38.953129Z","shell.execute_reply":"2021-06-26T09:11:38.952125Z","shell.execute_reply.started":"2021-06-26T09:11:38.945404Z"},"trusted":true},"outputs":[],"source":["# Negative example: when the elements are not mutable\n","string = 'A'; number = 1\n","t = string, number\n","print('Initial value: ', t)\n","number = 2\n","print('Values are immutable: ', t)\n","\n","# Positive example: when the elements are mutable\n","l = list('abc')\n","t = l, l\n","print('Initial value: ', t)\n","l[2] = 'a'\n","print('Mutable elements: ', t)"]},{"cell_type":"markdown","metadata":{},"source":["In Python, a sequence of values can be compared to another sequence. The comparison is performed from left to right element-wise, with two exceptions:\n"," 1. Circuit breaker: When comparing \"<\" or \">\" relationships, the comparison will return True or False when the first non-identical position satisfies either \"<\" or \">\" relationships, and will disregard any possible situation after the position.\n"," 2. Element-wise comparison must be of the same type: When comparing two elements at the same sequence position, they must have the same type. Otherwise Python will return \"TypeError\"."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["# String comparison with circuit breaker\n","print('abc'>'a')\n","\n","# Tuple comparison with circuit breaker\n","print( (1, 2, 'c') > (1, 2))\n","print( (1, 2, 'c') > (1, 3, 3))\n","\n","# List comparison\n","print([1, 2, 'c'] > [1, 2, 'a'])\n","print([1, 2, 'c'] > [1, 2, 3])"]},{"cell_type":"markdown","metadata":{},"source":["Another scenario where tuples are used is in defining input and output values of functions. Let us see some examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-27T10:15:42.352307Z","iopub.status.busy":"2021-06-27T10:15:42.351928Z","iopub.status.idle":"2021-06-27T10:15:42.359526Z","shell.execute_reply":"2021-06-27T10:15:42.358292Z","shell.execute_reply.started":"2021-06-27T10:15:42.352258Z"},"trusted":true},"outputs":[],"source":["email = 'allenyang@berkeley.edu'\n","name, address = email.split('@') # return of the string.split() method is a tuple\n","print(name, address)\n","\n","poem = 'Roses are red, Violets are blue, Sugar is sweet'\n","a, b = poem.split(',', 1)\n","print(a, b)\n","\n","a, b, c = poem.split(',')\n","print(c)"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, a built-in method of string type *split()* will return a tuple. For example, if we split a string of an email address using the pattern \"@\", then the substring before \"@\" will be assigned to the first element of the tuple *name* and the substring after \"@\" will be assigned to the second element \"address\". In the second example, *split()* may return a tuple of multiple elements, if the split pattern appears in multiple locations of the string. \n","\n","Tuples can be used to hold return values from a function. They can also be used to hold input argument values of variable length. Let us see another simple example below:"]},{"cell_type":"code","execution_count":5,"metadata":{"execution":{"iopub.execute_input":"2022-07-30T20:58:38.382747Z","iopub.status.busy":"2022-07-30T20:58:38.382339Z","iopub.status.idle":"2022-07-30T20:58:38.392033Z","shell.execute_reply":"2022-07-30T20:58:38.390298Z","shell.execute_reply.started":"2022-07-30T20:58:38.382708Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["3\n","4\n","Input length: 1\n","args = (1,)\n","1\n"]}],"source":["print(max(2, 3))\n","print(max(2, 3, 4))\n","\n","def my_max(*args):\n"," print('Input length: ', len(args))\n"," print('args = ', args)\n"," return(max(args))\n","\n","print(my_max(1))"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we see that some Python functions accept input arguments of variable length, such as *max()* and *print()*. In addition, using tuples, we can define our own functions that accept arguments of variable length. In the definition of *my_max()*, we use a reserved symbol \"*\" to indicate that args should be treated as a tuple to hold multiple input values of variable length. In Python, the \"*\" symbol used in this scenario is called the **packing operator**."]},{"cell_type":"markdown","metadata":{},"source":["# Dictionaries\n","\n","Dictionary can be viewed as a generalization of the list type. In the list type, each element is indexed by an unique integer in ascending order. In dictionaries, each element is a **(key, value)** pair. Furthermore, the value of a dictionary entry will be addressed by its corresponding unique key. \n","\n","Let us see a few examples below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-27T10:58:35.412219Z","iopub.status.busy":"2021-06-27T10:58:35.41183Z","iopub.status.idle":"2021-06-27T10:58:35.419596Z","shell.execute_reply":"2021-06-27T10:58:35.418606Z","shell.execute_reply.started":"2021-06-27T10:58:35.412188Z"},"trusted":true},"outputs":[],"source":["D = {1: 'one', 2: 'two', 3: 'three'}\n","print(len(D))\n","print(D[2])\n","\n","English_to_Chinese={} # Define an empty dictionary\n","English_to_Chinese['one'] = '一'\n","English_to_Chinese['two'] = '二'\n","English_to_Chinese['three'] = '三'\n","\n","del(English_to_Chinese['two'])\n","print(English_to_Chinese)"]},{"cell_type":"markdown","metadata":{},"source":["In the first example above, the dictionary *D* has three entries, i.e., first entry has the (key, value) pair as (1, 'one), etc. Retrieving the entry value corresponding to the key value of 2 is by *D[2]*.\n","\n","The second example demonstrates more powerful ways to retrieve a dictionary's entry values. The key can be other variable types such as strings. We can create a dictionary for translation purposes, where a unique English word is used as the key, and its corresponding entry value is its translation in another language such as Chinese. \n","\n","In here, we should note that any immutable type value can be assigned to be a key. However, not all variable type can be used as a key value. Let us consider the counterexample below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["English_to_Chinese={} \n","English_to_Chinese[[1, 2, 3]] = 'variable'"]},{"cell_type":"markdown","metadata":{},"source":["If you run the above code, Python will return a runtime error: \"TypeError: unhashable type: 'list'\". It shows list type variables cannot be used as valid keys. The concept of **hashable** mentioned in the error message will be discussed in more detail in the next class. \n","\n","One of the widely used applications for dictionaries is the construction of histograms. A histogram is a representation of the frequency of distinct data values. A histogram can be conveniently stored in a dictionary:\n","\n"," * Key: distinct data values\n"," * Value: occurrence frequency (absolute count or relative percentage)\n"," \n","Let us see the sample code below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-25T23:47:20.030401Z","iopub.status.busy":"2021-06-25T23:47:20.030046Z","iopub.status.idle":"2021-06-25T23:47:20.045078Z","shell.execute_reply":"2021-06-25T23:47:20.044023Z","shell.execute_reply.started":"2021-06-25T23:47:20.030371Z"},"trusted":true},"outputs":[],"source":["# Build a character histogram\n","\n","histogram = dict()\n","text = 'We can know only that we know nothing. \\\n"," And that is the highest degree of human wisdom.' # From War and Peace\n","\n","for c in text:\n"," if c.isalpha(): # Test alphabet property\n"," c = c.lower() # Identify uppercase and lowercase\n"," if c in histogram:\n"," histogram[c] += 1\n"," else:\n"," histogram[c] = 1\n","\n","for key in histogram:\n"," print(key, end = ' ')\n","print()\n","for key in histogram:\n"," print(histogram[key], end = ' ')"]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, a *for* loop enumerates all the characters in the text variable. The goal is to calculate the occurrence count of distinct English letters. The histogram only calculates valid alphabets and also ignores the difference between uppercase and lowercase. Therefore, the algorithm used *c.isalpha()* and *c.lower()* functions. \n","\n","The expression *c in histogram* uses the *in* operator to search if the value of *c* is already a key in the dictionary. If yes, then the algorithm will add the occurrence plus one; otherwise, the dictionary will create a new (key, value) pair with the new value assigned to the initial value of 1.\n","\n","The final output of the alphabet histogram from the *text* quote indicates there are five occurrences of letter \"w\" or \"W\", seven occurrences of letter \"e\" or \"E\", etc.\n","\n","Next, we consider a problem of inverting a dictionary (key, value) pair. That is, creating a new dictionary whereby the existing dictionary's values are keys in the new dictionary, and vice versa. \n","\n","Let us first see the solution code:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-26T08:35:21.923474Z","iopub.status.busy":"2021-06-26T08:35:21.92287Z","iopub.status.idle":"2021-06-26T08:35:21.940109Z","shell.execute_reply":"2021-06-26T08:35:21.938759Z","shell.execute_reply.started":"2021-06-26T08:35:21.923436Z"},"trusted":true},"outputs":[],"source":["# Build a histogram dictionary\n","histogram = dict()\n","text = 'We can know only that we know nothing. And that is the highest degree of human wisdom'\n","\n","for c in text:\n"," if c.isalpha():\n"," c = c.lower()\n"," if c in histogram:\n"," histogram[c] += 1\n"," else:\n"," histogram[c] = 1\n","\n","def invert_dictionary(input_dictionary):\n"," '''\n"," Invert the mapping between keys and values of a dictionary\n"," Parameters\n"," Input: input_dictionary - a dict type\n"," Output: result - dict result\n"," '''\n","\n"," if type(input_dictionary)!=dict:\n"," raise TypeError('Argument must be dict type.')\n","\n"," result = dict()\n"," for key in input_dictionary:\n"," value = input_dictionary[key]\n"," if value not in result:\n"," result[value] = [key]\n"," else:\n"," result[value].append(key)\n","\n"," return result\n","\n","# print out the histogram\n","for key in histogram:\n"," print(key, end = ' ')\n","print()\n","for key in histogram:\n"," print(histogram[key], end = ' ')\n","print()\n","# Call invert_dictionary\n","print(\"Invert the histogram ...\")\n","inverse = invert_dictionary(histogram)\n","print(inverse)\n"]},{"cell_type":"markdown","metadata":{},"source":["The function *invert_dictionary() creates and returns a new dictionary, whose keys are the value entries of the input dictionary and the values are the keys of the input dictionary. In line 25, the *for* loop enumerates all the unique entries of *input_dictionary* with their key value assigned to the variable *key*. Then the corresponding *value* entry is retrieved in line 26. In lines 27 to 30, the *result* dictionary accepts *value* as its key value.\n","\n","Specifically, since *value* is retrieved from *input_dictionary*, it may not be unique. In the above case, multiple alphabets may have the same occurrence. Therefore, those keys from *input_dictionary* will need to be organized into a list corresponding to using their occurrence number as the key in the new dictionary.\n","\n","Python supports very efficient search to determine if a key is in a dictionary or not using the operator *in*, such as in line 27 we have: *if value not in result:*\n","\n","To demonstrate how efficient is the key search implemented in Python, let us evaluate another sample code below:"]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2023-06-29T17:51:04.351670Z","iopub.status.busy":"2023-06-29T17:51:04.351398Z","iopub.status.idle":"2023-06-29T17:51:11.287255Z","shell.execute_reply":"2023-06-29T17:51:11.286626Z","shell.execute_reply.started":"2023-06-29T17:51:04.351644Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Reading text file from url ... done\n","Generating 1M random tickers ... done\n","Searching a size-10 dictionary 1M times takes: 0.18244504928588867s\n","Searching a size-1000 dictionary 1M times takes: 0.14960026741027832s\n","Searching a size-5203 dictionary 1M times takes: 0.1539783477783203s\n"]}],"source":["# IMPORTANT: to run this script, you need to enable Internet in Kaggle. Default Kaggle kernels do not have Internet access\n","# Enabling Internet is on the right side of the Settings menu. \n","# If you run this Jupyter Notebook on your own computer, then make sure your computer has Internet access\n","\n","from urllib.request import urlopen\n","import random\n","import time\n","\n","Dictionary10 = dict()\n","Dictionary1000 = dict()\n","DictionaryTotal = dict()\n","file_url = \"http://www.nasdaqtrader.com/dynamic/symdir/nasdaqlisted.txt\" \n","\n","# Put IO functions in try -- finally\n","print('Reading text file from url ... ', end = ' ')\n","file = urlopen(file_url)\n","\n","# Create three dictionaries of different lengths\n","count = 0\n","for line in file:\n"," decoded_line = line.decode(\"utf-8\")\n"," count += 1\n"," ticker, info = decoded_line.split('|',1)\n"," if count<=10:\n"," Dictionary10[ticker] = info\n"," if count<=1000:\n"," Dictionary1000[ticker] = info\n"," DictionaryTotal[ticker] = info\n","\n","print('done')\n","\n","# Create 1M queries to time the performance of three dictionaries\n","print('Generating 1M random tickers ... ', end = ' ')\n","trial_total = 1000000\n","TICKER_LETTER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n","search_list = []\n","for index in range(trial_total):\n"," new_random_ticker = ''\n"," for letter_index in range(random.randint(1,5)):\n"," new_random_ticker = new_random_ticker + (random.choice(TICKER_LETTER))\n","\n"," search_list.append(new_random_ticker)\n","print('done')\n","\n","# Test speed for query Dictionary10\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Dictionary10\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(Dictionary10),\n"," elapsed_time))\n","\n","# Test speed for query Dictionary1000\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Dictionary1000\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(Dictionary1000),\n"," elapsed_time))\n","\n","# Test speed for query DictionaryTotal\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in DictionaryTotal\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(DictionaryTotal),\n"," elapsed_time))"]},{"cell_type":"markdown","metadata":{},"source":["In this sample code, we demonstrated using a new Python function *urlopen()* from the imported module *urllib.request* to retrieve a text file from the Internet. The file \"nasdaqlisted.txt\" is a public file that lists all the companies currently listed on the United States Nasdaq stock exchange. Naturally, for any public company, it has a unique ticker number for trading, such as AAPL for Apple and GOOGL for Google's parent company Alphabet Inc.\n","\n","In the code, we break down each line in the text file to retrieve its ticker string as the key and the rest of the string as the value for one dictionary entry. For comparison purposes, we constructed three dictionaries of different sizes, from 10 entries to 1000 entries to the total 4023 entries.\n","\n","Then we will randomly query 1 million times to check if a random ticker string exists as a key in the three dictionaries. We observe the final results for their total time complexity. We see that regardless of the size of the dictionary, the random 1 million key query roughly costs the same amount of time, which is somewhat counter-intuitive. \n","\n","The constant-time key search algorithm in Python is related to the concept of \"hashable\" that we have mentioned above. We will explain in more details in the next lecture. For now, the good news is regardless of the size of a dictionary, the search for its keys seems to be quite efficient."]},{"cell_type":"markdown","metadata":{},"source":["Finally, the sample code below demonstrates how to convert the tuple type and dictionary type variables in Python. The code uses the cast functions *list()* and *dict()*. Grouping two lists of the same length into tuple pairs is by the function *zip()*."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2022-04-30T23:09:30.509730Z","iopub.status.busy":"2022-04-30T23:09:30.509071Z","iopub.status.idle":"2022-04-30T23:09:30.520548Z","shell.execute_reply":"2022-04-30T23:09:30.519500Z","shell.execute_reply.started":"2022-04-30T23:09:30.509692Z"},"trusted":true},"outputs":[],"source":["# From list to zip into tuples\n","list1 = [1, 2, 3, 4]\n","list2 = ['one', 'two', 'three', 'four']\n","list3 = ['uno', 'due', 'tre']\n","for pair in zip(list1, list2, list3): print(pair)\n","# (1, 'one', 'uno')\n","# (2, 'two', 'due')\n","# (3, 'three', 'tre')\n","\n","print(\"List of tuples: \", list(zip(list1, list2, list3)))\n","\n","# From tuple to dictionary\n","tuple_list = [(1, 'one'), (2, 'two'), (3, 'three')]\n","D = dict(tuple_list)\n","print(\"Dictionary: \", D)"]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Following the example of my_max() function in the lecture, code another function my_min(), which returns the minimal value from a variable number of input arguments.\n","\n","2. Use type() function to verify the variable type of two assignment values: ('a'), ('a', ). Please discuss the difference.\n","\n","3. Use id() function to code an example, which demonstrates that dictionary is a mutable variable type.\n","\n","4. Create a simple English-to-Italian dictionary, with the following five (key, value) pairs:\n","> (\"one\", \"uno\"), (\"two\", \"due\"), (\"three\", \"tre\"), (\"four\", \"quattro\"), (\"five\", \"cinque\")\n","\n"," Please code a program that performs the following two functions (can be implemented separately or jointly):\n"," 1. When a user inputs an English word from the dictionary keys, output the corresponding value to translate English to Italian.\n"," 2. When a user inputs an Italian word from the dictionary values, output the corresponding key to translate Italian to English.\n"," 3. In any of the above cases, it the corresponding (key, value) is not found, display a message: Translation is not available.\n"," \n","\n","5. Although a tuple is an immutable type, sometimes Python may successfully modify values inside a tuple, such as the code below. Explain why?"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Input length: 6\n","args = (1, 2, 3, 4, 5, 6)\n","1\n"," \n"]}],"source":["\n","#1\n","def my_min(*args):\n"," print('Input length: ', len(args))\n"," print('args = ', args)\n"," return(min(args))\n","\n","print(my_min(1,2,3,4,5,6))\n","#2\n","x=('a')\n","y=('a',)\n","print(type(x), type(y))"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["#3\n","d = {'a': 1, 'b': 2, 'c': 3}\n","print(id(d))\n","d['a']=[4]\n","print(id(d))"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[],"source":["#4\n","words = {\"one\": \"uno\", \"two\": \"due\", \"three\": \"tre\", \"four\": \"quattro\", \"five\": \"cinque\"}\n","\n","def dictionary(word):\n"," word = input(\"type word\")\n","\n"," if word in words:\n"," return words[word]\n"," for english, italian in words.items():\n"," if word == italian:\n"," return english\n"," elif word == english:\n"," return italian\n"," else:\n"," print(\"Translation not available\")\n"]},{"cell_type":"code","execution_count":20,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T12:10:26.003097Z","iopub.status.busy":"2021-05-28T12:10:26.002738Z","iopub.status.idle":"2021-05-28T12:10:26.00935Z","shell.execute_reply":"2021-05-28T12:10:26.008289Z","shell.execute_reply.started":"2021-05-28T12:10:26.003065Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["[30, 35]\n"]}],"source":["ls = [30,35]\n","T = (0.11, [30, 35], 20, [40,45], 50)\n","ls = 10\n","print(T[1])"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Take the same text input:\n",">text = 'We can know only that we know nothing. And that is the highest degree of human wisdom.' # From War and Peace\n","\n"," Now use a dictionary type to construct a histogram. Each key in the dictionary is a unique word in the text string by identifying upper case and lower case letters, and the corresponding value is the count of occurrence in the text. For example, \"we\" is a valid key phrase from the text, and its occurrence value in the histogram is 2. Similarly, the histogram value for \"that\" is also two. Hint: Use string.split() to split a string into words separated by spaces. Use string.lower() to convert all words to lower cases, and remember to ignore symbols from the text as they are not counted as words."]},{"cell_type":"code","execution_count":17,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["{'we': 2, 'can': 1, 'know': 2, 'only': 1, 'that': 2, 'and': 1, 'is': 1, 'the': 1, 'highest': 1, 'degree': 1, 'of': 1, 'human': 1}\n"]}],"source":["text = 'We can know only that we know nothing. And that is the highest degree of human wisdom.' # From War and Peace\n","dic = {}\n","for c in text.split(\" \"):\n"," if c.isalpha():\n"," c = c.lower()\n"," if c in dic:\n"," dic[c] +=1\n"," else:\n"," dic[c] = 1 \n","print(dic)\n"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-8-sets-and-hashing.ipynb b/Part One/1-8-sets-and-hashing.ipynb index a6a72c3..18726b5 100644 --- a/Part One/1-8-sets-and-hashing.ipynb +++ b/Part One/1-8-sets-and-hashing.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 8: Sets and Hashing**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **set**: Keyword for the set data type in Python. A set variable may contain from empty set to multiple set elements, where every element must be unique in its value in the set.\n","* **Subset**: A subset of a set contains exclusively a portion of the set's elements, and hence the subset cannot contain any elements that are not in the set.\n","* **Superset**: The set with respect to its subset in the above definition is also called a superset. In other words, a superset of a set must contain all the elements in the set.\n","* **Hashing**: Hashing refers to a calculation by a hash function that maps an object to a fixed value.\n","* **MD5**: A popular hash function that generates 128-bit hash value, also known as Message-Digest algorithm version 5."]},{"cell_type":"markdown","metadata":{},"source":["# Definition\n","\n","A set is a collection of unique elements. Elements in a set act just like keys in a dictionary but without the (key, value) correspondence.\n","\n","Also both dictionary and set are mutable types. Therefore, updating a set or a dictionary by adding or removing elements or entries, respectively, does not force Python to create new objects."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:40:13.591515Z","iopub.status.busy":"2021-06-28T02:40:13.591071Z","iopub.status.idle":"2021-06-28T02:40:13.601129Z","shell.execute_reply":"2021-06-28T02:40:13.599407Z","shell.execute_reply.started":"2021-06-28T02:40:13.59149Z"},"trusted":true},"outputs":[],"source":["D = {} # Important note, a pair of brackets is reserved to define an empty dictionary\n","D[1] = 'one'\n","\n","S = set() # Define an empty set used set() function\n","S.add('three') # add one element\n","print(S)\n","S.update(['t','h','r','e','e']) # Extend a set with another set\n","print(S)\n","\n","for element in S:\n"," print(element, end = ', ')\n"," \n","print()\n","print('e' in S) # Search if an element exists in a set"]},{"cell_type":"markdown","metadata":{},"source":["We see from the above example, that when elements are added into a set, its ordering is not defined in Python, namely, Python may store the elements in any particular order depending on the implementation. A user should not assume any particular order when using a *for* loop to enumerate its elements.\n","\n","Also pay attention to the result of *S.update('three')*. First *update()* function extends a set by adding another set or equivalent list or string. In the example, because set elements are required to be unique, so the two 'e' letters only appear once in the result after the set updates.\n","\n","In the last sample code, the operator *in* returns a boolean to verify if a variable value is in the set of elements. If the value is equal to one of the set elements, then the result is True; and vice versa."]},{"cell_type":"markdown","metadata":{},"source":["The following code shows removing an element of a set. \n"," * remove() method will enforce that the intended value for removal must exist in the set. If the value is not in the set, the function will return a runtime error, such as the last statement in the sample code below.\n"," * discard() method behaves the same as remove(), except that it does not enforce that the removal value must be in the set. In such cases, discard() simply ignores the operation without raising any messages."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:43:28.430327Z","iopub.status.busy":"2021-06-28T02:43:28.430041Z","iopub.status.idle":"2021-06-28T02:43:28.461224Z","shell.execute_reply":"2021-06-28T02:43:28.459895Z","shell.execute_reply.started":"2021-06-28T02:43:28.430302Z"},"trusted":true},"outputs":[],"source":["S = {'h', 't', 'three', 'e', 'r'}\n","S.discard('two')\n","S.discard('t')\n","print(S)\n","\n","S.remove('t')"]},{"cell_type":"markdown","metadata":{},"source":["# Set Operations\n","\n"," * Union: s | t, or s.union(t).\n"," * Intersection: s & t, or s.intersection(t).\n"," * Difference: s - t, or s.difference(t).\n"," * Exclusive Or (XOR): s ^ t, or s.symmetric_difference(t)\n"," * Is superset: s.issuperset(t)\n"," * Is subset: s.issubset(t)\n"," \n","Note: XOR takes exclusive elements not in the intersection of the two sets."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:48:02.715684Z","iopub.status.busy":"2021-06-28T02:48:02.715409Z","iopub.status.idle":"2021-06-28T02:48:02.725594Z","shell.execute_reply":"2021-06-28T02:48:02.724594Z","shell.execute_reply.started":"2021-06-28T02:48:02.71566Z"},"trusted":true},"outputs":[],"source":["s = {1, 2, 3, 4}; t = {3, 4, 5, 6}\n","\n","u = s | t\n","print(\"Union: \", u)\n","print(\"Intersection: \", s & t)\n","print(\"Difference: \", s - t)\n","\n","xor = s^t\n","print(\"XOR: \", xor)\n","\n","print(u.issuperset(s))\n","print(xor.issubset(s))"]},{"cell_type":"markdown","metadata":{},"source":["# Hashing\n","\n","Another similarity between dictionary and set is that searching elements in a set is very efficients, close to a constant-time operation regardless of the length of the set. The fundamental algorithm to achieve near constant-time search performance is using *hashing* techniques.\n","\n","First, let us revise the dictionary search example in the last lecture to use the set structure:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:54:00.708102Z","iopub.status.busy":"2021-06-28T02:54:00.707736Z","iopub.status.idle":"2021-06-28T02:54:06.309084Z","shell.execute_reply":"2021-06-28T02:54:06.307637Z","shell.execute_reply.started":"2021-06-28T02:54:00.708071Z"},"trusted":true},"outputs":[],"source":["# IMPORTANT: to run this script, you need to enable Internet in Kaggle. Default Kaggle kernels do not have Internet access\n","# Enabling Internet is on the right side of the Settings menu. \n","# If you run this Jupyter Notebook on your own computer, then make sure your computer has Internet access\n","\n","from urllib.request import urlopen\n","import random\n","import time\n","\n","Set10 = set()\n","Set1000 = set()\n","SetTotal = set()\n","file_url = \"http://www.nasdaqtrader.com/dynamic/symdir/nasdaqlisted.txt\" \n","\n","# Put IO functions in try -- finally\n","print('Reading text file from url ... ', end = ' ')\n","file = urlopen(file_url)\n","\n","# Create three dictionaries of different lengths\n","count = 0\n","for line in file:\n"," decoded_line = line.decode(\"utf-8\")\n"," count += 1\n"," ticker, info = decoded_line.split('|',1)\n"," if count<=10:\n"," Set10.add(ticker) \n"," if count<=1000:\n"," Set1000.add(ticker)\n"," SetTotal.add(ticker)\n","\n","print('done')\n","\n","# Create 1M queries to time the performance of three dictionaries\n","print('Generating 1M random tickers ... ', end = ' ')\n","trial_total = 1000000\n","TICKER_LETTER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n","search_list = []\n","for index in range(trial_total):\n"," new_random_ticker = ''\n"," for letter_index in range(random.randint(1,5)):\n"," new_random_ticker = new_random_ticker + (random.choice(TICKER_LETTER))\n","\n"," search_list.append(new_random_ticker)\n","print('done')\n","\n","# Test speed for query Dictionary10\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Set10\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} set 1M times takes: {1}s\".format(len(Set10),\n"," elapsed_time))\n","\n","# Test speed for query Dictionary1000\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Set1000\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} set 1M times takes: {1}s\".format(len(Set1000),\n"," elapsed_time))\n","\n","# Test speed for query DictionaryTotal\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in SetTotal\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(SetTotal),\n"," elapsed_time))"]},{"cell_type":"markdown","metadata":{},"source":["We see in the above sample code that searching set elements costs close to constant time regardless whether the size of the set is 10 or 1000 or 4023. In order to support hash search, valid elements in a set must be **hashable**. Next, we discuss this concept"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:59:19.882424Z","iopub.status.busy":"2021-06-28T02:59:19.882132Z","iopub.status.idle":"2021-06-28T02:59:19.898851Z","shell.execute_reply":"2021-06-28T02:59:19.897093Z","shell.execute_reply.started":"2021-06-28T02:59:19.882397Z"},"trusted":true},"outputs":[],"source":["i = 5; print(i.__hash__())\n","\n","s = \"Hello World!\"; print(s.__hash__())\n","\n","t = (i, s); print(t.__hash__())\n","\n","Set = {s}; print(Set.__hash__())"]},{"cell_type":"markdown","metadata":{},"source":["The above sample code returns three integer numbers and one runtime error. Let us take a closer look. \n","\n","In Python, if a variable type is hashable, there will be a built-in method called *__hash__()*. One can treat the hash function return as a hashtag that uniquely represent the content of the variable in the memory. The hash search will use the hash function as *the Table of Contents* in a real-world dictionary to quickly determine if a complex element value is in a dictionary or a set:\n"," * If the hash values of all set elements are not equal to the hash value of a query, then it is guaranteed that the query is *not* in the set;\n"," * If the hash value of a query is equal to one of the existing hash values, then the search algorithm only needs to compare with those that have the same hash value.\n"," \n","In other words, a hash function is a many-to-one mapping.\n","\n","To achieve this goal, a variable will calculate its hash value at the inception of its values. As a result, Python does not allow a hashable variable to change its content after its creation. This is equivalent to putting contents in a dictionary: After the Table of Contents is created, the content itself is not allowed to change. Otherwise, the reference from the Table of Contents does not faithfully represent the content. \n","\n","**Consequently, we say that a set does not have a hash value because it is a mutable variable type. Furthermore, its elements must be immutable so that each of its elements has a hash value to facilitate fast search of the set elements.**\n","\n","Let us see another example below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["Set = {[1, 2]} # This assignment will return an error because adding a list (mutable) as a set element is not permitted"]},{"cell_type":"markdown","metadata":{},"source":["Hash function creates a Table of Contents to capture a snapshot of potentially complex data content. Examples include a typical library's call number system, and storing user passwords in modern operating systems. Next, let us create a very simple hash function called division hashing:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T06:09:13.297562Z","iopub.status.busy":"2021-06-28T06:09:13.297147Z","iopub.status.idle":"2021-06-28T06:09:13.308548Z","shell.execute_reply":"2021-06-28T06:09:13.307633Z","shell.execute_reply.started":"2021-06-28T06:09:13.297527Z"},"trusted":true},"outputs":[],"source":["quotes = ['We can know only that we know nothing. And that is the highest degree of human wisdom.',\\\n"," 'Nothing is so necessary for a young man as the company of intelligent women.',\\\n"," 'The strongest of all warriors are these two — Time and Patience.',\\\n"," 'There is no greatness where there is not simplicity, goodness, and truth.'\n"," ]\n","\n","def division_hashing(text):\n"," global hash_prime_number\n"," hash_prime_number = 101\n","\n"," sum = 0\n"," for c in text:\n"," sum = sum*256 + ord(c) # Change a character to its ASCII value\n","\n"," return sum % hash_prime_number\n","\n","print(division_hashing(quotes[0]), division_hashing(quotes[1]), division_hashing(quotes[2]),\n"," division_hashing(quotes[3]))\n","\n","# Altered text with high probability leads to different hash value\n","print(division_hashing(quotes[0][1:]), division_hashing(quotes[1][1:]), division_hashing(quotes[2][1:]),\n"," division_hashing(quotes[3][1:])) "]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we see hashing can be conveniently used to verify the integrity of the data. For the four quotes, we use *division_hashing()* function to obtain a hash value for each quote. If some of the text is altered in the quotes (for example, due to transmission error or due to malicious attack), a user can be alerted that with high probability, their corresponding hash values are also different."]},{"cell_type":"markdown","metadata":{},"source":["Finally, various Python implementations often come with a library of supported built-in hash functions, called hashlib. One can call *hashlib.algorithms_guaranteed* to display a list of supported methods in different systems."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T06:15:17.130626Z","iopub.status.busy":"2021-06-28T06:15:17.130298Z","iopub.status.idle":"2021-06-28T06:15:17.140028Z","shell.execute_reply":"2021-06-28T06:15:17.139131Z","shell.execute_reply.started":"2021-06-28T06:15:17.130597Z"},"trusted":true},"outputs":[],"source":["import hashlib\n","print(hashlib.algorithms_guaranteed)\n","\n","hash_md5 = hashlib.md5()\n","text = b'We can know only that we know nothing.'\n","hash_md5.update(text)\n","print(hash_md5.hexdigest())\n","\n","hash_md5 = hashlib.md5()\n","print(type('W'.encode('utf-8')), type('W'))\n","for b in text:\n"," hash_md5.update(chr(b).encode('utf-8'))\n"," \n","print(hash_md5.hexdigest())\n"]},{"cell_type":"markdown","metadata":{},"source":["We can see from the above sample code, that we can select any of the supported algorithms in Python to create a hash function object. In the example, we choose MD5 algorithm. The algorithm uses the built-in method *update()* to calculate the hash value of a text string. The function can be called to process the entire text as a whole, or iteratively letter by letter as demonstrated in the *for* loop. The hex digest of the hash values are identical from two approaches.\n","\n","Finally, we note that the hash functions in hashlib receive encoding content only as byte streams. A byte stream provides the underlying data of the variable stored in the memory regardless of its type. The conversion from a string type to a byte type is by either adding a letter *b* prefix in front of the text, or calling a built-in function *encode('utf-8')*."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Given a dictionary input, please code a function that extracts all its key elements into a set variable as the return value of the function.\n","\n","2. Implement your own version of the set function *issuperset(set_1, set_2)*, which takes in two set input arguments and output True if the first argument is a superset of the second argument.\n","\n","3. Implement your own version of the set function *XOR(set_1, set_2)*, which takes in two set input arguments and output their symmetric difference.\n","\n","4. Let a quote string equal to 'We can know only that we know nothing. And that is the highest degree of human wisdom.' Then use the above division_hashing() function to find a substring from the quote string that has the same hash value. Note, if hash_prime_number = 101 as set in the code above, the hash value of the full quote string should be 20.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T12:53:16.599147Z","iopub.status.busy":"2021-05-28T12:53:16.598801Z","iopub.status.idle":"2021-05-28T12:53:16.614194Z","shell.execute_reply":"2021-05-28T12:53:16.612537Z","shell.execute_reply.started":"2021-05-28T12:53:16.59912Z"},"trusted":true},"outputs":[],"source":["animals = ['cat', 'dog', 'horse', 'cow']\n","print(animals[0].__hash__())\n","print(animals.__hash__())"]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. In calculating the hash value of an integer shown below, we can notice that in many Python implementations, its hash value is exactly equal to the integer value. This is purposely designed to prevent assigning duplicate copies of small integer values in memory. In other words, for small integer values, each integer value is reserved to have only one copy and one memory address.\n","\n","> i = 5; print(i.\\_\\_hash\\_\\_())\n","\n","Write a program to test in your Python environment, what is the smallest integer value where the integer value and its hash value differ. Hint: This value will need to be very large, due to the fact that Python 3 supports storing integers of arbitrary large value but a hash function value cannot be arbitrarily large. As a result, if your strategy is to increase the i value in a loop, it will be wise to adaptively change the step size such that the loop does not have to enumerate all the integers before the smallest integer value that satsifies the condition is found.\n","\n","\n","2. Assume a transaction string is \"Satoshi sends 50 BTC to Hal\". Then use SHA256 hash algorithm to hash the string plus 4 consecutive random bytes called nounce, namely, string + nounce_1 + nounce_2 + nounce_3 + nounce_4.\n","\n","The process should continue trying the combinations of the string plus 4 consecutive random bytes until the hexdigest() result has one leading \"0\" in the hash string. Then change the requirement for the number of leading \"0\"s to two digits and three digits, and observe the change in time complexity in finding one combination.\n","\n","(Hint: 1. Generating one random byte can be done by random.randint(0,255); 2. Adding the string and four bytes into the hash value can be done by using the update() function first on the string and then consecutively on the four randomly generated bytes)"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.4"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 8: Sets and Hashing**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","* **set**: Keyword for the set data type in Python. A set variable may contain from empty set to multiple set elements, where every element must be unique in its value in the set.\n","* **Subset**: A subset of a set contains exclusively a portion of the set's elements, and hence the subset cannot contain any elements that are not in the set.\n","* **Superset**: The set with respect to its subset in the above definition is also called a superset. In other words, a superset of a set must contain all the elements in the set.\n","* **Hashing**: Hashing refers to a calculation by a hash function that maps an object to a fixed value.\n","* **MD5**: A popular hash function that generates 128-bit hash value, also known as Message-Digest algorithm version 5."]},{"cell_type":"markdown","metadata":{},"source":["# Definition\n","\n","A set is a collection of unique elements. Elements in a set act just like keys in a dictionary but without the (key, value) correspondence.\n","\n","Also both dictionary and set are mutable types. Therefore, updating a set or a dictionary by adding or removing elements or entries, respectively, does not force Python to create new objects."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:40:13.591515Z","iopub.status.busy":"2021-06-28T02:40:13.591071Z","iopub.status.idle":"2021-06-28T02:40:13.601129Z","shell.execute_reply":"2021-06-28T02:40:13.599407Z","shell.execute_reply.started":"2021-06-28T02:40:13.59149Z"},"trusted":true},"outputs":[],"source":["D = {} # Important note, a pair of brackets is reserved to define an empty dictionary\n","D[1] = 'one'\n","\n","S = set() # Define an empty set used set() function\n","S.add('three') # add one element\n","print(S)\n","S.update(['t','h','r','e','e']) # Extend a set with another set\n","print(S)\n","\n","for element in S:\n"," print(element, end = ', ')\n"," \n","print()\n","print('e' in S) # Search if an element exists in a set"]},{"cell_type":"markdown","metadata":{},"source":["We see from the above example, that when elements are added into a set, its ordering is not defined in Python, namely, Python may store the elements in any particular order depending on the implementation. A user should not assume any particular order when using a *for* loop to enumerate its elements.\n","\n","Also pay attention to the result of *S.update('three')*. First *update()* function extends a set by adding another set or equivalent list or string. In the example, because set elements are required to be unique, so the two 'e' letters only appear once in the result after the set updates.\n","\n","In the last sample code, the operator *in* returns a boolean to verify if a variable value is in the set of elements. If the value is equal to one of the set elements, then the result is True; and vice versa."]},{"cell_type":"markdown","metadata":{},"source":["The following code shows removing an element of a set. \n"," * remove() method will enforce that the intended value for removal must exist in the set. If the value is not in the set, the function will return a runtime error, such as the last statement in the sample code below.\n"," * discard() method behaves the same as remove(), except that it does not enforce that the removal value must be in the set. In such cases, discard() simply ignores the operation without raising any messages."]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:43:28.430327Z","iopub.status.busy":"2021-06-28T02:43:28.430041Z","iopub.status.idle":"2021-06-28T02:43:28.461224Z","shell.execute_reply":"2021-06-28T02:43:28.459895Z","shell.execute_reply.started":"2021-06-28T02:43:28.430302Z"},"trusted":true},"outputs":[],"source":["S = {'h', 't', 'three', 'e', 'r'}\n","S.discard('two')\n","S.discard('t')\n","print(S)\n","\n","S.remove('t')"]},{"cell_type":"markdown","metadata":{},"source":["# Set Operations\n","\n"," * Union: s | t, or s.union(t).\n"," * Intersection: s & t, or s.intersection(t).\n"," * Difference: s - t, or s.difference(t).\n"," * Exclusive Or (XOR): s ^ t, or s.symmetric_difference(t)\n"," * Is superset: s.issuperset(t)\n"," * Is subset: s.issubset(t)\n"," \n","Note: XOR takes exclusive elements not in the intersection of the two sets."]},{"cell_type":"code","execution_count":1,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:48:02.715684Z","iopub.status.busy":"2021-06-28T02:48:02.715409Z","iopub.status.idle":"2021-06-28T02:48:02.725594Z","shell.execute_reply":"2021-06-28T02:48:02.724594Z","shell.execute_reply.started":"2021-06-28T02:48:02.71566Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Union: {1, 2, 3, 4, 5, 6}\n","Intersection: {3, 4}\n","Difference: {1, 2}\n","XOR: {1, 2, 5, 6}\n","True\n","False\n"]}],"source":["s = {1, 2, 3, 4}; t = {3, 4, 5, 6}\n","\n","u = s | t\n","print(\"Union: \", u)\n","print(\"Intersection: \", s & t)\n","print(\"Difference: \", s - t)\n","\n","xor = s^t\n","print(\"XOR: \", xor)\n","\n","print(u.issuperset(s))\n","print(xor.issubset(s))"]},{"cell_type":"markdown","metadata":{},"source":["# Hashing\n","\n","Another similarity between dictionary and set is that searching elements in a set is very efficients, close to a constant-time operation regardless of the length of the set. The fundamental algorithm to achieve near constant-time search performance is using *hashing* techniques.\n","\n","First, let us revise the dictionary search example in the last lecture to use the set structure:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:54:00.708102Z","iopub.status.busy":"2021-06-28T02:54:00.707736Z","iopub.status.idle":"2021-06-28T02:54:06.309084Z","shell.execute_reply":"2021-06-28T02:54:06.307637Z","shell.execute_reply.started":"2021-06-28T02:54:00.708071Z"},"trusted":true},"outputs":[],"source":["# IMPORTANT: to run this script, you need to enable Internet in Kaggle. Default Kaggle kernels do not have Internet access\n","# Enabling Internet is on the right side of the Settings menu. \n","# If you run this Jupyter Notebook on your own computer, then make sure your computer has Internet access\n","\n","from urllib.request import urlopen\n","import random\n","import time\n","\n","Set10 = set()\n","Set1000 = set()\n","SetTotal = set()\n","file_url = \"http://www.nasdaqtrader.com/dynamic/symdir/nasdaqlisted.txt\" \n","\n","# Put IO functions in try -- finally\n","print('Reading text file from url ... ', end = ' ')\n","file = urlopen(file_url)\n","\n","# Create three dictionaries of different lengths\n","count = 0\n","for line in file:\n"," decoded_line = line.decode(\"utf-8\")\n"," count += 1\n"," ticker, info = decoded_line.split('|',1)\n"," if count<=10:\n"," Set10.add(ticker) \n"," if count<=1000:\n"," Set1000.add(ticker)\n"," SetTotal.add(ticker)\n","\n","print('done')\n","\n","# Create 1M queries to time the performance of three dictionaries\n","print('Generating 1M random tickers ... ', end = ' ')\n","trial_total = 1000000\n","TICKER_LETTER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n","search_list = []\n","for index in range(trial_total):\n"," new_random_ticker = ''\n"," for letter_index in range(random.randint(1,5)):\n"," new_random_ticker = new_random_ticker + (random.choice(TICKER_LETTER))\n","\n"," search_list.append(new_random_ticker)\n","print('done')\n","\n","# Test speed for query Dictionary10\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Set10\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} set 1M times takes: {1}s\".format(len(Set10),\n"," elapsed_time))\n","\n","# Test speed for query Dictionary1000\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in Set1000\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} set 1M times takes: {1}s\".format(len(Set1000),\n"," elapsed_time))\n","\n","# Test speed for query DictionaryTotal\n","begin_time = time.time()\n","for index in range(trial_total):\n"," query_result = search_list[index] in SetTotal\n","elapsed_time = time.time() - begin_time\n","print(\"Searching a size-{0} dictionary 1M times takes: {1}s\".format(len(SetTotal),\n"," elapsed_time))"]},{"cell_type":"markdown","metadata":{},"source":["We see in the above sample code that searching set elements costs close to constant time regardless whether the size of the set is 10 or 1000 or 4023. In order to support hash search, valid elements in a set must be **hashable**. Next, we discuss this concept"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T02:59:19.882424Z","iopub.status.busy":"2021-06-28T02:59:19.882132Z","iopub.status.idle":"2021-06-28T02:59:19.898851Z","shell.execute_reply":"2021-06-28T02:59:19.897093Z","shell.execute_reply.started":"2021-06-28T02:59:19.882397Z"},"trusted":true},"outputs":[],"source":["i = 5; print(i.__hash__())\n","\n","s = \"Hello World!\"; print(s.__hash__())\n","\n","t = (i, s); print(t.__hash__())\n","\n","Set = {s}; print(Set.__hash__())"]},{"cell_type":"markdown","metadata":{},"source":["The above sample code returns three integer numbers and one runtime error. Let us take a closer look. \n","\n","In Python, if a variable type is hashable, there will be a built-in method called *__hash__()*. One can treat the hash function return as a hashtag that uniquely represent the content of the variable in the memory. The hash search will use the hash function as *the Table of Contents* in a real-world dictionary to quickly determine if a complex element value is in a dictionary or a set:\n"," * If the hash values of all set elements are not equal to the hash value of a query, then it is guaranteed that the query is *not* in the set;\n"," * If the hash value of a query is equal to one of the existing hash values, then the search algorithm only needs to compare with those that have the same hash value.\n"," \n","In other words, a hash function is a many-to-one mapping.\n","\n","To achieve this goal, a variable will calculate its hash value at the inception of its values. As a result, Python does not allow a hashable variable to change its content after its creation. This is equivalent to putting contents in a dictionary: After the Table of Contents is created, the content itself is not allowed to change. Otherwise, the reference from the Table of Contents does not faithfully represent the content. \n","\n","**Consequently, we say that a set does not have a hash value because it is a mutable variable type. Furthermore, its elements must be immutable so that each of its elements has a hash value to facilitate fast search of the set elements.**\n","\n","Let us see another example below:"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["Set = {[1, 2]} # This assignment will return an error because adding a list (mutable) as a set element is not permitted"]},{"cell_type":"markdown","metadata":{},"source":["Hash function creates a Table of Contents to capture a snapshot of potentially complex data content. Examples include a typical library's call number system, and storing user passwords in modern operating systems. Next, let us create a very simple hash function called division hashing:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T06:09:13.297562Z","iopub.status.busy":"2021-06-28T06:09:13.297147Z","iopub.status.idle":"2021-06-28T06:09:13.308548Z","shell.execute_reply":"2021-06-28T06:09:13.307633Z","shell.execute_reply.started":"2021-06-28T06:09:13.297527Z"},"trusted":true},"outputs":[],"source":["quotes = ['We can know only that we know nothing. And that is the highest degree of human wisdom.',\\\n"," 'Nothing is so necessary for a young man as the company of intelligent women.',\\\n"," 'The strongest of all warriors are these two — Time and Patience.',\\\n"," 'There is no greatness where there is not simplicity, goodness, and truth.'\n"," ]\n","\n","def division_hashing(text):\n"," global hash_prime_number\n"," hash_prime_number = 101\n","\n"," sum = 0\n"," for c in text:\n"," sum = sum*256 + ord(c) # Change a character to its ASCII value\n","\n"," return sum % hash_prime_number\n","\n","print(division_hashing(quotes[0]), division_hashing(quotes[1]), division_hashing(quotes[2]),\n"," division_hashing(quotes[3]))\n","\n","# Altered text with high probability leads to different hash value\n","print(division_hashing(quotes[0][1:]), division_hashing(quotes[1][1:]), division_hashing(quotes[2][1:]),\n"," division_hashing(quotes[3][1:])) "]},{"cell_type":"markdown","metadata":{},"source":["In the above sample code, we see hashing can be conveniently used to verify the integrity of the data. For the four quotes, we use *division_hashing()* function to obtain a hash value for each quote. If some of the text is altered in the quotes (for example, due to transmission error or due to malicious attack), a user can be alerted that with high probability, their corresponding hash values are also different."]},{"cell_type":"markdown","metadata":{},"source":["Finally, various Python implementations often come with a library of supported built-in hash functions, called hashlib. One can call *hashlib.algorithms_guaranteed* to display a list of supported methods in different systems."]},{"cell_type":"code","execution_count":20,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T06:15:17.130626Z","iopub.status.busy":"2021-06-28T06:15:17.130298Z","iopub.status.idle":"2021-06-28T06:15:17.140028Z","shell.execute_reply":"2021-06-28T06:15:17.139131Z","shell.execute_reply.started":"2021-06-28T06:15:17.130597Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["{'shake_128', 'md5', 'sha3_384', 'sha3_256', 'sha3_512', 'shake_256', 'blake2b', 'sha224', 'sha1', 'sha256', 'sha3_224', 'sha384', 'sha512', 'blake2s'}\n","e0da48d356c6e6a3fd817b6f1d0a103e\n"," \n","e0da48d356c6e6a3fd817b6f1d0a103e\n"]}],"source":["import hashlib\n","print(hashlib.algorithms_guaranteed)\n","\n","hash_md5 = hashlib.md5()\n","text = b'We can know only that we know nothing.'\n","hash_md5.update(text)\n","print(hash_md5.hexdigest())\n","\n","hash_md5 = hashlib.md5()\n","print(type('W'.encode('utf-8')), type('W'))\n","for b in text:\n"," hash_md5.update(chr(b).encode('utf-8'))\n"," \n","print(hash_md5.hexdigest())\n"]},{"cell_type":"markdown","metadata":{},"source":["We can see from the above sample code, that we can select any of the supported algorithms in Python to create a hash function object. In the example, we choose MD5 algorithm. The algorithm uses the built-in method *update()* to calculate the hash value of a text string. The function can be called to process the entire text as a whole, or iteratively letter by letter as demonstrated in the *for* loop. The hex digest of the hash values are identical from two approaches.\n","\n","Finally, we note that the hash functions in hashlib receive encoding content only as byte streams. A byte stream provides the underlying data of the variable stored in the memory regardless of its type. The conversion from a string type to a byte type is by either adding a letter *b* prefix in front of the text, or calling a built-in function *encode('utf-8')*."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. Given a dictionary input, please code a function that extracts all its key elements into a set variable as the return value of the function.\n","\n","2. Implement your own version of the set function *issuperset(set_1, set_2)*, which takes in two set input arguments and output True if the first argument is a superset of the second argument.\n","\n","3. Implement your own version of the set function *XOR(set_1, set_2)*, which takes in two set input arguments and output their symmetric difference.\n","\n","4. Let a quote string equal to 'We can know only that we know nothing. And that is the highest degree of human wisdom.' Then use the above division_hashing() function to find a substring from the quote string that has the same hash value. Note, if hash_prime_number = 101 as set in the code above, the hash value of the full quote string should be 20.\n","\n","5. Debug:"]},{"cell_type":"code","execution_count":36,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["15\n"]}],"source":["words = {1:'hi', 2:'there', 3:'i', 4:'like', 5:'coding'}\n","sum = 0\n","for num, word in words.items():\n"," sum = sum + num\n","print(sum)\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["def issuperset(s1,s2):\n"," for i in s2:\n"," if i not in s1:\n"," return False\n"," else:\n"," return True"]},{"cell_type":"code","execution_count":38,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["{1, 2, 3, 7, 8, 9}\n"]}],"source":["s = {0,1,2,3,4,5,6}\n","t = {4,5,6,7,8,9,0}\n","xor = s^t\n","print(xor)"]},{"cell_type":"code","execution_count":39,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["y\n","20\n"]}],"source":["quote ='We can know only that we know nothing. And that is the highest degree of human wisdom.'\n","\n","def division_hashing(text):\n"," global hash_prime_number\n"," hash_prime_number = 101\n","\n"," sum = 0\n"," for c in text:\n"," sum = sum*256 + ord(c) # Change a character to its ASCII value\n","\n"," return sum % hash_prime_number\n","full_quote_hash = division_hashing(quote)\n","found = False\n","substring_result = \"\"\n","for start in range(len(quote)):\n"," for end in range(start + 1, len(quote) + 1):\n"," substring = quote[start:end]\n"," if division_hashing(substring) == full_quote_hash:\n"," substring_result = substring\n"," found = True\n"," if found:\n"," break\n","print(substring_result)\n","print(division_hashing(substring_result))"]},{"cell_type":"code","execution_count":19,"metadata":{"execution":{"iopub.execute_input":"2021-05-28T12:53:16.599147Z","iopub.status.busy":"2021-05-28T12:53:16.598801Z","iopub.status.idle":"2021-05-28T12:53:16.614194Z","shell.execute_reply":"2021-05-28T12:53:16.612537Z","shell.execute_reply.started":"2021-05-28T12:53:16.59912Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["-1079949055487237530\n","-1808365694993378974\n"]}],"source":["animals = ['cat', 'dog', 'horse', 'cow']\n","print(animals[0].__hash__())\n","print(''.join(animals).__hash__())\n"," "]},{"cell_type":"markdown","metadata":{},"source":[]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. In calculating the hash value of an integer shown below, we can notice that in many Python implementations, its hash value is exactly equal to the integer value. This is purposely designed to prevent assigning duplicate copies of small integer values in memory. In other words, for small integer values, each integer value is reserved to have only one copy and one memory address.\n","\n","> i = 5; print(i.\\_\\_hash\\_\\_())\n","\n","Write a program to test in your Python environment, what is the smallest integer value where the integer value and its hash value differ. Hint: This value will need to be very large, due to the fact that Python 3 supports storing integers of arbitrary large value but a hash function value cannot be arbitrarily large. As a result, if your strategy is to increase the i value in a loop, it will be wise to adaptively change the step size such that the loop does not have to enumerate all the integers before the smallest integer value that satsifies the condition is found.\n","\n","\n","2. Assume a transaction string is \"Satoshi sends 50 BTC to Hal\". Then use SHA256 hash algorithm to hash the string plus 4 consecutive random bytes called nounce, namely, string + nounce_1 + nounce_2 + nounce_3 + nounce_4.\n","\n","The process should continue trying the combinations of the string plus 4 consecutive random bytes until the hexdigest() result has one leading \"0\" in the hash string. Then change the requirement for the number of leading \"0\"s to two digits and three digits, and observe the change in time complexity in finding one combination.\n","\n","(Hint: 1. Generating one random byte can be done by random.randint(0,255); 2. Adding the string and four bytes into the hash value can be done by using the update() function first on the string and then consecutively on the four randomly generated bytes)"]},{"cell_type":"code","execution_count":47,"metadata":{},"outputs":[{"ename":"KeyboardInterrupt","evalue":"","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn[47], line 10\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m i, i\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__hash__\u001b[39m()\n\u001b[1;32m 9\u001b[0m i \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m step\n\u001b[0;32m---> 10\u001b[0m \u001b[43mfind_diff_hash_integer\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n","Cell \u001b[0;32mIn[47], line 5\u001b[0m, in \u001b[0;36mfind_diff_hash_integer\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m step \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m10\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m6\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43mi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__hash__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m!=\u001b[39m i:\n\u001b[1;32m 6\u001b[0m step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mmax\u001b[39m(\u001b[38;5;241m1\u001b[39m, step \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m \u001b[38;5;241m10\u001b[39m)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m step \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "]}],"source":["def find_diff_hash_integer():\n"," i = 1\n"," step = 10**6\n"," while True:\n"," if i.__hash__() != i:\n"," step = max(1, step // 10)\n"," if step == 1:\n"," return i, i.__hash__()\n"," i += step\n","find_diff_hash_integer()"]},{"cell_type":"code","execution_count":45,"metadata":{},"outputs":[{"data":{"text/plain":["'0da8d4dc075323a7cd8d9aaf4317dc311d6ba710751d0bb5812f6aebb98de861'"]},"execution_count":45,"metadata":{},"output_type":"execute_result"}],"source":["import hashlib\n","import random\n","text = 'Satoshi sends 50 BTC to Hal'\n","\n","def find_hash(transaction, zeros='0'):\n"," nounce = bytearray(4)\n"," hash_prefix = zeros\n","\n"," while True:\n"," for i in range(4):\n"," nounce[i] = random.randint(0,255)\n"," data = transaction.encode() + bytes(nounce)\n","\n"," hash = hashlib.sha256()\n"," hash.update(data)\n"," hash_result = hash.hexdigest()\n","\n"," if hash_result.startswith(hash_prefix):\n"," return hash_result\n","find_hash(text,'0')"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part One/1-9-classes-and-object-oriented-programmming-i.ipynb b/Part One/1-9-classes-and-object-oriented-programmming-i.ipynb index 7043cd0..5d5e8c2 100644 --- a/Part One/1-9-classes-and-object-oriented-programmming-i.ipynb +++ b/Part One/1-9-classes-and-object-oriented-programmming-i.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 9: Classes and Object-Oriented Programming I**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","Earlier in this course, we have mentioned that every Python variable type is defined as a class; assigning a variable creates an object instance of its type class. In this lecture and next, we cover introductory characteristics of Python programming using classes, a very powerful programming approach also known as **object-oriented programming** (OOP).\n","\n","* Encapsulation: In OOP, encapsulation means bundling the variable data and a set of built-in methods applied on the data together into a class object.\n","* Attribute: A name reserved for encapsulated variables defined in a class.\n","* Method: A name reserved for encapsulated functions defined in a class.\n","* Scope: Every Python variable, function, class attribute and method has a scope, which refers to whether Python interpreter may locate the correct data value or function implementation in memory."]},{"cell_type":"markdown","metadata":{},"source":["# Encapsulation\n","\n","> The first purpose of creating a class is to encapsulate data values and methods applied to the data together. For example,"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["s = 'Hello'\n","print(type(s))\n","print(s.__hash__())\n","print(s.upper())\n","print(s.replace('o', 'o World!'))"]},{"cell_type":"markdown","metadata":{},"source":["In the above example, a string-type variable s not only stores the string data themselves, but also a list of methods we can directly call by quoting the variable itself without extra function definition or import. Those functions defined in a class are also called **methods**, to differentiate from those stand-alone function definitions.\n","\n","Another impact of encapsulation is to create a new scope of variable values that a program can access. Those variables associated with a class are called its **attributes**.\n"," * Local: variables defined only in function code blocks.\n"," * Global: variables declared in a *global* environment.\n"," * Class: methods can access to its own attribute data by class or by its object instances.\n"," \n","Let us first see how a class is declared below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T20:40:09.409198Z","iopub.status.busy":"2021-06-28T20:40:09.408829Z","iopub.status.idle":"2021-06-28T20:40:09.420902Z","shell.execute_reply":"2021-06-28T20:40:09.419622Z","shell.execute_reply.started":"2021-06-28T20:40:09.409165Z"},"trusted":true},"outputs":[],"source":["class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n"," \n","x1 = Person('John', 'Smith') # a Person-class variable is created\n","print(\"Instance attribute: \",x1.first_name)\n","print(\"Class attribute: \", x1.retirement_age)\n","print(\"Class attribute: \", Person.retirement_age)"]},{"cell_type":"markdown","metadata":{},"source":["A class is declared using *class* keyword followed by its given name and then a colon mark \":\". Every Python class should have a built-in method called \\__init__(), which is called by Python automatically whenever an object of the class is created. For example, when we run a simple code:\n"," \n"," i = 5\n"," \n","Then the \\__init__() function of the integer class is called to create an integer object to hold the value 5. The process is automatic without need for the user to intervene.\n","\n","An important task in the \\__init__() function is to initialize the class variables or attributes. In the example above, we see that three attributes are defined, namely, *self.first_name*, *self.last_name*, *self.age*. They are called instance attributes because each Person class object should have its own attribute values for first_name, last_name, and age. \n","\n","The use of keyword **self** indicates the scope of the attributes is within each class instance, and the reference to the instance is indeed by the variable *self*, which is passed into the function \\__init__() automatically by Python without the need for the user to intervene. In the code above, when *x1* is created as a Person-class variable, *self* then will reference the variable *x1*.\n","\n","In addition to *self*, we can see that the function __init__() requests two additional arguments: *first_name* and *last_name*. In this part, *first_name* and *last_name* without the prefix *self* represent the input arguments, whose scope is only local; while *self.first_name* and *self.last_name* with the prefix *self.* represent the instance attributes whose scope is only within each instance of the class.\n","\n","The second type of scope in Python classes is called **class attributes**. In the example, *retirement_age* is a class attribute. The value of a class attribute is associated with the class that will remain the same for all class objects. A class attribute is defined in the same scope of other class methods, and it must be initiated with a default value at the time the class type is defined. \n","\n","In the sample code, since *retirement_age* is a class attribute, we can query its value by referencing *Person.retirement_age* without actually creating a class variable. This is equivalent to querying the same attribute from *x1.retirement_age*.\n","\n","Finally, we see the case that not all instance attributes need to be assigned a value in function __init__(). In the sample code, *self.age* is initially set to a default value **None**. The value is a special *NoneType* class object. It is special in Python in the sense that there will ever be only one instance of the class. Any references of the NoneType value only point to the same object. Consequently, one can verify if the age attribute is None or is equal to None:\n","\n"," * x1.age == None # When compare value\n"," * x1.age is None # When compare object ID"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-07-23T16:37:53.561334Z","iopub.status.busy":"2021-07-23T16:37:53.560956Z","iopub.status.idle":"2021-07-23T16:37:53.575051Z","shell.execute_reply":"2021-07-23T16:37:53.573822Z","shell.execute_reply.started":"2021-07-23T16:37:53.561298Z"},"trusted":true},"outputs":[],"source":["class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n","x1 = Person('John', 'Smith')\n","Person.retirement_age = 80\n","x1.retirement_age = 65\n","print(x1.retirement_age)\n","print(Person.retirement_age)\n","\n","x1.age = 40\n","\n","x1.years_until_retirement()"]},{"cell_type":"markdown","metadata":{},"source":["Next, we expand the definition of the Person class, and see examples of how instance attributes and class attributes are updated by the class' methods.\n","\n","First, it may come as a surprise that Python does not have protected status for attributes in classes. As such, the value of any attribute can be freely queried or assigned to new values outside the class definition.\n","\n","On the other hand, directly altering attributes of a class is not recommended in OOP. One leading reason is that the attribute values may need to satisfy some conditions for it to be valid. For example, it is reasonable to require that a person's age is nonnegative. So if the *age* attribute is modified outside the class, this condition may not be enforced, and the object may end up storing an invalid attribute value.\n","\n","A principled way to remedy this concern is to provide built-in methods to update class attributes. In the built-in methods then, all the boundary conditions that concern the validity of the attribute value should be imposed. One example if the method *set_age()* in the Person class. In its definition, it first checks if an age input is nonnegative. Only when the input argument passes this condition, then the attribute value is updated. Otherwise, it will raise a runtime error using the function *ValueError()*.\n","\n","To update an instance attribute, Python needs to pass in a reference of the instance object when the object's attribute is being updated, because the scope of an instance attribute is only within that particular class instance. We can see in *set_age(self, age)*, this is done by passing in the first argument as *self*. Once the method is defined with the first argument used for referencing a class instance, the passing of the instance reference is automatic by Python and it does not require user's intervention.\n","\n","A somewhat unexpected rule in Python is that *self* itself is not a reserved keyword, it is merely the first argument included in class methods that need a reference to its class instance. To this end, the argument actually can be called by any valid variable name. For example, in the subsequent method definition *years_until_retirement()*, for just the purpose of making this point, we rename this argument \"selfish\". Hence, referencing the instance attribute *age* will become *selfish.age* instead of *self.age*. \n","\n","Note that the fact that the reference to a class instance \"self\" can be renamed to other valid name does not mean that practitioners should pursue this option at will. Using the naming \"self\" is universally adopted by most programmers. Therefore, following this naming convention improves the readability of your code when shared with others.\n","\n","In the same function *years_until_retirement()*, we also see how the function can reference a class attribute *retirement_age*. This is done by providing the class name as the prefix: *Person.retirement_age*. Since *retirement_age* is shared by all instances of the class, *Person.retirement_age* is a proper way to reference it. "]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2022-08-12T17:15:09.116841Z","iopub.status.busy":"2022-08-12T17:15:09.116487Z","iopub.status.idle":"2022-08-12T17:15:09.131332Z","shell.execute_reply":"2022-08-12T17:15:09.130323Z","shell.execute_reply.started":"2022-08-12T17:15:09.116809Z"},"trusted":true},"outputs":[],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n","\n","x2 = Person.fromBirth('John', 'Smith', 1990)\n","print(x2.age)\n","\n","x3 = x2.fromBirth('Jane', 'Doe', 2000)\n","print(x2.age, x3.age)\n","print(id(x2), id(x3))"]},{"cell_type":"markdown","metadata":{},"source":["Next, we discuss the type of methods in a Python class. There are three types:\n","\n"," * Instance Methods: Most common method type in class definition. They interact with instance attributes via \"self\" reference variable.\n"," * Class Methods: They interact with class attributes and other class methods via \"@classmethod\" decorator.\n"," * Static Methods: Typically utility functions that do not interact with either instance or class attributes. The decorator is \"@staticmethod\".\n"," \n","In the above expanded Person class, we can see the declaration of a class method called *fromBirth()*. When a method is declared as a class method, the first argument passed into the function will reference the class itself but not the individual instances. Because of this reason, by naming convention practitioners have chosen a different name called \"cls\", rather than using \"self\" for those instance methods. \n","\n","The purpose of the class method *fromBirth()* is quite useful for classes. When a code creates a class object, if we need to have alternative ways to initialize the object, we can define a class method with a different set of arguments. In the above example, the argument for calculating the age of a person is provided by their birth year. Therefore, one can indirectly calculate the age by using the current year minus the birth year. The imported module date has a built-in function *today()* to read today's date from the computer. The return then has an attribute called year.\n","\n","Since \"cls\" references the Person class, then the following statement will trigger Python to call the default *\\__init__()* method with the proper age now calculated from the birth year:\n","\n"," cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," \n","We also see an example of static methods. Static methods do not carry any references to the class or its instances in its argument list. It is a convenient place to encapsulate useful utility functions. In the above example, validating whether an age is greater than 18 is a useful utility function to describe a person, but the condition is independently verified separated from any instance or class attributes."]},{"cell_type":"markdown","metadata":{},"source":["Finally, we examine the mutability of class objects. In Python, all user-defined class objects are mutable. As such, we shall pay attention when we assign or copy one class object to another."]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n"," \n","x1 = Person('John', 'Smith')\n","print('x1 ID:', id(x1))\n","\n","# Make some change in x1, this does not change the ID\n","x1.age = 70; print('x1 ID:', id(x1))\n","\n","# Assignment points two variables to the same mutable object\n","x2 = x1; print(id(x1)==id(x2))\n","\n","import copy\n","x3 = copy.copy(x1); print('x1 x3 IDs:', id(x1), id(x3))"]},{"cell_type":"markdown","metadata":{},"source":["For a mutable variable, assignments such as *x2 = x1* in Python mean making variable name *x2* to reference to the same object as referenced by *x1*. In other words, there is still only one object. Consequently, changing the object content from x1 variable's stand point will also change the same content referenced by x2. \n","\n","To precisely create two independent objects but copy the content to be identical, Python offers a module function called *copy.copy()*. We see the use of this technique at the end of the above sample code. We may verify from this exercise that *x1* and *x2* share the same ID number, while *x1* and *x3* are different."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. In Python design a class named Vehicle. A Vehicle class should contain the following attributes:\n"," \n"," * Brand: string type\n"," * Model: string type\n"," * Type: set type{'sedan', 'convertible', 'SUV', 'truck', 'coupe', 'van'}\n"," * Fuel_level:float type in percentage\n","\n","Among the four attributes, the first three should be initiated when an object is created. For the last attribute, design a check_fuel_level() method to print the fuel_level value, and design a set_fuel_level() method to set the fuel_level value.\n","\n","2. When the functions check_fuel_level() and set_fuel_level() are not encapsulated as built-in methods for the Vehicle class, please code the two functions as stand-alone functions that will take a Vehicle class variable as the input argument. Please also summarize the advantages of encapsulation of attributes and methods in object-oriented programming.\n","\n","3. Design a League class, representing multiple basketball teams competing in a league. The class attributes should at least include the total team number and each team name. Also design relevant methods to set these attributes.\n","\n","4. Further expand the above League class, and add an attribute called schedule. The schedule lists a sequence of matches where two teams will play a match against each other. Assuming there are 16 teams as an example, design an algorithm to automatically generate 30 matches where one team to play with the rest 15 teams twice, one at home court and one at guest court."]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Design a class named BankAccount. Attributes in BankAccount should include customer_ID and cash_position. Please define and implement relevant methods to update the content of the attributes, such as set and get customer_ID, deposit and withdraw cash_position value. Please also include necessary sanity checking to make sure the attribute values are not out of bound in real world use cases. For example, cash_position should never be negative."]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30042,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.4"}},"nbformat":4,"nbformat_minor":4} +{"cells":[{"cell_type":"markdown","metadata":{},"source":["**Learning Python -- The Programming Language for Artificial Intelligence and Data Science**\n","\n","**Lecture 9: Classes and Object-Oriented Programming I**\n","\n","**By Allen Y. Yang, PhD**\n","\n","(c) Copyright Intelligent Racing Inc., 2021-2024. All rights reserved. Materials may NOT be distributed or used for any commercial purposes.\n"]},{"cell_type":"markdown","metadata":{},"source":["# Keywords\n","\n","Earlier in this course, we have mentioned that every Python variable type is defined as a class; assigning a variable creates an object instance of its type class. In this lecture and next, we cover introductory characteristics of Python programming using classes, a very powerful programming approach also known as **object-oriented programming** (OOP).\n","\n","* Encapsulation: In OOP, encapsulation means bundling the variable data and a set of built-in methods applied on the data together into a class object.\n","* Attribute: A name reserved for encapsulated variables defined in a class.\n","* Method: A name reserved for encapsulated functions defined in a class.\n","* Scope: Every Python variable, function, class attribute and method has a scope, which refers to whether Python interpreter may locate the correct data value or function implementation in memory."]},{"cell_type":"markdown","metadata":{},"source":["# Encapsulation\n","\n","> The first purpose of creating a class is to encapsulate data values and methods applied to the data together. For example,"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["s = 'Hello'\n","print(type(s))\n","print(s.__hash__())\n","print(s.upper())\n","print(s.replace('o', 'o World!'))"]},{"cell_type":"markdown","metadata":{},"source":["In the above example, a string-type variable s not only stores the string data themselves, but also a list of methods we can directly call by quoting the variable itself without extra function definition or import. Those functions defined in a class are also called **methods**, to differentiate from those stand-alone function definitions.\n","\n","Another impact of encapsulation is to create a new scope of variable values that a program can access. Those variables associated with a class are called its **attributes**.\n"," * Local: variables defined only in function code blocks.\n"," * Global: variables declared in a *global* environment.\n"," * Class: methods can access to its own attribute data by class or by its object instances.\n"," \n","Let us first see how a class is declared below:"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-06-28T20:40:09.409198Z","iopub.status.busy":"2021-06-28T20:40:09.408829Z","iopub.status.idle":"2021-06-28T20:40:09.420902Z","shell.execute_reply":"2021-06-28T20:40:09.419622Z","shell.execute_reply.started":"2021-06-28T20:40:09.409165Z"},"trusted":true},"outputs":[],"source":["class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n"," \n","x1 = Person('John', 'Smith') # a Person-class variable is created\n","print(\"Instance attribute: \",x1.first_name)\n","print(\"Class attribute: \", x1.retirement_age)\n","print(\"Class attribute: \", Person.retirement_age)"]},{"cell_type":"markdown","metadata":{},"source":["A class is declared using *class* keyword followed by its given name and then a colon mark \":\". Every Python class should have a built-in method called \\__init__(), which is called by Python automatically whenever an object of the class is created. For example, when we run a simple code:\n"," \n"," i = 5\n"," \n","Then the \\__init__() function of the integer class is called to create an integer object to hold the value 5. The process is automatic without need for the user to intervene.\n","\n","An important task in the \\__init__() function is to initialize the class variables or attributes. In the example above, we see that three attributes are defined, namely, *self.first_name*, *self.last_name*, *self.age*. They are called instance attributes because each Person class object should have its own attribute values for first_name, last_name, and age. \n","\n","The use of keyword **self** indicates the scope of the attributes is within each class instance, and the reference to the instance is indeed by the variable *self*, which is passed into the function \\__init__() automatically by Python without the need for the user to intervene. In the code above, when *x1* is created as a Person-class variable, *self* then will reference the variable *x1*.\n","\n","In addition to *self*, we can see that the function __init__() requests two additional arguments: *first_name* and *last_name*. In this part, *first_name* and *last_name* without the prefix *self* represent the input arguments, whose scope is only local; while *self.first_name* and *self.last_name* with the prefix *self.* represent the instance attributes whose scope is only within each instance of the class.\n","\n","The second type of scope in Python classes is called **class attributes**. In the example, *retirement_age* is a class attribute. The value of a class attribute is associated with the class that will remain the same for all class objects. A class attribute is defined in the same scope of other class methods, and it must be initiated with a default value at the time the class type is defined. \n","\n","In the sample code, since *retirement_age* is a class attribute, we can query its value by referencing *Person.retirement_age* without actually creating a class variable. This is equivalent to querying the same attribute from *x1.retirement_age*.\n","\n","Finally, we see the case that not all instance attributes need to be assigned a value in function __init__(). In the sample code, *self.age* is initially set to a default value **None**. The value is a special *NoneType* class object. It is special in Python in the sense that there will ever be only one instance of the class. Any references of the NoneType value only point to the same object. Consequently, one can verify if the age attribute is None or is equal to None:\n","\n"," * x1.age == None # When compare value\n"," * x1.age is None # When compare object ID"]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2021-07-23T16:37:53.561334Z","iopub.status.busy":"2021-07-23T16:37:53.560956Z","iopub.status.idle":"2021-07-23T16:37:53.575051Z","shell.execute_reply":"2021-07-23T16:37:53.573822Z","shell.execute_reply.started":"2021-07-23T16:37:53.561298Z"},"trusted":true},"outputs":[],"source":["class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n","x1 = Person('John', 'Smith')\n","Person.retirement_age = 80\n","x1.retirement_age = 65\n","print(x1.retirement_age)\n","print(Person.retirement_age)\n","\n","x1.age = 40\n","\n","x1.years_until_retirement()"]},{"cell_type":"markdown","metadata":{},"source":["Next, we expand the definition of the Person class, and see examples of how instance attributes and class attributes are updated by the class' methods.\n","\n","First, it may come as a surprise that Python does not have protected status for attributes in classes. As such, the value of any attribute can be freely queried or assigned to new values outside the class definition.\n","\n","On the other hand, directly altering attributes of a class is not recommended in OOP. One leading reason is that the attribute values may need to satisfy some conditions for it to be valid. For example, it is reasonable to require that a person's age is nonnegative. So if the *age* attribute is modified outside the class, this condition may not be enforced, and the object may end up storing an invalid attribute value.\n","\n","A principled way to remedy this concern is to provide built-in methods to update class attributes. In the built-in methods then, all the boundary conditions that concern the validity of the attribute value should be imposed. One example if the method *set_age()* in the Person class. In its definition, it first checks if an age input is nonnegative. Only when the input argument passes this condition, then the attribute value is updated. Otherwise, it will raise a runtime error using the function *ValueError()*.\n","\n","To update an instance attribute, Python needs to pass in a reference of the instance object when the object's attribute is being updated, because the scope of an instance attribute is only within that particular class instance. We can see in *set_age(self, age)*, this is done by passing in the first argument as *self*. Once the method is defined with the first argument used for referencing a class instance, the passing of the instance reference is automatic by Python and it does not require user's intervention.\n","\n","A somewhat unexpected rule in Python is that *self* itself is not a reserved keyword, it is merely the first argument included in class methods that need a reference to its class instance. To this end, the argument actually can be called by any valid variable name. For example, in the subsequent method definition *years_until_retirement()*, for just the purpose of making this point, we rename this argument \"selfish\". Hence, referencing the instance attribute *age* will become *selfish.age* instead of *self.age*. \n","\n","Note that the fact that the reference to a class instance \"self\" can be renamed to other valid name does not mean that practitioners should pursue this option at will. Using the naming \"self\" is universally adopted by most programmers. Therefore, following this naming convention improves the readability of your code when shared with others.\n","\n","In the same function *years_until_retirement()*, we also see how the function can reference a class attribute *retirement_age*. This is done by providing the class name as the prefix: *Person.retirement_age*. Since *retirement_age* is shared by all instances of the class, *Person.retirement_age* is a proper way to reference it. "]},{"cell_type":"code","execution_count":null,"metadata":{"execution":{"iopub.execute_input":"2022-08-12T17:15:09.116841Z","iopub.status.busy":"2022-08-12T17:15:09.116487Z","iopub.status.idle":"2022-08-12T17:15:09.131332Z","shell.execute_reply":"2022-08-12T17:15:09.130323Z","shell.execute_reply.started":"2022-08-12T17:15:09.116809Z"},"trusted":true},"outputs":[],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n","\n","x2 = Person.fromBirth('John', 'Smith', 1990)\n","print(x2.age)\n","\n","x3 = x2.fromBirth('Jane', 'Doe', 2000)\n","print(x2.age, x3.age)\n","print(id(x2), id(x3))"]},{"cell_type":"markdown","metadata":{},"source":["Next, we discuss the type of methods in a Python class. There are three types:\n","\n"," * Instance Methods: Most common method type in class definition. They interact with instance attributes via \"self\" reference variable.\n"," * Class Methods: They interact with class attributes and other class methods via \"@classmethod\" decorator.\n"," * Static Methods: Typically utility functions that do not interact with either instance or class attributes. The decorator is \"@staticmethod\".\n"," \n","In the above expanded Person class, we can see the declaration of a class method called *fromBirth()*. When a method is declared as a class method, the first argument passed into the function will reference the class itself but not the individual instances. Because of this reason, by naming convention practitioners have chosen a different name called \"cls\", rather than using \"self\" for those instance methods. \n","\n","The purpose of the class method *fromBirth()* is quite useful for classes. When a code creates a class object, if we need to have alternative ways to initialize the object, we can define a class method with a different set of arguments. In the above example, the argument for calculating the age of a person is provided by their birth year. Therefore, one can indirectly calculate the age by using the current year minus the birth year. The imported module date has a built-in function *today()* to read today's date from the computer. The return then has an attribute called year.\n","\n","Since \"cls\" references the Person class, then the following statement will trigger Python to call the default *\\__init__()* method with the proper age now calculated from the birth year:\n","\n"," cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," \n","We also see an example of static methods. Static methods do not carry any references to the class or its instances in its argument list. It is a convenient place to encapsulate useful utility functions. In the above example, validating whether an age is greater than 18 is a useful utility function to describe a person, but the condition is independently verified separated from any instance or class attributes."]},{"cell_type":"markdown","metadata":{},"source":["Finally, we examine the mutability of class objects. In Python, all user-defined class objects are mutable. As such, we shall pay attention when we assign or copy one class object to another."]},{"cell_type":"code","execution_count":14,"metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["x1 ID: 4496301072\n","x1 ID: 4496301072\n","True\n","x1 x3 IDs: 4496301072 4420116432\n"]}],"source":["from datetime import date \n","\n","class Person:\n"," ''' An example class to show Python Class definitions'''\n","\n"," retirement_age = 65 # Class attribute\n","\n"," def __init__(self, first_name, last_name, age = None):\n"," if type(first_name)!=str or type(last_name)!=str:\n"," raise TypeError('Person class initialzed with the unsupported types.')\n","\n"," self.first_name = first_name\n"," self.last_name = last_name\n"," self.age = age\n","\n"," def set_age(self, age):\n"," if age<0:\n"," raise ValueError('age attribute in Person must be nonnegative.')\n","\n"," self.age = age\n","\n"," def years_until_retirement(selfish): # The use of selfish is a joke, it serves the same purpose as \"self\"\n"," until_retirement_year = Person.retirement_age - selfish.age\n"," if until_retirement_year<=0:\n"," print('This person has retired')\n"," else:\n"," print('This person has {0} years until retirement'.format(until_retirement_year))\n"," \n"," @classmethod\n"," def fromBirth(cls, first_name, last_name, birth_year):\n"," if type(birth_year)!=int:\n"," raise TypeERror('birth_year must be an int')\n"," \n"," if birth_year > date.today().year:\n"," raise ValueError('Given birth year is greater than current year.')\n"," \n"," return cls(first_name, last_name, date.today().year - birth_year)\n"," \n"," @staticmethod\n"," def isAdult(age):\n"," return age > 18\n"," \n","x1 = Person('John', 'Smith')\n","print('x1 ID:', id(x1))\n","\n","# Make some change in x1, this does not change the ID\n","x1.age = 70; print('x1 ID:', id(x1))\n","\n","# Assignment points two variables to the same mutable object\n","x2 = x1; print(id(x1)==id(x2))\n","\n","import copy\n","x3 = copy.copy(x1); print('x1 x3 IDs:', id(x1), id(x3))"]},{"cell_type":"markdown","metadata":{},"source":["For a mutable variable, assignments such as *x2 = x1* in Python mean making variable name *x2* to reference to the same object as referenced by *x1*. In other words, there is still only one object. Consequently, changing the object content from x1 variable's stand point will also change the same content referenced by x2. \n","\n","To precisely create two independent objects but copy the content to be identical, Python offers a module function called *copy.copy()*. We see the use of this technique at the end of the above sample code. We may verify from this exercise that *x1* and *x2* share the same ID number, while *x1* and *x3* are different."]},{"cell_type":"markdown","metadata":{},"source":["# Exercises\n","\n","1. In Python design a class named Vehicle. A Vehicle class should contain the following attributes:\n"," \n"," * Brand: string type\n"," * Model: string type\n"," * Type: set type{'sedan', 'convertible', 'SUV', 'truck', 'coupe', 'van'}\n"," * Fuel_level:float type in percentage\n","\n","Among the four attributes, the first three should be initiated when an object is created. For the last attribute, design a check_fuel_level() method to print the fuel_level value, and design a set_fuel_level() method to set the fuel_level value.\n","\n","2. When the functions check_fuel_level() and set_fuel_level() are not encapsulated as built-in methods for the Vehicle class, please code the two functions as stand-alone functions that will take a Vehicle class variable as the input argument. Please also summarize the advantages of encapsulation of attributes and methods in object-oriented programming.\n","\n","3. Design a League class, representing multiple basketball teams competing in a league. The class attributes should at least include the total team number and each team name. Also design relevant methods to set these attributes.\n","\n","4. Further expand the above League class, and add an attribute called schedule. The schedule lists a sequence of matches where two teams will play a match against each other. Assuming there are 16 teams as an example, design an algorithm to automatically generate 30 matches where one team to play with the rest 15 teams twice, one at home court and one at guest court."]},{"cell_type":"code","execution_count":81,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["convertible\n"]},{"data":{"text/plain":["'Fuel at 20% '"]},"execution_count":81,"metadata":{},"output_type":"execute_result"}],"source":["#Q1-2\n","class Vehicle:\n"," VT = {'sedan', 'convertible', 'SUV', 'truck', 'coupe', 'van'}\n"," def __init__(self, brand, model, type, fuel_level):\n"," if type not in self.VT:\n"," raise ValueError(f\"Invalid vehicle type. Valid types are: {self.VT}\")\n"," self.brand = brand\n"," self.model = model\n"," self.type = type\n"," self.fuel_level = 0\n","\n"," \n"," def set_fuel_level(self, level):\n"," self.fuel_level = level\n","\n"," def check_fuel_level(self):\n"," return \"Fuel at \" + str(self.fuel_level) + \"% \"\n"," \n","def set_fuel_level(vehicle, level):\n"," car1.fuel_level = level\n","\n","def check_fuel_level(vehicle):\n"," return \"Fuel at \" + str(car1.fuel_level) + \"% \"\n"," \n","\n","car1 = Vehicle(\"mazda\", \"miata\", \"convertible\", 10)\n","print(car1.type)\n","car1.set_fuel_level(20)\n","car1.check_fuel_level()\n","\n","\n"]},{"cell_type":"code","execution_count":90,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["{'t5', 't2', 't6', 't7', 't8', 't3', 't4'}\n"]}],"source":["#Q3-4\n","class League:\n"," teams = set()\n"," totalTeams = 16\n"," schedule = {\"Home\": dict(), \"Away\": dict()}\n"," @classmethod\n"," def addTeam(cls, *Team) -> None:\n"," for t in Team:\n"," cls.teams.add(t)\n"," cls.totalTeams += len(Team)\n"," @classmethod\n"," def getTeam(cls, *Team) -> bool:\n"," for t in Team:\n"," if t not in cls.teams:\n"," return False\n"," return True\n"," @classmethod\n"," def removeTeam(cls, *Team) -> None:\n"," for t in Team:\n"," cls.teams.discard(t)\n"," cls.totalTeams = len(cls.teams)\n"," @classmethod\n"," def setSchedule(cls,Team) -> None:\n"," if Team not in cls.teams:\n"," raise Exception\n"," diff = cls.teams.difference(set({Team}))\n"," print(diff)\n"," cls.schedule[\"Home\"] = diff\n"," cls.schedule[\"Away\"] = diff\n","\n","\n","League.addTeam(\"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\", \"t8\")\n","League.setSchedule(\"t1\")\n","League.teams.remove(\"t1\")\n","\n","\n","\n"," \n","\n"," \n","\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"markdown","metadata":{},"source":["# Challenges\n","\n","1. Design a class named BankAccount. Attributes in BankAccount should include customer_ID and cash_position. Please define and implement relevant methods to update the content of the attributes, such as set and get customer_ID, deposit and withdraw cash_position value. Please also include necessary sanity checking to make sure the attribute values are not out of bound in real world use cases. For example, cash_position should never be negative."]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]},{"cell_type":"code","execution_count":102,"metadata":{},"outputs":[],"source":["class BankAccount:\n","\n"," customer_ID = \"\"\n"," cash_position=0\n"," amnt = 0\n"," @classmethod\n"," def GetCustomerID(cls,identification):\n"," customer_ID = str(identification)\n"," @classmethod\n"," def TNSCTN(cls):\n"," wthdORdpst = input(\"withdraw or deposit?\")\n"," if wthdORdpst == \"withdraw\":\n"," amnt=int(input(\"how much withdraw?\"))\n"," if amnt - cls.cash_position <=0:\n"," cls.cash_position-=amnt\n"," amnt = 0\n"," print(\"NEW BALANCE:\",cls.cash_position)\n"," elif wthdORdpst ==\"deposit\":\n"," amnt=int(input(\"how much deposit?\"))\n"," if amnt >=0:\n"," cls.cash_position+=amnt\n"," amnt = 0\n"," print(\"NEW BALANCE:\",cls.cash_position)\n","\n","\n","\n","\n","BankAccount.GetCustomerID(\"glizzygobbler23\")\n","BankAccount.TNSCTN()\n","\n"," "]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30042,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.18"}},"nbformat":4,"nbformat_minor":4} diff --git a/Part Two/2-1-motto.py b/Part Two/2-1-motto.py new file mode 100644 index 0000000..f070b0e --- /dev/null +++ b/Part Two/2-1-motto.py @@ -0,0 +1,13 @@ +import os + +path = os.path.dirname(os.path.abspath(__file__)) + +file = open(path+'/'+'motto.txt','w') +file.write("Fiat Lux!") + + +file.close() + +file = open(path+'/'+'motto.txt','a') +file.write("\nLight Speed!") +file.close() \ No newline at end of file diff --git a/Part Two/2-2-Flags.py b/Part Two/2-2-Flags.py new file mode 100644 index 0000000..2ad45f3 --- /dev/null +++ b/Part Two/2-2-Flags.py @@ -0,0 +1,25 @@ +from matplotlib import image +from matplotlib import pyplot +import os + +# Read an image file +path = os.path.dirname(os.path.abspath(__file__)) +wales_flag = path + '/' + 'wales-flag-xs.jpg' +lenna = path + '/' + 'lenna.bmp' +bottom = image.imread(lenna) +top = image.imread(wales_flag) +# Display image information + + + +# Add some color boundaries to modify an image array +edited = bottom.copy() +for width in range(top.shape[1]): + for height in range(top.shape[0]): + edited[height][512-250+width] = [ + (top[height][width][0]), + (top[height][width][1]), + (top[height][width][2]), + ] +image.imsave(path+'/'+'lenna_with_dragon.jpg', edited) +pyplot.imshow(edited) diff --git a/Part Two/2-3-sense-sensibility.py b/Part Two/2-3-sense-sensibility.py new file mode 100644 index 0000000..96e7601 --- /dev/null +++ b/Part Two/2-3-sense-sensibility.py @@ -0,0 +1,43 @@ +import PyPDF2 +import os +import string +import time + +start_time = time.time() + +# Open PDF file +path = os.path.dirname(os.path.abspath(__file__)) +file_path = os.path.join(path, 'Sense_and_sensibility.pdf') +file_handle = open(file_path, 'rb') +pdfReader = PyPDF2.PdfReader(file_handle) + +frequency_table = {} + +# Iterating thru pages +for page_num in range(len(pdfReader.pages)): + page_object = pdfReader.pages[page_num] + page_text = page_object.extract_text() + words = page_text.split("\n") + for extracted_string in words: + # Clean the selected word + list_of_string = extracted_string.split() + for chars in list_of_string: + if chars.isdigit(): + pass + if chars.isalpha(): + if chars in frequency_table: + frequency_table[chars] += 1 + else: + frequency_table[chars] = 1 + else: + chars = chars[:-1] + if chars in frequency_table: + frequency_table[chars] += 1 + else: + frequency_table[chars] = 1 +end_time = time.time() +file_handle.close() + +total_distinct_words = len(frequency_table) +print("Total number of unique words: " + str(total_distinct_words)) +print ("time taken: " + str(end_time-start_time)) \ No newline at end of file diff --git a/Part Two/3-1.ipynb b/Part Two/3-1.ipynb new file mode 100644 index 0000000..4996e3a --- /dev/null +++ b/Part Two/3-1.ipynb @@ -0,0 +1,73 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from datetime import datetime\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits import mplot3d\n", + "import os\n", + "import numpy as np\n", + "\n", + "\n", + "v = np.array([2., 2., 4.]) \n", + "\n", + "fig = plt.figure()\n", + "ax = plt.axes(projection = \"3d\")\n", + "\n", + "e0 = np.linspace(0, v[0],1000)\n", + "e1 = np.linspace(0, v[1],1000)\n", + "e2 = np.linspace(0, v[2],1000)\n", + "ax.plot3D(e0,0,0,'red')\n", + "ax.plot3D(0,e1,0,'green')\n", + "ax.plot3D(0,0,e2,'blue')\n", + "#Ask JOSH19!!!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Part Two/3-2-MatrixDotProd.py b/Part Two/3-2-MatrixDotProd.py new file mode 100644 index 0000000..f0e5c43 --- /dev/null +++ b/Part Two/3-2-MatrixDotProd.py @@ -0,0 +1,13 @@ +import numpy as np + +p1 = np.array([[6,-9,1],[4,24,8]]) +p1result = p1*2 + +mi = np.eye(2) +m2result = mi@p1 + +p2 = np.array([[4,3],[3,2]]) +p3 = np.array([[-2,3],[3,-4]]) + +rop3p2 = p2@p3 +print(rop3p2) \ No newline at end of file diff --git a/Part Two/3-3-Slicing.py b/Part Two/3-3-Slicing.py new file mode 100644 index 0000000..f8893da --- /dev/null +++ b/Part Two/3-3-Slicing.py @@ -0,0 +1,8 @@ +import numpy as np +a3 = np.array([list(range(i * 10,i * 10+6)) for i in range(6)]) +print(a3) +a = a3[:,1] +b=a3[1, 2:4] +c=a3[2:4, 4:] +d=a3[2::2, ::2] +print(a,b,c,d) diff --git a/Part Two/3-4.py b/Part Two/3-4.py new file mode 100644 index 0000000..dac5222 --- /dev/null +++ b/Part Two/3-4.py @@ -0,0 +1,21 @@ +import numpy as np + +def swap_Rows(M,a,b): + if a >= M.shape[0] or b >= M.shape[0] or a<0 or b<0: + raise IndexError("Row Indicies are out of bounds") + temp = M[a].copy() + M[[a,b],:]=M[[b,a],:] + + + return M +def swap_Columns(M,a,b): + if a >= M.shape[1] or b >= M.shape[1] or a<0 or b<0: + raise IndexError("Row Indicies are out of bounds") + temp = M[:,a].copy() + M[:,a]=M[:,b] + M[:,b] = temp + M[:,[a,b]]=M[:,[b,a]] + return M + +v = np.array([[0,1,2],[3,4,5]]) +- \ No newline at end of file diff --git a/Part Two/3-5-MatrixArray.py b/Part Two/3-5-MatrixArray.py new file mode 100644 index 0000000..c01a337 --- /dev/null +++ b/Part Two/3-5-MatrixArray.py @@ -0,0 +1,12 @@ +import numpy as np +sample_list = [1,2,3,4,5,6,7,8,9,10,11,12] +def set_array(l,r,c): + sample_array = np.array(l) + shaped_array = sample_array.reshape(r,c) + return(shaped_array) + +x=set_array(sample_list,4,3) +y=set_array(sample_list,3,4) + +z=x@y +print(z) \ No newline at end of file diff --git a/Part Two/Sense_and_sensibility.pdf b/Part Two/Sense_and_sensibility.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b504950b2b4745f8220a0237fbb2d7c386f0441f GIT binary patch literal 659910 zcmeFZWo%>NlCB$OX6B^BiNnkc9cE@`W@ct)=5(0TVPiE=8Sar=xEc@Z%>06jYl`ToJo0t`D5Baxk$PUi2mb%m6Mg8iJk55St1S=06hoiKd$Q# zF$g=_+5a~~gse?WjQ^W4%8nK`|IH9VN9X@$gs`2h^WQo;5pn!`JrwPn4V+E>9y5qL z+PT;h{l8`Z_xB7+f7{?_VC!UW@VEX(9)GLx_l$^%tA&w?qPP$dAK%{wY5r{sA0Lc~ zt?@rP_m9l~-a!U23u|W+M>%TV?@58+YK=!pJ%m6EiHj~NrmF#V=9YzZGW`((*l9`Fmz6o)`B*sw1)oPn~bfJ>Olv3 zglI-{lhM>MokXXn$qeQy^XzGou2TVI-hp>Q&wC6%m@dMDZceZI;(LCh$R7uz-RAA3 z;uDRhEvO8!KMFT=0dFsn4t_)(PkV0_8mX~K&Y7mn^Vehg&~v)SE)Gc`sXz8eQ& zYH_{xPodHs1E`TFJB~jBKxQJ!Es$f(k}Ocl)IgE0V$`|;w=-Kaf{u6XfT>V>>CMu1 zF4y1qN2ktAKMzFNYM=1oEzRqdR*+?5R(h}}t|DU|X}7||s?tlXvzm^`Zp56* zJAwi&mlo7ia88rgvG~o7RKC;UOK~r#k#{2KrLb+itGo}zn22uJ7!10Q}ixVYPG-<+u(rC`h1;` z@U(;1b4!CsqAY-5<)Qgy1W?_nIu1*5`EVKqq9VkF(bG`81uJJF0kE#hg3x|S#=2O%jGA zugJR5){N8TtEj79KFr*xO^XA{8`QIkKOEGQ*FCQ^Z*!GEAdDYPGQ!BNt$^`_!&Lx? z++#|IoYUg#6Num^uqo26Ju z1pYQ`Cep6w{G^K4T>AjqlmKO) z&&7Q|SI51^7iDC~$a?HKC%zl$!icAaQ4Jv?WG`ghPKqoXA2DyrVf1=T zB`)SxY#ym8I-T#dn5zjhYnDV}p&q>#Or>+N-|Uxyz|b1;;bYHnkAN*a0^5Kc9cBQQ zgB@fSGyTVM|5%G)MP)PCi8z|K1vMbF)YZ|ft39|!k|xxE2+i7UMeD5ZfDy463geEN ziuyBFVc|t{ML*_2(klKdKeOM!q%P0A(j`ZPxDtO$(vohZx4CfrQhV1NAKS0VasE zMZvBei%7h3QHdyw?kp#`UG$0+2ap{08;oR%>M?$61w@?KYTl%2*-!nUY1B2kbL6Wzd>eQn1BCc+4x_J!2eo6IR9e-`5y%M|AdqO3j_c#{>vEP z-%|e*5WvL30{Gt`KugE&um#=cxlaF2B1U>f4nxep|{9iOnKM1|qH`DpMf4#g+bopI4Dov^m zb*ySvHnh7xE?jB)VAA{k&Xem}zsb3>L+m%>KieuB9?a<%-#6MnTL;dQP+OVM_|>+p zjeg#sKE)PQW!R|Dn)3E4*DOno*Hvk~9#*^+vmRQ$zFuyQW7GY}y#!{pUIe2hTGYx` zs)~QP?44w8zu{4Yz(sYXC_k30!;)edR4My$&v5=k*FAt}1V3_quD~(A-eFnTRCoJU zxts#Cjh~{5aG#^OlWETAb&+CYX4d$AIN^JIZ8tRYeeU+zn`TNc-8e1n6a@}ltH^zz z1!;|9D*KoT@Ti{#Kore2cu#NR3N%2g)8Ffp+`=l06L2YTfBJVyvg&BW5fo=xjjgG~ zf;p<(JOi6sBf(}4Z)4}gyD>jfoD{OBnngule$?q${uqaRb-;A7YQZn`4;WSAiPD$H z0=C)2@#CQf$DY88vw?%}?PY&o$FnV6=&UXIa50V2w#kUL4pLTyzNm>Glr0=nOSgv; zpH->ZO4Ya#?3_kgnnQFu)(InSyc0Jjh0-_-_a-zu=gv77hC**#?JLDuAhQ+c$wZp^ zeJ{C_mAetK#OX!7b!9mS4OEd}!GeJ-1EBzOVD>nr3B<&Y-j3D<6g2l6Gx+o#apxfo z4HFnbR4R_2qzW#6pG*8OKQ3;8zYL0@9?_Bzfe2AV zpKu_kMgq*ZEf~zVBBI0Yx zjEF?GfYf?YRGA-1<4Fg7!Fm8~-s8Gt-F)IbIYY4u|AAVmyeQ14e(a$Muj5Jo62afW z_5)Z0R!F3PPf;;l;Ac!rh&H(pnHA2{g|&%6O}$xQY3KdW+L=)+>2uU|kL zkfLcJqFK_ZSVYszeVz;M(M`Fx783m|YV%wG%W58g<&_(DIHZ0#E*Z)I=oJ1IUy9jY zfvR?eO%ve!8e%E4Zuw=1!)?xKb=r$sVTUekUbdC2D)Bv}?=s-;mP4w1fPX1BiPAG| z3cdvOea9^(uYW`Mg~*>$I6jsZu={}T9KHs5JU_HST>G$MG(c%bkx(OR z`#bwEahUaTS^z{4w}p!Yt2hb>yf@3Ej|EZd$8O6??PU=CH&26w%kglkt;0BalN=P*mX+rp#*VyZr9soZ>b8za= zfkJ3cSBUD#+|7`A_@65-$S;scm!O2wjq11i1~TTQDs+Q^UO6mMcr1N;^X$-+4W&K?&Nr~ z7+H_rW|)S#rDbL90v@2(xiCX2(+w$O)s|d9PUsVPo1}=bgjqsj@HK}=gvS8lp&0Ho z(%DGTnAj$QN1+eZFOdCVLYTWX)xy^886=sFqK($36>-2hI+q4iSDGZL;ZED7k=mT; zS;Ax}9OP1%+eaT#oDF#*>?y{3(W}t%46cVmt!hLj%0ysu9TLWX%pgM94*Tav6i&Y38YLUdJ1IJH!1BT*M0jZhaf2wh0- znxH*)IGu70?@Ebx1H?gmlX%ZU;bK&2@XQeNyPb<~1|K6wr#C#J6O>SkPTbxu`Sa#0*6&M_`$7oYs7t9hu z*Q?xpqQed7Of3}lLrcDX8&Du=em@}92r}(pN+E}AG9)o8Nb$fIu3;GCXFIVq@Pxj) z7ox2@S`$>TNR>1-!(6Q|5xTw>e|8w9G+v8ji`iduS30kNC4#madC1BHRi!@!QtPC>TA({#!&K;NuQa0 zEcxCYvgX7`p=e}bGsJA9o?M)1j;&_1e3@y16C;EMY@`+@X*`D*ZydlGe?9ifZfEn> z$FvmTlU|$NA73RodrX;4xRV{0G`bZN=?xlSJFKOW#1`0Ag30)meEG5wA5fj`T%12o zH$h|zbaR_5K!V(-cmh)qhh3yb`R+uQ<~-pX@#JJWhc+L_uwZ;lx709C0u!9i;2?H< z;LLg$L8KlEn^>=_zKv?pB>gD=z2f)%tukq*HU#Nw#DD5!!0YGx%AH%LcAeMB(Hd!5 z^=PW2T`7h>T{&i9EhV8GM0d5>LlHzsn)#m`s9XWyzqx8lg#wcq4HlK%mMz9`k#SvX3qZ%AC;8Cgdpcy<6daJil>b)q@+k zX*r+Tidw7FQ}nruA(Ug7B0IAI=vU)EJ4l<3X#O`Ue^rl@D=w-UYD(|b-9bC=Q2)7dpJmvs>X!0$C%1v5QuL{y z@|LcAK0aS;j5v({L+V}XD!S6T#M@kj#p__>EYDBT&F-utcpbCnPEGf-ru?(6_VGJ* zMrdE@@Z|$Z8Ky6*+%so!nxc8>YI-oueSWXrl^RbbyWF*``;D)(!V}k3*QaWs7O^0+ ze7mJ{wwW4RPeYFehOOU1+6j3qA<@M(sZZU6u^+=bdi)JTq^Ylp?KXe{iA-%-k8>-i z6%g2mUYD)M;I^zHW0q}JG*3q_Z?OYH2L$J?g3YBCLlFOHWiY}7s<_s4qd5>2-Ll;r zEP;*VBu%3d?!}bB!C|mc0?$ZvJUDv`4gd48hD4hooz)ksHUtwkpf6eM2dyV)?m|a( zU36m!eVi1B5`>eQ8yN zqBMs0JK1lPjhvQ8vLQ3ai5vsfk$F4`+w9|9NWUuC%FBSu@z2c3aPp-bO>EjNL$8)! z61RDLDN{2rhA!a16+Q{%WfqUi-*n6s8O?Dk#R?u^I7Et((5IjW$Xw9PL+JlRrhwZa zh}q#m2Py}#F8oL&zMqWTrx3o=@B+Ihw#9-e?G;1j(VxN)O-Z5{`84=kjBy#!wnbUe zn8L*2M`Jb^atZA(dcJxlZpneX=ySfnQycPO8BKB(k{$u^nuq7umXL<;c5JZ`1ivm8 zrYUtR>=96Ol-?`l@sx?gEeM0!?}n!I!BbrZlTun)RY*-HrzT0onHrfEgMxdn4khH| z2muoZ+x22OMG1t&k1Rz=?JQF+&4oY^8g=f8?P!wcAGLg7<4Hn@>$i1&plEi4j&w4a z-!8qI*fS(QqdAX@R4m~h?MZr3VVPNDW2Y;wJ1I66lu7DO^>a>c1`1x@W*%w(4qD{U z)u9yEw*JVc4JIiBhnEx9UKYj(qLe55^V4OM1FTE*A}Ti6P%Seu&dx@LHos_%E2tXt z;R$eA#QF;2B0!fNO_ zuVIE2wf*rLks{aRf>D60wPS7yF~>uVi0G-X+7kRlqpz9ZdYpRK)_QgYm=2Jx$M(I% zZYm_6@zpR=^GMvVA|){sIu{&smQ%TkVt?aaQUD+~6oqP!YzhbtV_Hn&qz?zGZH!2+ z4^PIWgKZubx6=23;e^HkT71`$#H^O zRa#^Ke<(q*!zAIo{t|#BXHUMLE~8U{F-DObFgP)wkBgTv;BlH(IQn_iKF4qCKbWHx zLH4ODUe(RcAUGc5BB7MzWH00r{alPx&CA3l>&_OCSSBV8m>}6R*)L3S@xL2Ow#||gk;|m(dKcZOvxrDF#W_(*7i^T~YT);oOkN!G60jucZja3QEG`k#%6-uQa+8CV%6ELDpBeJSk+O zlhS*~av9~_LBKX1VR_SLrufWENVQZ^5Rx4g*6iXSD>uTQl&9$ z8!{eQM@V=SXb*zo-3a40tA3I!znc$hWO5-`2ZOaDU#LCQ&^OCjL4LyRnf1qJ;$ZXz z6kPk4?p#^ax_OwR+J$CqfsGlJZwIhBk3En*ZDZ_r(+wqD7Fi?^p~qPY8xhKgZF3b^ z{A9yz3HKO6pf7M$tb!vf<-n-vu(X!`w11GF9CFv14wKwA60BB$im+L6MNT>yyN4#e z?`1MYEnNtwC5}k^(er>tJO6;h`KCNRS4)d7JmglHYWXsTsWDdEkHgeafB-0i$YPey2 z8OrOX$rS0fZP|r&`)ZmwpKT{rEUVGv(gSaWH0f;glm5tYgvzlQpBHPtmoBm|qZ#mi zg-dH#MOS9UMo-^O*-;{a%-TRM>lI&ak8ul(VAeWw_R(gLv~i3f$v;fwf2-T!B?-ARvINi9 zd#@*B);3zN{m@=<9kA!?*U*hSzt7R04+FhvT-KRmvo88drGn_MbY0AgqmMuJN;lu9 zX5Yvp)urrKUt&()MTW1QZ5L8Ld%u+H77f`tp-ziFdWQXgES~(t{|m%s{trC+AKm+3 zs(Z8i>vZpbr2eN68^HXZb#L4ebf1+vtkV)Yfw_-TFn+L~N@`4rg%#jUqVZwGZf)Fi z*KoYdG@jo+Gu=*UiI*Z`iIqCQg~VCw`1H@Y?=IIFkH%fva<_kVZ-txN`=qx$@eif) zG57wuJdgXhUPDojKab6xkFJ%ajbAU1KR=J&jQ>oeDaZNV4%`hME}$;x^<>P*)u>I} zdAF&K` zv$@ozxQcsKve}-hHAtV8SS!BJ1gK# zmfeztcTUyuyUL>A2*Q^_M22`kk!6Z%8f(e!sZMNks@$W!ySLs-@4(N2j^IRN4`KZ+ zixid}TpWf|mxfylKoIb>2E+~NhyfE4>TXs^$1ooLCkE|nMQ<@T*nduaeD*HuuBgAO ztUi0Y>ya2_8Zfuzi=>vD*KIgESjdUC2{?EvL|rNh-9--zRY}P!Qj5y2yv=WG^B=0` z!*k5}&TWLSxs|!#`H4#Z)dgA~dWEuPe~ zP~D7_4}jHsVKgF{#He@_`QQknED)lOJcbQ#=0Zn*#)c@ zZ)VjPGuc!2%F69%{^Tstcj4@@Obl3px|CakF3~`P!=Ng5w_{F+sGWc+!q{8 zcP|mE2gmW9)|&Bflc}V=^ClXV1)(SkT+OavH<-;1rkg7Fv#RxqRj z!|rr1-j=zHC~guTMoP|c>$P*6DzAc&Q&SyM@d!Cnzi0`cNtV0<-bmoC^hy~q_xhB^lltYly= zsh^1(N3gu&vT+%pQ=hQDd%Kq|X%98k|1lR=93wtPEk6NkDc_zRx8#+*mfpa^Q+3$9 zyhW)KSWcbyYHH2SUodK#1eg~=C!{c?&u#3oXXBt{()h*&?no$*%8_dTuxyxW+q7VuJwKj*YG)j*x>}WKd z^~CxE;Zf%;Md(|q{$O&(#yfYy!Lqd^5Oy4hn;~MtIN@Z%z(hPzQW`}YUoPY&J$qIZ z1(;e?7Q_Y>u}p&z+MGirbhZfy+sRwTQ>#Vbk^)Zm4t{a{{kHYxTWxaq*=Jk=BX@5U zfIJ-Fz(Ys`@b2@C1izYRAe96G+D+|`!3K)uJAbnNHob?-M+&hcR&J|j#4{zs0*Wk? zMs2KiDd!3;G&CXchuw+bbwioiemBx;9|ZpmnZR1oU6K(wMj~YOk{>?Vs{X7)UYNtN zaO8;OgpD+Py9E2`rKlI)(t=cQrwk*zU@%Cea)yXJ1T}`mn3X;{RSPIm`sk^vk!kDy z5<5@6e}_@whLumqrZhAOFpU!pikof^w}vGi46&VvT)Q}vrsSi#r2*C*Jw7Ypj3rp) zeX|HUU_N^bjm#DI=~4_S-BWO@Qz`V_n^Wr(-Z-#SO_`=1@S<*$@Pw!~q~Bi`dNFN) zhk7b0O%}Ea&S6Um6Bw>A*JjCA7k^CCH;NThf~_GMmh2?cG=YyjxojwI&9MuM3!}7# z-OIdX!pR%6iQ|T-h8j_bHe==!>LR^~=_0#b@RV?_eSJNF#!K329emY5C4y*OAzq`4 zMSiprTXb-@^sUMfCQ+l11D|(`Z#Cye`!kvHc&jlj<6PTbkJl6*`n>VhlHPh0zR9X# zNE8}|oj;|htLpC~3|!+e5-Fmewb5AowY>l}t~qhroU*3bFC5(4n!LLD8!}eXVI&~0)`KhoyaMq15b#QuzlR$9n8w9w2T$Y z!8aT^xX*(rPq7;R?6gF1G$kfHbyK^EiG?SLbt191Z@yr4?p9n^dg32GYUi}4>vPdB zlHJ)du5hO*l}>ep z4~qZ(#LBd0CC%=d!EyNTW80fr1d%Vij3nk!-gwWu`im9?8$xpZehxg`gP%`PB5F`3 z6UeGeYrwnj5Yks{5!!LpPT?$2(#C$k&R=P6=(u11TlP}f7-2QUcg0vX%uP{|4=gXu zCpdn{$fcQ-Kp9I2t}0e*7?@=&j5dERMUobWkAftAN`$6sgPD`ti%LljwwuR@P3zgD z@;p7y);x+LeiXI&Q)G`ASThCKrt~@%dIEWrES3FPrOwf|L`7+Vz?Uo%g$>nnUB7yB z{=iW?PTgh-8{52&X3Pl|vBf^!Z?j4%xoU7TcoopQ6a*>sP?u4!xWYz}zg3=NOUs!< zo!|nP6Xq-8e(E7c;^1l74hYmxY*$!)ZC}D1ziZ+{J+r3JzI%8}9}$1$>fAbN6<` zKf#Zk$KZDy`B}&y==pu$xO3~#arEW%YFH zqV4KL3VeTDY3$55=S-j>>lZ!REP)b*e3O#id~h19DDT`n2&` zRooTj`P`iE&mWpTQ-lM8-ul3L9B*DhFTI|1-)WV+l2~5C@M*^HM6zq15WqhPA_N{_zy@s_LX+3NkwrQA@A*sepYq zM{JM=DB#zx#|gWhSNpb9X3w!cU`u=|Zk)5q)BgRHkma>C^M^`@#WM)GZK(!41VL^M z$pQ7&W~T8Rd!J1fdIm!rGvt*O>=K9ZOmTieN5= z-y`$|@Vy{+?FAP=X0dvqmGC3`+U|dtJ9QpQ{oRh{*Y5!66&) z!fMtE@ft*}sOE85We+6B6)Qi#-FC4w(_otSiQm>QLK6(|VS|8#r7Xhd6* zvlAVpDHsq9j30G41VPe|vxAXY{;;hjnMe+!9x+3Oi_aSMqyhBjT0k@~tCgI-SJ@9*Tot?YH*sKtD5A~D4biG`5=u0bnJv#qzq)-)DL_l6uvT^ zbhI%<`wM*F7Iydl>T`GA44B-hA4nLIy}PkW@X+u$ooYK+bPqqD4w%?&RSW_}Zk`Me z?{{-8zedlZj~DlUn!?aO#&ekAWCRzUWJ?+&$JH72bi;+LCK{kwpQq2Wt%N*0*t6?{ zJn*o>5pLhh-$a$Oh`Lr)+sPPkwR9vKaK##J_rMyh!7wz^cBbUz_DAEHj{8#L#awR- z@&{VRnXVeP*SY>KuuQ%<74r}sq3?5N@mzVdm7jc59q%77D02~W>OI(iWkZ%2}Tpx}xJ<=vLSCVq2rpx3_5j~DrJ59R@S0=UL+{{GU1voix-gU7_l+^OB{o|4s zKHf^`L^o1Q8W$QspniR!&>;*RKDk;+!OEd6DL7apfmFMhI9R~!o%X67JWDN z?vX7&o%%>BI)9e5LR%NCu+1j7{^Nq+@fNuM0P;+7s9Sd!VYIo?R8dZ=ZFOaFvl^{s zUjqtAn$z^elUuPK!HRcy2sh&$0P?-m1WBGDYUBYp|6Ip&E>fJ4VagPlK*7p@*y}k* zZ680@p;u)X)M!Ynx65Z5Ons0SN+z>oj|vtMlqXq4xjp=M@~1yJ0kBYE7+YLtb(YYL zD-yA8#;uUmTna7iXGeE?m1I%K21FwW!`6k;F}i|*uBIEFe+?909eaGC${>mP-;JHv zyEOr84&{(v*Wfap305^Q*jbs?aRMDIs~%*Ps?DL`o&8~TmoUU)OhSM_1oW8G+-(qY zO(P%HbuBZ{`twA786QdfM0-^(fv3!`8!_3VD;&6XFD}VY!Wi@6slssG zi5PR*htwI*D(hA50T>##l~2k;8vQ9LT-qwQ86I=icZxsBSDso{G?Ab5Bsa|P{1|f) zS)xXXyiP@IzIGwp^hxAz)xtp4J90JdN)+0bA*r3y%>b19n;-aW&_zS65lokoc-p8e zAK@b0wiqFvSAA2aB+BAiqRTwiZ5=ymw1LbK$W^01?-v~w(5Bkf3VSanJK3{7<-wiV zRHiW1?otcNo({Wu_oKHnxLZjJ?t6v`YzrWHN{H)dk#B!y^l>BTp$=V4n|2#MZGBY4 z)L6>gd=|AK=GKcN0J?WfUfO?I|ImWVgogaH@m%H3$B1}zh+A?n>wpZ$hc$PfCEAW> zwLGe$B=Cg4XxnAJ$X3#O%4jY;0LeV}DpBnr@VtS%>u!-^VDQ=x3++G}78hmyFy&dX z8EG3AEwhZmzuNmzbqdqk`&9=@aWL_qw*AX*E{(*){p%7jdq%IF|7NUD-jy?#AvNkD zP)cfH?S({Vx-3i%^I;(G^O8Tvf9S>WtalD=hcbs>&Pcon(w2(1XwBFWD75H9a>x(3 ziiz&zzd+vq8G-t53}^k{SS|i_Gf;qkatMlvmF+)UE$nc`|AD;b7f07Xna8b%3j=+e z+?d$*(b?E!V)0>n*R-5vTiBjvX>i}4D$fs!O$U@58(h^ubM@p`X>OJsRaI7EMSCCK z!H8EDB6YXV{0|d#FNq809EmeOdS0LZ{+RJL$1d&pc9lMybp6thpEe<0#P3VC<$3Ua z5HUCMW7zM5sh8iSCmpfue$CtAr^e&y*~|oXH&onT`?Hqrm6P~;FMiKs?`!4ETVg>^ z?^UL!tUGa+h>w$X-1A;hoJIRDNIa)6obPq&bw@K&(X8fX{LvVX-!^{l zDXDcY_`WaE`5(Q%0o^Y^vDAyI!&2`t7NepKy*4%w?hqicR^@E;hSk4~b+U$8ZET^_ zK_BFXnn z5{$mmzT`Y2NXWybqy&f(xNhQz1Qy6%+-H(PjRo1?Dz_DK&a&-tC{`k%hqRa)d&Ldz zXABRs5cjR^B_IqmCaHZhgLGY8g4+1uJcsP_sjl}30i`0$kr_`osCGVrTqNC{)??~8~waWTeW-)ODaQ{HQg%QU5Z#tmj1A5s!K_BUteTD3Mt zI0%IT2UH3Og^`jJaI~8R~)?{-^y4N%VA9JBMYo6XNttG zEpUlblS-O5@#TE2)h+4)89~NoO083&CyUC1j_^FD9)%u}aa<`?2LU1KnbJ*suRi7m z$IP;pDaQ1zp-LK|4L_@WleZI7M_j>mHZ9JK^7CPdNbUKHQW|T4LPvd2OFSP4Vi4C}YjO%*GN}FK%;CyAo8k5{1>tN+)zZI$7?3qkxqcrNu)OYb-qAeq;6qgZPZo=ad9{NIOrASCzT0R zm-AzV5hd9XSSO3aS_IdU&R8Cy)=vw&a1pmg)tkT4#Zt*h(@EW4<8}RGH@+_N*Y@{8 zDdkZ}%o|g$p&v9Bte|=@DQusJfui7@<3H(wIt0~#_c^A16s%D*y31wzDQ1#o+!}ow z$TQfN!f>)rezwHU3#M!ehAg6R#SO@}WpgRe!qKB8K(1SeLg@=&DYbvz8h;1KW7@lJ zH~%!bExZ>9S!<&It+wbwB#qh z2$5X@u*@%A{xyd}T?4uT;wqXUOT`=xQyRvbX^IGcgnJdkm6TyM!k^2dLGUY~IO-EK zN9hsRjCycRAnVEqBRL!t8FOVhvhWlyt#&rsd}hJ@7TA8Nnb~T>=SOY;PsH6j`wbB)|(Kgz}Y>=^#i*)|g= z3!_(gyy+w8CaNI z4ya49l|-M_A8)< z$8$>L6h=YR1g&@vga|GqWtHG_Z^q498Z3SMHr2&3=LhQz87S>x`z0;TjIRtTC{XkV z-Ke-p;{^~Y(3$~Z>aj^rg#|6fu(61?4#Wu|Ez1vB|gEG@33Jc@}4HP%;CKP7b0cQP7MI+WI% z#}F)|`Abj2FM^i3b;mF-{kkf1*cHfWJgUBW+7M{0JXWHxKA{Xy*Q%I2uEDU2Yi;F& z_F>mp(_G$>e!Fp-o!84M>*sbi-ZgB*0IyLdT7ds@*TE_!pfEyFcHUZJRDFj>H0SV$&8>vTYnSpGw0og+SrFt1s2;?5>u{JJ&a zw%;%|o=at~TG_%;i%^;TD1B2P?`1R38I!XaNvt6v?CDmh7+dwa=|rmS-*-`fw5pP5 zV&NAY<;Q>RE0DPHUVkAt)f{oYSW|(U)?9LVcHwGbE}>v+k{ba1-Et$dKa z{PEl|*xqVA*#0+OBFhSVo)?tb7|p1YyjTpqBG=l3D=^@-Z`wU@Ic8hlyfkhSkm^r@4iy;pAlejWk+ z*;U%tjvfk88_k+_r3dWIo=*3Mj~j#)1U?60_Yq4Ba@BtCroKLw zt#qjx378u>)SZ8A*G@@Qb{|nUcP9y2?~8L^c435{nfwopd}if@1f3LkXtq%7$k%Z( zZG>EzcBw;eo?a^DItg^G7gdIxD(wI8UbDxgzBBji_YDpH>K8!L=?OHn zy~vloBGoCyDz>zI*1}7bzqi4yM5i2wOaq(zF{^56m%M$jIE$;z%3&sjT7*y*($MVK z1F0VdQC1Dg!}mf=e;hX^HeMu=uD?!G$F*Asgn-0o*_1+vUEJ`?20gk6CV#)2bsBPb ztb!vsrekRJteV;1@Fon1!+EV}pQPL9%f7l;K7NPPJ+T55n`>iUQT%ZE=eSyc%$N3&DLG6uhro`(w%HsX?>?POH)Q<`S zR!Et12WE2AOnz9Zis+qSL9c7U${WSL*60!#k}vuhyJ2X+g%=&ouLdI`C z(PQC$ybszKs)WSTV`^#Z-T9Rv zZKnf0?4)oWi<{szVFq+No^_i~_owN%=J!FIO~2^Ge;jFR+85nZVY>y+~e z(f$(2<$X^2Dd|h6^he=-#XQlLvfHJ+1pyqIswl!Tv~8tg&nOP8cY(8k9p8f}ul%E2 zn4dLzZf586NX?@Cc>gPr#K33i4I!`ziExB?Y)}OywF&0}M`Vkg_SVHp{Wai-8%W{R zfZqWt!w7W5`3R3~yTXCOi*P$3ZZjwlWqZ zdG)LX98bh6yMBrgUUKQrmNGsiXh(q`RKm!fd$DLD91-_^z=K!Cc5bs3Vfve1APLZM z;De0=LOzzB0g|)!y|@TdvvxJWqm|FYTcV@Y{8KkiO_(v=Qip8}${}R7?KyPwc6S@` zPKE&=5Gqx16qq0E*L2$0$n3&5Y5~-K%JXttqsx&0ej zosnUH2+2W9GSHCJ0U~^L3%P`XT@u#vDc*QRk^Gg@I!#{s^6C@4aFp*O!%&Y& z+G+jt_&`1^eN7Wq58mjc#NW%xVHH1AOo~9Q{W&*=#89m&Q0s$6=R&p44X!?pXp=q| zI&%-ByX?&@tjdOE)RMCM=2+e&yh4*9pN{$HMLFmEg(HFOUrq&O^FN?O#dpdAk{7N% z3gY1yQBT6|enj!l(Z@JihPA2fZvou56W$&p6YFA=jIV92_&J_NpW6}dd2_4^e3mYO z*Cb%lWsheF;p)OqHA*oy;b*7)kHuzFg<%zFY$(I%nM^44QiY+Yc=_Y^N48sPxb!Ou zXwi(X^q*6Ut-scW#SDMTROiu4(;_uEV&S0&@@uk_>mYVqhOA~qiG^#db_6JN?6`ZR z4wU5xMO-v|><2_Zf=h496!CpZpu(2HyiW&gZ9fzx;3G@EBCs{d#In53AIUiJe_N&& z)1yj1<=AbC_E|b!`B-tmyR^1aLIGZ?ht&rDwsp`dZeS)to$F zsyX*;3rTxYQ9z#AaU+(0lkUO7##Y+Urq@9QM$8e8!3h?qJkJVb^dw(RPChwENf9cR zpeN?Nm^N!3=y6<8mIE(&#PqA;#+-(g{1j0J!kQw}%qRX3xx|WFCwHC=%|>!6*$@|}rrutrRtXh9CrwZEifLm3D2zS=F325` zpoE#Rf@+Lx@Hj4b&;j>XIVLlYP4*oeL-K1oi#U_1Pd%$$&v1dXD>_p1$!HA9bsx40 zHlvCQAt3s2zQ_N?lg?q&l-)#5VOetB*r#o+Z-3g7jpKr>@-TEp9peVF8;+kr(hd;Y zu>ER8%(*G{akg0Q1h#eSi_5iGJoC_HWJZ;*l|57Tc`lvRf#eo+ZznJE(xv}K+$O@_ z2q_}e7IT=mS!8eRnybOIxBDAaFtKB8JWZX+*78YjnB`-<5EpJ?`k~3vaDe!w1|aUq zX!+zX0n>{74148Yq{LOIR8phi=!iwuu8Y9oZsJcO+iKSg*WGX@p+LVpa-pX>GC?)` zvu%o52RYCRQGPmXbbw&yHeSC9^_=k5h&76^q2PU&BRIVat};B9Bp({dNi6ZPq5Y zZwG#_hRt2ne19SqM0+7mkKWnyZhbqB&i0;8R}ZR#jQ3K5_IHdsw%{FxgVu$RI8$(eG+%nUm41Zmni>FSZDg5A<6%rVEtb= zB+2y84oNbx|CbK#=eo8zX)XW4SGr1HN}R!3qd_`FSo0tvMB(dr?&a%APgB*wulHQ; zzYgyCzYcCD9pGe}H4-<;>Gl)fZ03V8cMsM+Onh^po7)popKs7FYICOC;<~(-k-z_3 zLi5DX(^ZgWSIUy}7`JnI`ZyIeHq%SS>v2$afSN?e5BPjVyx)=2sYyL}b^N9M|FCyX zO}0hZx=q`*ZQJHf+qUh@owjY;_DsZG?d(qbx3h#QCSnz=;hPW?>)eF`){#727?cUnQ(|nxPGpncVRW~3K_;V9ZBad0jNi1%1kmnCd4U2I(_980^wJPD&%YmS6U-tqVaNMdM z)hSR%^;vtav})s(F?mm@=_&?Bj7WphOnKU5CEN%?cW|DweuM%BBT*ciV4_u#k+Ia> z4mc27D6+K7TGuxi_9vb@dWkyr2I>(!WtecH?~@g@!Ng!jc;`H#(Oi(^apaLG_Ck#J zc5k{>vwv3RNL)jE|1BPWn$)a+i`x`{ktikv-0bpUqH$TQNT zhfrpp1FwvGI#pHjT0q%dw|P;mQ{1fElsmb3=-|lPDH1o#5J-~s$5uvxm5@qvi#!9~ zeK`c{f9dssUK7nLwQ#Ax)x@TaSWX>aw8+SnY*GWy2ay7Al#z zhFxP(;&a z!EG%bls)bT=WLtHV-VYlabmq~iYjrPeP??tu5qT7S{J+FFnrb6=-!ts13PFxbg0MY zb3#uTc^Gl|h7XY6jVmhCtyMG(<@pxE5fDlKoT@_s!U#Zz8Iw;h!jz~lF)k)hv9Ihp z_WYq?@*s)A!6u+=*f)J` zGdk{z2V}j&oHe3)jGMcq1;bP#5e_IlUbee0yKoUnr?-xAjPQiD8QX^t{zIx%yz2mI zfs(L0PQYZ!4J-;7qpX5O2@XHDuZcl)kiP+PHTS|fS|ORh7>ZHR{+FEtLWHcZY$!TD zgLu2|U_yv&qD4JEB#M^AK#Yy(FUDf_W>`+gkG#;8x^f-$qJa!%#B+93Ixjp*aydxr ziJ^RqphWD3QV_VqA{LlxCN7n{xRbRQDm;)VemSlZJ)w!jqxxR31Xl`R#z?Rs){;m;GQesEN<{qPqG{M@mD$LUh z(d$Cr2cR>i`pT&2;V6eP@|=sNpRVFD0Xa5orbXkW4(D{9Sl~}WAWb^(H2K-v{~%uN1t?t1>$gS15y(0wVmwT}=%m zF$>d`-LD0AS@ob_H>TQH-)a3@Bo*l%XBHV;xvDA{#u|Nxu+q{QAlg7=aUz|1(sBW;R{|Z z6KmtJq@fI{C4r@2k_X3B>!u}n_cgJ7AE0MJ1}{|si_*$bwN`7CF|va`LDru)k2v9~ zf_8PY47b?C3JEs(n_%PbSdqQuE~P3A+~$+V@N_%@C|0-zAy+l1>iMa1f(Q*BZ-GIY zjETdbc_(^_AAMqKLMu~dr$Hr;fTGZ3L3RJZrN8wR-{ z;tV7U1 zak5;n4t{Q6q-P}9@*Iy27q&EGH~8E%M@8#pE#+c1JSVhA3G5W!Dhh zg9~244Ec!BH`R5BIua+Q)iDyrG>LO#* zm9o3K`ws;7dsi3Meb(;MEf&+JtKkPkr8TDA=+CkD(6bFSOJPzH5jcf`#|P6|I}N=Jc#ns=t| z+YnxG!rktojo%d7bU0W*?D%O%yj(Pq;()rW&UbFz$rBGex#xFZj)~K6a|W6ot}^@n zJllr@D?i^nU&dX!--Fc8=ss|(p)WJOLtmfqA0N6r2+$Y*x0zjAR&wOX)}#5inH>tR z_PE#D^I}IhXxOD&EXOiLt~p)%QONr^xRRkeZ_VU^Fq`;E9`pl{D)a94Plnz9;)?&F zVfWvMD>D77xFQSd|2mo8aKs)#^jT4Zc}pmQ3bNOVqv0*{Rv_xAT2)O`RHoyHsROtwD>*XV!!$htlQ%~vlOcTKCRfJlxQ)b+p0S=cI-gC{@O_x_!_ULO7q_Onxt@7Euz zC_9Yo>vNd8;x~Z0L9VA;S?ZTvaaP6e+pR!flPlxbs^HQU3sPW{ca|COO=f5Nb91?ZJaBas?e2hvH0G7-?3Eqt+b4)P#CL{ zzO(4LN2&RR-4gq;8naxDOZ_U#qeNYm_b!0{_Ek_6 zI}wt>Q^%u|ZALD3vhAgu&*8b1=*aI$iSZEOlo0VNJa!Bzk&xc-N-Xip#U4wN0Hx(vG#Y zfU+_8UbUM&IuPt>AAKuZk?kv_cRPZ=OoJT7aJ6(v&DHXsnEH1han%qcF%|IBlYg{0-Z{8nFq|E2_E92Hk6<$7jIpFUuyawH?9zTUux?>(Ng$gJ7uEuV&I#6mmqC_;f;I&0xNt7S5kcSC z3RXf-NMDkG7)2|YHQHe?LxFOvN@}+CO(0%4gTST$2&pV10ODrIW1mpw0k;tme+Rm2 zi88WFSOQ?y-wguMSWpbJ>*8Ywb#4P`f({P8BNH>CK~6MBGf9n8xFHAvp10Q&bRf7B zomkjnFt(n)h8WWu7_#68HN5T;4Gw`442Kx_ux0rr=0N5Mcm%W5z%YQAqzs7@kbdiy zukngm&@50Ekbkyb($&s-1p4)-L-L;2=l}-nZOwTbXkl7xqcO%>^I_hyjg;%`{8@;s z=-&3Y3la1o(2IWqI~`Y3Bp)GsM5Zrb4!)*3FgC?PHA-?x>L85~E}E zV)uZf0fFb|rZX;*iTV2O0t{axkcKYT5jy_5kTz*7y7bQiy09V;<77!Y17WOZWW@-D zcOwyH<%8pQLSq&jtRmO>(@lu>y-e~ejan}1aW=xfT||VXT3q^fkl+e}4?{6m%?JcB zOKRI)9An5$WVyc4dTE4we;T%trmkusa;Y>DG>KeI)OEs^bF&ZtBCbh`hQ%X`&mGCP zCNi45=Vi4+1c2#z%-q#Ge_{6eyN~ew7A~q!&r87?Zl=TvkuUv<@8k+5Z zoi3tjE^oImp*Dn`aT`k7FVxm5pVD#UXqlC_D%&)dcCCq{j7}XS$nab40(X(MYb=5u z&CWe9VUqsfIu)b_`AG;M<(x1F4XDUTML9THtbtH#{<`<7A4!4uWx@!^?x`rhSI1TD z!M@;I6}BbtP_$uEHp>eiNpBi(p`Cd#5W#G(&*S=4-dn72dG?$3RV!zysffcgGGMhP ziUMM+Rg*n@>Z1h48nx5skcfOW30r?|&AD~kw5nvXmUS>G;K{boTG=VlicG!DGsZ=( zp?XiHs}D{v4`9})cgKp0awmO&LyA)OkTrLz-!n_eN`nR~Y*n2hAit;Jej`A_*=4w;E+lN^8qjOriTv)hgyF;qPe7cd+{#%yqW0b8)E|SN5 z;nu~!++2luFM{3xiRRGN29(WxwMPv12kcM+9DGBJW>UdlxqCWwi8m;8g7`YS+zL-U znXSa1jj&?Iz-v;urFJTa+H>`xhPpM{|2L%_-u!US88TP)UXj%+RmJp`wa&z;*kX_S zD$1zN&h6U1vTkUW_XCi7~)LKF~zLNb$tzg)rV+O1}&epw!3|X8?HmJ(7?Xbv^u{9D$zVXJ4T%LD=6_TdP(wOUu9$*n$$f+d+X>qv4~oB8f?U(FwzU95+PjAwcI z$#{`)!&GB&s2j0&Q3Y~0$M5aaxK6%to4}XQQN>2xq6J!{oM_THPZ`W&WzG|Bh1St}?^4;~CTbMf$NmiWI<-F^@`Xok_HeG4da%F^_n zHyRgtYo(u*r^pfuL4D%*PhQy(``z09$%y`6c=A6qqW}BgNv3}lo@8cV`=8~J4co&u zM4#MRg3kmH^Owgh*JHx8pqu*4lrN_@P7yR?*<0=U^x5VB zFHr`~*E}v2=gRRpvMXxL-ir!Ti>&^}p{@-_G(Yr#w5fYnL;rRak0ue=cl`dt7V3WBhX6 zoAtQXbN`C8b01&Joj!H<;@zYCw%rDiJ#H)+b!P0?R;*l_b$_uxTs)Z;UQ0cF-N
upwy&*@9uS1?8YZKgIc2NPl^*IUY^bk(RV63&-Xic9sbxriAh&$Ts^ zDsU>aQmGE}?Yb3mquwG@o`!aQ*>huqSxDfOf5-sD--WSh3 ziCAb+HDdD;Wn%A*FcCYxOl@$xkjQz|UF%mlq#({mL)mP{Dzvzi)9@l56eTLu_; z-tEttv95~2u+4y7e5tFfrxNT278i0cc^SYncvSRMO5is3?M|-(F%v&uh3#H{^ zVK8R6HAvh1-MRG|-if4^V}j!hsJNbnTU+S+iW%X*mqG?yH&iC5?IJ?MJk=Mh-@+=p zv{7c+@S$GZ$ct;Q`8I;il)Du6U_JQMY+PEKy$VsZiCDn=+bK6`@)v71m%9xR>GbjH z#0fF71I@W2#tyZowM&FJWe8})7pTE!Q;x}tuAYeq);(DWf;24#^W!&gFoDW^aXOHR@q)J+FSUN+feJ!LZgrgWROo__bG%Ttw zB8_NHy@Y3(o$SzOI$`=g$2uBW2>Z~w1MWNA;hDqWwkIMZr1gUSv<$F7>6odW$v`t9 zX;PqMowxvQwQF}G;j^#4MtJ)=cx7T~j+wJ9c9$2StA`8+7h=<_FNx@ej(g`D89*^2 zhP>=W!`7NSu66H)@4i4gL%Csh;c)R$FWT^+K>^e|QPqIrZr zAo2k4j#d)+mKE0oB&R-ttW;t9k#iZ9#r8r?WKhB|l)quB&^>?Q@EoQDq=L10Q@!AV zm0RWQ(%`sLZzagPNJipND>1nLn)N2&@&?qGD70ohl_@em)Q^ODv^&fIk1Qe{jN1qP z6fo_uBWyQ#T>SPIZpR8XMbc1uLM1tETsI}<^TjC=Z9xk6(By;x>YR0%I&a53WOEL; zip!5|VOy{4e=V>{lLmEfEEWkAo-ALxM3ifaE*vqWoT^W5f);dYt!R`y98C{f0+ z2-|dKgsr!~yAHdd%xiEyuymFah(gr`)#L>pQH#M3r#1+dPzQO(s)@Zl)q$WyI`mu+ zEI7wy7e>TzDLT3Ba{zksI=~3d&y$Tu=kNe>hooTtE;&>5w67dOpeAF=T1~0yBW-5F zww^rF00qp2e?+DD4t4c{uTqrN#U2F5Z6D!UY_fBA`V@Uv%y6K#kZJ+n1AYinr{w_z z$HOcjA%g0sI2p@t+fx;(kc}6lkKW?ku|EmD?7qMd3^BXd9C%$Ab);NG5S*;==g95X zLK-8t_){|Hb*BI4T29%`qj#gBXY_-!o`ei#+AGeOspwDy)?L~Ls%`a^F`jNmv56f1 z0Dy@g#E`+$>U=X5tHWJhW0WL*qj9^hGR_671|GTE`EJ$HNXc@KIGkVG>Gja;KwOy1 zTY4_1%o5mYw6*LC_7Gipqz5VEv_YnrmJRwIaR4m34Fzs46TI$xs!>L|RT4?o6iB_C zP;TLsP(vctj#3E4q6MZ#a5sz$I=W|6&VU)3>Rdg}xV{`w13^K1fkbp%gWU^SkIE_O zKwL1xOIjgsPXZ;eAO*1$60Sk!GklV(#8)DHbl??1&VSRiIs>Fin$RVI_)5~u{!_my z7>P(2kxRq=anijo%dCB<8yGIi1qrWDc8On!vVa>+eWr2K&+`m8dqsPGT8pohLwHD3 zDB`4#lylatICtyA*wXCuKA_WDbW|v16!B3-b{>|s6i6c|Z$xgl-M!I#u-Z-I`(;!; zwUUrR|Ch4|Xn>4NUF!`?rw0|MEhfsaI9z>F6n*v71D3rnEf|VyW_!dW^kx2S`|^a( zTfs6PWlNT0+XH6aYDbeXNx1$McDm|ud#5s$Ev4ty9-llD92~p_HE8S=##{r1Jlo{}TS^p5(U91_S5^=Fm(H75;c z3hjrKgqKy#ll_fd2eVj`60!57k4f>Ig{hbYjq5U8-jPdryCQLY>E)b7>M99WWax1# zC5NxeGjcD%LkPzgzZ!naf3krKTx0Yngr8ZwoQBgx_XLlwuk*}K5RE(x(8)Fp$t`o- z_b=K^=p^9I)E%x`SX(@|r@MN*VPk^j?tI^Xnl4;CfnTrYK62X2)#`ozzIaRixX{gZ z)hn4;GHvcrjMl70U-&Dt=H%bfsl4&MYV?DpR9(1`^(^GvHt+5_Q~O;W>vzojq)BVq zh|H9A6if3BtOGC9`cJ0e|8kZ8p=tQv$5k@@t6U`;JIDW=hIRg*!Wv^M@{$T~5I)Y0 zidQloX9AVm(v{Q0lL8p#T%6U9|9?d|Do4fmE}D1rLjeowJL%8dtM*TK}w)6>&o z!PQZc75}N5 zk7QBphO2Z7i4TEK#LKH{pcjJy-Jy19OX-Y-AX z?)9%m9?$(#iK)KLmll~$x#KE&1@ntIgKvT^hW0?H5V^g9=TC)s3Tp@GyMC`v~s!6kr7=cZhBs|5&(xx@WiYtDca zo41{yRz|XCKKAT4x>L2J$4;|9Edp*`TeK?Mt_{G!-_;;^yb)@#MLFn{xP5bTF36hr zV>iv~gy6_bDP4tX*>eFXPv;zaOg1rxp3>OW@%_~^r<6ITAXWnF4xZlT*<0sqDxZ;e zr3X^8jB;mXZ8Fk2i%^lD7>HY9Y4eKhY%(GGodrMy6ljgMvJ#{-D%ae-?7wN|EB^Xo5D04dSxbsch+x zq~^9i!5h+7w&`bNvIRmGpTLz|nyd^eVyi)&3c`m;dk!Arj^f8x3K&U_qqO2hfpUWp zn$2HMP3@7l$qxXYRvMg=XZ%pLlPAfG8^qaDW>T=6+r|`AJlvi;G4!BaMQB#%xPX zp+v1#odkx+TLA`Tpv>EHJ*8m0thIlA{gX%ybrg@If}D!vMkp3(3TQS_0}*e(xvk!H zI2Usbz?AYk>Qly1{V@qGGCD;bt9OJ#foXP*{)#T7602~z*_TEb)KhLyasa7_k*^Gw zjy0_Ivi*vn-7UY9&M6?IOkpxXcLiIqTMCAwP5}StJ!1%bA!N;3W^Sp^oGxD-MxhvM z7);;~dgrRts~2!RP!Fab+wpH0#KLajrdh}ss$^4C8zN+?^@1><$jI5XvNo#5YKR2u z7mu9JrpP4z1W_cx*J?}HQK&MdD!{--0iB9%Saa<8UOAO<#Tgb$YG?jib)q}<X!8m*{zztve$* z0gyqEVWqC<;Bl)~eKKj9mQcHlxZ-NYKtd>ivMX3P>u%LI0I5ApRow1jX84D2`oh|O zv{@+9Fqx#a;1z-~bs8G<$mktG1ZntKMNv>7oh$P4w5)1bUnB5l56fuT1eB_djlL207I}XRH1bZs@hl6maH@qe)tkfVg z%Ipw`mF3$xjQQ^;(k%IGCPj#NF}A!Q6K>pBiSUcx+&1qp zNFu~P{qF`m?5;t~!q{68N|_>xiv~iD0f7ePO-z2=rdTqH&_g|$9+C40dGRx6f%9Bk z+Nd`M9?}7fd@GO@5ckbxgYb74S`*NY3?P{w*K8piiI0WFcIrbX&MHGQAs%0;O~^ua zg@Vf3X0&KGwz-~03?f;s(;_6%PHev3V;me`3t^;xC&ice*ZF>?|COqb4&p_QBMOT; z2MFJVy~zYj*r0R;`YNhtF6Z%hn>^=E4ajw>8{$oi;`1MMx8ixD{Dl#@k?|3&2A$+> zu)MkB*@weywPfdgU@$tNY~aR#!nJFT($J;`VL5BNx#gY==0CwqQi;*&`G> zYncw=kjkd`nO~jId=loyX>kYuSGk#125Bn%jxJ6CcRxSSX@fK+Q{DGw-8=#i-5f5% zcV9~rmO1@)(7e6dZnx9Qom18eUE>7KqOvHv3+5GTQbF;m$|zPC8s~TK;M~h#0_|n1!3Wn2TJ2^pnbBC*VkCWMWWDt+(~>+_SboPgCwD8`IwH- z=}4!jp#d+;a*6qOcgDmXTuj?JB;D|PUO~6~g)GO`-$||6alO#JQ9POt(@<&pWZ)~% z5QE@7u*I~^C;@Z8vwoL>FNw6HLg+S{n?hMRqtnWbV@r>Jc2K827X+mM7SXP2OmvNf z=uz_qT;;bM*+zhCUd8!`OK7WYeQgJ{oq zs@meLBj-#_O6Abyr@bt{@9E7qg2dt46P0fPCf}Unoq3yh%=UNM)G6Uq=>ju@cS0}F zJ3KS90Kq>=ApeCq|1$}M`QHa~{@<_uS71(7&i|D_6cUlyk$g|oPTj|Jk{Me@p0Cm1 zDUsTsl^s%zzwA}Yc}AHV#2JV&C5;aJ{PbEqt?hucaf22wQK3;7n03W+d#=CVtr#)s zYsmhw+ERi3?xOkqNbOU#{IB9$@8)e_=I0Oc2KY|(;z6(6lJl~jp3UOJQs7urW0!7Or6{BBuUhnpVojCv)ZQL@swK9HG-sx9 zJ7t^S5!~3;5yZtRMvDE(fiZti+qW|Hsgim4TOfOeN~71`(!|c?HyTun-6XX_OPkg~ zW3@WoHfk-O5_FGB<#vyAe@i*|fG20ejiu-m3Ogx-FR)OpEh`&65iz1PnfI;%027p` zShM1l`=C!rc$E6jD`4WrLajFcaj?O`K>x>#gx9NAh2V^*aWa3fo~%};}1KE{OF;~_fkdS7pu zW64CU{qP@^9G+_kC#7^2+Ygst2eHxyRXl5Ww7H-jcB%4Z2oyK;ATFX{Ldvd`2^;e| z4Adk?t=EizrP;&`;ujYa?E~KCH?T$$GS*_I!=WKabo`DJhQu$wfuu}P6N=CXDHz&V z$RUDIoYx`&q>&j}eTp>nhbab?2iG7le3K1s%A>l0AqAZ!K9T!f-@L(vII)?zXH<`( zDZ`95okS*v8$)cu-nBGWLRT8A6Ihf+NH|U`3T9>qPJl=UH1y(QZR5>R8W(nt zb1itEWhzBe!;GPbTVR{M#kNdb2gnJi2^c=Orv^-AzZ&N)UtI%p2O25oxrH&Ok0UmR z5r&Kkqde;HDlZd+u7(M9wXJbULS3k&zycyiEeg!2_;D=q4K3-ZU|rZtQ4`lV5~6s! zJEyJ<%_!o*1SyY_xNg2Nn?MThcr7Bh7Yz>O&Y<}s(u}tvvzb0W|4fa76&*>t2pOub zml_&7n0zZFVsZy$z|y@4Uz4^*#k!3%-n>2NNua*O>)A%!?3hf}GA zgoQvFl84KO1icqz{_C8V<3a(vC8a9w*6m{3l?{gy5+um)QFf%2g5{Qn6!bG3!hciV zCJ)vF_Ff2tT;>*(a#tY@dy| zvSyPYqeaSYXpal=Cc$>qhVy`1+wsH&x4FJS7FJc|Q$|;K-ZNUWAeI72 z=xRRpk~*CR&gLp{$)6CBYE8QGWru0fSQ>Zp7A@>WX+8K}_Vh?-E_BZCaaB}fQgt~f zp;Ws#VJsyZ4bkvRZzG*xTUOIda(=Z8TmX(2lkUB>4cucq0m9{z&x%@d#0aj;E_pcc z=I2wn#^ado2QNz%akCq8b_Xj!!6f40UPjj zS(>@xyCFlqcU!-G`@J7?d4;eo4s^s%97}x3isjj+DM9?gws20PC(iWFe4SG&C~Zb4 z%@QUEnFw%g(go5=Q4l(lx4y;(gkA@_do^PyaQqCt(aiAzvy$uDVB>H}qF8NKpuazc zdy!K2PW@}5dor{X+pR|9gHO$^-aQu7ti7A**ZaFf7ii%&=tR%*sBGNRunfp zo&8)7G6GXALb(jj0tt}LHAyIZcv?)bd5_B|Wa8ye!*V_^tYbVzOs`JObU;DoLzY|Y z@%)-|mv!>;@o6I-79ZX|4_d)H99jn`QpghYTV-B&$h3u9c${E#7_JUqX#xzWqowHE z0Sj)a0=ijY>qp0 zC`^aOh4Ly{dU;*Y$H*DyDtP0@yy)``o1CY)ywcpHT$pPwhP}*iNHvr%m;n!zUw1RF z5YcXiEQhX$Q+s{3lUoX$?*-kYN*QMU9V>W`0X&3wdo#Ghppdt zl^!c09m*m@xuCCz1kPX6%DPzgGN+!TX&($&Iw# zk!#L?M*!k3WOBTRIo?}VI!YaNs?x_RLu_#m7DelsL{YD zk0Gy+vFV1*=OgYQG+_TB)opq^D~3){49JA7rxScld9y9uJ+ayb=E;C?35Q1g<-rXM z>a%kHyWoRBbyJ4y0bY>wG@VEMDz=OFFp7qmC`Pj5=Qp()+iuyI<0f~DIA>*FDQNj5 zze-==uJI~vNbcxROlCL|orORd@zDhXEF}3{Pewi}EE0HhWBj5Qy zA!kP?X1TW>o`2=%@N`^x7Y>Yi)97jyDv?9h-p%T03lkI39bcP%A5Luy_$zj=-EF2vzp{(|9@g&{x4DbA4&}WKBAQQUnNS}m|6bk zoyA7N1{=~}{mbrDr%FQ=G-dRP9UXUO8(WPm54=|LIIswts5*%Na306|2QRFD!thE+S7zuRHunq>}su8pl@{nX0C)IHgb^`H%< z?_1_#@vT@F6}W};o+Xl(2Z;eoxZs;6M{S1KC9R~K>S#qlKXu{BUyI6D4;pI?TN^o4 zVXSfXVdtH~=KDwO{xhpzNNx$#$onxKPVrzt-8{Jzzr`VerACBm3d*v@SUQ=1pq*BE z)4Ug9x4V(`0Egw@J?Ag(#kHgYalall@uI1YYVy|}`_xHo4-sLG2HuzE0iV}&V-Ptcn zPH4-`^?Q9+D6Fs6t-Q7-s46cv8H!KBiVaO8;z&08n{^<5dqe*6~~T`1o@jVVQ^as5O5=_Gu6EPfe1p-Re?xSeJ{w-qdjiSy@Gc0vrB)|`>OeQ`DJWD zjz-MLzf0=A?616Qf;~!ph*!=%Xz&@+F5w2M5T0hjhh-)ATNp(Un+Xep%SWun$p3hT z2rjF=n+HKP0`)njO|cyhQp2&yqZ~S--I7MHOEXYAnkV>k%72Ikj7b_+eH0HhCp@3W zhbJW-{Y{q2G~Yb)AT70W+w#au+UbsWPgOz`l{F_hiW-GM-X9h{);Y9lP!cAKL6i_z z=(D{n3RW#{Np3;hD1Nm*+FW1KRc5kY#)woVU95S$lxrt`h-l*vN*qCvD}q?N1klhE zod^oJl+<^kI8m=;7Y1luGg3yi$+XroSqin}lUS`0}XJ9WaG5bw$S60?`hcCdtsqqPVSohZ>{RVir%ngT#!;h>+iKPM*pL%@(e5M)}z5F5_&>^Wf<14lziwqld2#BUw>nfgZjX6YWJDYx^>(R zVB#(n6>nAGV6ANUmDs^Bx(&aI6`@1PXkAqQ2Yp7ugm6o{AQ+3Wa3x!at;e^q?y@TO=$U- z1FCX46>G9E+cf3;OD%DYo0YD^oQ`zvY<4h3dMf1wcAw$UsnDiiRFrIY`VZTR zW#MYDl`#E(PQm3@8m6XrImD{L_Mmx;k;k!9aA0BFO!f!2Lc1s-hq^@fq%9dyzMUjR z8l_*0QQ{m9OJgPOzZytFWmU3KF9qnXn5o+^$vslnb1!;E$A2Xg3-Zl|T-s#avN-as zgr5z>d-qy%yMnLUK#h~XB6qo(Az&BJ(E!*9-%vM{OGnKm`|9&R zg;{|{vp{=8aRwV%y@!z;&`*dTz#H}(&oSwL zgg|D32FFZD4NLF<&=Wq=XcKGqyEa+%{ce%z8uqowZ(Ujm(|s5 z;c6r#xAD;g&5B_>g+MXx5@IAQn;R&!=HNwtq*8wwzGunk?z|u8yoyd+BtOV=!s&3U z9T!>`L_^j;&|e4mDx0juu{*eq!Ihb)d-}{~Ed>mBqgg!@MBS+{eJ*b}b%Yojq}ti3 zS0n zDL!-KgYvGrpjGd8T`^krDVwV3%rOJ~o|(_{|02ZmK<`$O_u&JOaASIup*l4@Ejiop zt2F+pPF#fs$8%Ssd;}q_1*QHqA5sd6;7$Mm&5y1DM0N%rLWv`wkEQmed|d)B!UV9g z#<4J{`fTtM*bXn!=1y#PPYJI!W_So@^sqM;UN6@Kw$#fZz0DA~*F{_!E8g(4EP1k} z<#G<>aSKQrslH0+U-Yu*$`|wGCWwnpk`EIvB%Q;vFZEF0{tA2=t~xOo~HR6)sqhs&)A*QLTWrj+K zd+lz#s4PLgiPfcIom@njS>h9z7bZdpTZ$2vuef~oS`W)6RV7A4;cDSVlWx%wLlraKd^e znV1|+QC;!Lp>Hbw=W!Wye8L?@kc%BpJ+ITIInVKz*TZritV1I*ZDn;1lrMs zbRoL~*?_~rMluu_3htu$u?PGuowk8m*^Wc$jkd5(fv_fdi^*36SoPM;Rl)%-Kf$gfU-D zf(SfT;4d(Dl!iSb>{)T%O9BOx*uptda4(!Xix{zVQ z46Yf}qv@oicgrODW&W2Tp)@L9ecvyvElsd$?N(k zdE|_YlFbGUDh`rqY_x&+@21gd!p5`{HE8d0LE1(3*DtBBPv~!oCBvTG+Sbpbk=}!t ztwJ-m^D#B)X6@*e8>*+Ht-_&Be#P#W=vp~?8sCrp`>ns88hRa@`!}wc`>ABAzq#Vu zCAIwIdk+5fDM$Qc_8->}J0CNj<+)GdDevz-FG1P;zUl!fK66JbK&KHBK(c zwI`WJElT|gu{nqoaaJh@6t=`MHYMa*C zI~b@um!3tdTT1T0m8O@5oV-V6l3%}9^cJ_+A0ha?1%7?&&8qA51`N0Iv8*S@(km~v zDAT*tt#dLfWhf{B>w>5j&qup~S=DqAsD1G5^Uau(R!#PCT)2*_LH3;$)+cO^B4cR@ z$Htn$AFJxXG&=wYvPXO7LlqY0vp|@l%aq3S_<4JbwX#5T6{b=dVHHVUX%)&KPyN-> zb@o)^%i%`^lZd6{l|A|T;RI^G_E1`koo~Mh!Zu$6NM2TsgH)h*xYwByJf7B2y`nK_ z9?ovNH9j&MsHBYn*SE)Ksgn~tlL17AJ+-`#RvwaaIRnnj`J7{9q;nN$%PeRkiH(Np z%M4CzSPd3ON1paEj2Cjv+p;|`}?9W1Mu3J z_ZSVFKc4fbf$mhF;Lwc>6m;ilOW{Sy*6QLq1ds;t=ER~b4B&kf-U?RQLbH1e?`f63)yf31Ht)*k3q4mWh8J1j0mv8PC@SA^c6@!Un9^)Ls8|?c7P)` z_6?uCjPuBKGodprMfMc-Em1py%6-h>}=c&IB2e3>n zMaEo&f>=lqQN+$_z^sb2h6n$`k1i$&k+1CgNZ=qIVv(mK=zEb*&ckqeY67B2E3Y95 z7u0kX2gvtffL7Di*KGcypP~;VhF)~8H0>WJhZlD#HZKf;W<^hKhO!*2;Q$U0G@1d}7i#! znTfwl{blqLVPVqg8(Bb@rcnlFu$xRwvE(@ka zaU%;3kRxwSTnc;_cpu&0#wm*r#W3CEZS)=py?+c>wmZUiGhjB~%T6}BZDz^s*POfJ zT#8s5Kw_k~0>NVNFl}=m7V)^l!uWlsQf9Mr)F;rmQ|CD3Cx#+5~b9GKVBF zsS@5Yoxg87h&q!AOovpdrlV|3mx>_1IOcE4USOjPKAinL6Cuw)!4U}cGHE5k)i4bp z1Y>eTv96e6uIzUiecNrrk64jUuNhD<&{*(Nk>TCFHvlt`9600m?dJIF`eVk7tt z$$fwB6AqWc9)1`3XK?dpu^k);?%ITP<*szWA=bYq1C*T0?C{3G2gs25!cIjMKVz5N z3;&0`cZd=sz_xbNwr$(CZQHhO+qP|2+ID6oDs9`Smwnfp-2e8VC*7l-$BIF$7@U31 z{`R($?T`f!00biMs&DFc1ds6OBVDIoi1F5H^3CK~l^@{Jh)!+q#d8HH1zi9E$;rY; z(pR3APpW4~1A?cu*yOzrkg*tyIaDl#XOU1EBIvj!q&-w<@On4$bfvW<#7U6?8A@6e z>#4VuRT@3bjdUD;X01N@;(M(v+kVw#@%=*)dDYIxEI4rBHToSZI0q>~$)m2XtuVTQ zqzu=BX@oevNW_?3d@Fj_$+ck!G_$&NV?@pPwJHQI4b3!`wu5=sGs0rsnN~_>8TH01 z0iTi>-TaWJ_XxY3cHPmT_#!|D+jk~RShk~ex(k??hDOGf1?p@o8ycXT)!|q`h{-`; zQck|@VfNm5L#cgbrn0;QF5=VIiZECbLM*Oas64{!@n>S#$YpJxc^-+bsBcFpy*N)? zTzQh+m*IV{-;XMo&66Q*|E)Him|L#yNRlJ&*+WSNvSgV?X<-=ey^|l1af1rOy4LmQ zI2>s5ZV_?EUNoSMbLu^TC;;Ds`dozj0(#_PJt}*=B-$h~Q6`jD;tUQDxLmQlpm(|I z0t`tl(R6mun0SfcL<5OOSoH$G*!ab>!f%H%{8t+i_KW;Y0|)%$#>8ID*P-p88R3Na zo3s;s&b0>oxXQxhOD}G!G)(k^MS&qV78PZSw)OSwq~z7Vx>~WJ@kBIq44I06H@*^+ zy^Sbd7!IK+yl^VX-KBV5B|+t$Uvf*E#SeXgsVrG#+Su{s@eTpmq1Cg&Tf*mc==3nP z3~=NCbfsitZK;4{LFW85L&sb@NGe?%hI{OtUo#R9*RQV}_DdGf-FM&fz2|X6(5iXK&L8p_MEyT+_ee z(S!trOL)>e3ZGFxJifp%ltx}JM3i z1jhM}`KQrTQk=4wZ&7lS%eEGiFE}c0?^?BKZA_QkEQ|tmS@B?kY}C6w4{XIVOBN5# z5m;RafH=3geANK8`q}ETdI|6Uj4E9n^_M}-=B*7 z@6*07aV5fRef!tQG>;-5-{dI+)thfEv-3zTS~PROFN(iI$NbyeFzf$BTKpF|{trou ze;;zp{I4R%Y)s7m`(U9P|37*4^%#$&v<0b8qE}dc&dIBgRt1$Wg#roTh@2?oM4XS) z3Oe5(Io>BqTI`LnB(77SG(+2{eI=aEH=QSWnDuGvS5Wk<6{+uV{{Bk*pAq<>TD0n) z@2UFVPwqO7KF{ZRyni>fYT1|WK9qc&|Jpq5iC4vMzg{~TJ>`?H;(s&s@won)OWU+b zzp_`|=JEc%`N)0W;Qhe!=eu9=yRq=+hRFXcamW8PijVqJ*m_Vu2IfPAyJefU{yy?e zr`*2o)~UZ^`q9%xzYOmmm+BsD8&9Ps=E?=)%QD%vK=~W%NQ!H_VqjFtbyU3zTIzrc z|0u`lb&Nj64jMJ5DwYqM>pLBP<;(r?Y-bKN;%duVz+=f`6K%9S@GL{DOzMP@!*t`+ zH9I?dn)k_7uI0mi_?*x8C%!o)@;k1ZBG)pPg5QW{d zG&}gt=dhxOUGXfK8#}15j&TFo2yAS5{Z%ovjlXJRR0BKp7Y3rD^b@V$)ddiHh}CyM z4GEi@auNn=Q5#>y&)S6w08uB{u;-kZTxu!2LJK|B^He4dKL$jolvioE<68qTXx=>+ zI%cKc0_QlN`~w{cXEQ|fLd9@u@z@ua@qv+ut{*L!R%XgX&>5F1wgUo8p%ZZTki~1u zpj(36S@^XShR6i`1TfS#AH??3o|J_RGH%{;+EFTPpv33Y3L)&Gr%CoCkqmYmxFz#s z7QLebFWujZWj5aLNP?hx4^!vmelyVc23LYmNIAW{XOpdc2#nY=LTxgo=%(Ai`e z?=}(#YC1bR7WS^2S@l8Zx6wl#MSBdVn{p@QlY{{PS>arD;whs7sCW%2ls>(cwilo3 zhTjH%q+}u>P*ka-#EbX&4Ky;e=++Bn2{Z%e;Ss!(f%N<+ZS!5T+?ZrHr7fXJ>SdNz z>`+P(OKNoAuyAwldT%0bf}9QNlR`EJuzjgmTc~HOtnrGdDqJ!1L(rz!lKP59%J8nR zG7yYJVOLsryV8iQlwsh@j^Af=!d~k8x9Vgc#cS;~ld4LSX%0`~hqa1~XmN2`%$7QW zNM#opPPJ08H!8sfQY)L3oFd%&+*+-X!Ydr}C2v;v? zhPS!ZT2G^BqP7e(GCNwhxzsALTw>Fri{P}hU7SX*j+J`K>FN%+#zy?w2{?_uD)z;8 z)TiPo;yU&RpM;ysK6;s^1whPN1;Z`df<#8DrK!}bldxoUX6(C%NUqVg{rO-y7n z!<3_Q6*=Uf5FQZI*>Av&ectd9Rrd2`nMA2pLWPA!{H<>oMrVjmpkNsss-YY|LfD0| z2$G~rHunND&~7&e9W7(TKih+A>gMt9t$SlJ3z%G5CEDLy);^e5Q_ zW`#osNyqL9Ffr)WLg<{~6tUFKhL=u+S%@K<93ZkI_?I|UW{sX3vx1^{*5P1VSO+7j z(v$p^{C;3!-mcvTl^9$Oy97!TM5dCY4gH#{?le9;Be?r|2)O$I4j}>on51!tfYW|R z2?vW7Nd!X_mJ3v1gCQPo#sVRR)3Ac=0R^wyJ;As<43R7jQV#C?n4hQR#W0dl{v%wTTBV=x>! zu;l_VECK*gx6tKOQf0v-@A`>~fQ(~n4wuP-&@g78dRLcQFy*k=ku^-~?$IaWx^#$5 zU0jz7);kdkCf0eEzVZ-~O+*XKfRhk*etwfKpL!S(f+ z3evfi$RrlxVUW_Ipa#zbH6vS_QFdNC%fyAtB&IM%P|t##RzE@svH??g3=U}OEhr*0FSjEIH^xIa6UZl=6c=hgs2mxawXc6Y?U zA=C!l2TE^7>#}=h%UcgNO4#yVLz%VmB0IR8k69%Wp#t;CoGa;8N zbt?=XiJ)$0;LE zuKbND;48U88<|xvty)lmGP?1iIqIp(>T!#l=OVm66xKc^Fct?(pHo?DX4s1TG7<)c z>!vm?Q&UQOjOex^u)bQ+3r_`O1kx-4buWCZx|X*28%#}=w$)C!)5;A9BaE9e(O>Y0 zkHcx59%jT#EMXQI12Rm5F3D=Y7JBHE7^TVKz!pd*iiRT9d$yk-@HU26ycvdBHX|O9 zN5o>iHsW2+7MAYqhS->#0^B+mxa=o`rJh~XC9qX*uK{?9n7TA1{BI#3e!`3X1{$|^ zPx&4FWa;M%J=}d|?>O@N9-Z}?$IlcTxwY?@wpS@?wrOsgeO$fY?P>LV73Y767a6p7 zZ$7YV9blVoqA!85J?){>`PH#iuM|Um(fqwQGT&1H&i*G-;=jE1e@IIF`*>~Uf0fr} zW%z%*Pd`#Z49RClpV8hO9HOb0;>sw0pTwQ>Ajs!x2v87D>`(%So>SO4O!{F*-&J0D zk?TiFw7csVut(IQic0D(>FVk->rFRr0r6Lw2fNE8ahZVjlI0B;jS`JtpN9W zw5wh0q|d$q%UlY)4cOoDv_7U?g4euOx?filH45xc z-HWo3?2yBYyNW#=;~GeuG`xuhoN(ko5G=W+r+YL2#w~JZONr#Sxbro}JxW!9B1S(( z2k>Fao74H~vH9%ts{i|PZfp9KX8F_$@F{z+xyFgTBm^4IDv9IP0w0FI^zKtCyzZ?J zqSY{X=}Pkc5(%2H;;18WJhkmHG2&&s%K?2@T0CRbunDU?XUx% zm~RMJ*AP9z1R7TPGAI=<$RoS?{5fH04YF0hW46zox#s?$j7eObPZ8TwLG@%p7${Ce zl()z>)&asf1Z0p;Lm7T3)7cgY+?RH;_}M*{QDqfI>)Fsh)^(Z0%kgW42XSGja*_N% zMLkD56x;T;iYj21A?bzgO<>DZ!-f032HUO~m{Ryy*sh|m=dC6K2?f{M`GB(jXy%oYkSWsw-fv(1l(3u}KQ{34=? zM9i=J?Kvr8u^faKUocVyN{2AInV&U+%r}t+f7)A((9NBYgGRX{9%)>IH38>%!vVdV zbCZmTsjTAr?KzL6cbtO^BH+*%6w(3U%It1QNCBG4e%k_`>7Ii_YnV}z3)u*c23#3= zEPHbLQndY!FOZ<@x0c^n3kGT2rIUs0BEk;50B9z917V|A1i3b-Tq+?0uA$;z_At$; zoZX{JBHd?NS@~H%{Mi>50F%o^O=9tb^j*?i|i6oPn&CJc3n zf@0|p)e1KG3rd#D2eaR9D{`CHMFvSbo7njdrnc!%R-SV$7ICn5eR|2Zcr^g zPXWSRY zbIwqYW0xDhz$~wNk!unv<;;lQl3Yw`!y$jBYlUzLNfdzCSQC$NkjWUu6LWGN_gFeR zS&8W0(t5+NfKFQcES-bfHFKBIBu}^TrlaK_TE?S!+Yoa<09o0eb<@3+7z(oL5UpKs z(nn=mB}8%;6Mr)G9bE&N;1-UT=K4&lMq4eoB#^H{;+5dhan&=qf*(i zCm7hSZH;X6k}btJV$7(nGBa*rJhY~NwMumT#`vVmQUQ<*4VFWL2*OFl6I4uoKahm? zP-&0C>>3n6Np?*5s3Lj@@#gkcY|G=ptG1SeUvR_O2|)8xiM@lBM8Sff1CU9Qkk@&eC5De?-L^lYZa%BXi+9q8U08R&*G`%TD`)%@Khzo^7 z8T?W3WFam85|S#dBReQPY|rMyF`};%-B3i}fl2lkA&?kB#&AIaoRA08p5X)}%-#_m zQ$n17j(V}>xM|c9w-m%&X?X^mE_x1lz!V@tJ9u|8UU$_{K^gV94{#tdlOYum)8vX4 zWQ#0E#%?*1dUbW-2wp069_HeKJ1t{e7&TX*-Dj-(O|I(P5N;9UjmRnw^{MppZ8S1X z&WcKl>;$FDiNu<@QZ1T*8Pl6qnBPovqJr6t z2Dz~#%>_lfYDesie&UUuw#8%*Ftk%!EdL~@CO3-@jN*4lKF3&?NOQ~18RMH!qHTLI zda)Af;D8#;8rfwnNES$#=UOaqmkY`qPUq_A60$f^SRC-==IpIY!v+13!-u)MQDZ+L zOOunzIY@1)NE)jIMRjelO^q8O9Yb!vV`N?&Vx2IVq}>v+GN^ggppwT&Y`j+^^2e6p zPuggDQj8ttt#>yRJ_t7D)VT;sDlqfTUl%>;thd%DfiOC=G%qRdD}xVt^`KtpiD+D+ zlu>$2A?|b^KsyUSnfk!W8Uw0h&Sc>d;p1NK1je5X%-TzKD}3ZN6hcPby zh>GDz*SZi*&WNpuF&?NFa=7*AH@Cii zY1|c|p3%SV=O_BNwMx-%LHhV_d-^|x0paHLcFR+JbSqA*czr+Y9QzzvzF*1vW$euy zIa<6t4gZ(nPnT`q=Irmy8Mk(I(~rxeK6|$FkK0S~&yQ*GkDlVMD*~Up+-?8sEDr?_ z>2BF>ez#%n#f2HGUR}MLx;Cpm-8uKE>MOf)JF2IL{J7E7Le|uC?4>Hc3U#jMfolJA zkLtKK`{i9%-R!0@)`|B;k&h}@0U+Ik8U)NhdUQnsb_Ebo z8%|DKBtX=SKq-ieNMEU59;Em>UnJ|Yj+A8;6Bg#utt_gLAATHLnxTRlSsn?5Z@eDd zH>hR38vw0A_&1@flEQmI?HoiPBh=6YvoDJq60)>luvlqsm8-R`nS_Wtc2T)NdtP~d z;kgk-xP&;eRNSJfsW*1_d`;{myse=T97BKDYZf0Cc4VxmSTQUCl(&Uf9N3VjLdf~> zgc3Z24}jsPAU@1^lf3iOfx@?C z@o1O|loB+epo*nw`q8`f_@~h3zE<`(ecp?|ypY3u_h|0bHP3L?x4nc#Xi!^uvrn3Jhk@yG2k+Pw|M{P!i&znqVcBNO@ z#!zqo(t=HGq4DeS;w~}aJM=g!!kh^bU`(Z_`je3L1JQJ*^&^zJ+rWVH7b_A%W%PV> zdKDM1M4-T>a6b@U5U63sab;Ny!)R6JZB|~E<2>eK;;US6_|mwk!#5PX z!?F%qp#!JHF=)l)eG()9foX=d!G4RLxL67luW}ZtflLQ0J@WV>1L?b84}<@S;Q5kv z7{D&q6Vy=yM9tCA;lW9G)o%E6G5_i;h|(FRr{;c$fkuvscx=1ZGB&)Qrsllh0TlZs z=F=Zbu>=HZlN{rh7W`JoWE3V`HdK z%Y{gGBMf4^2SPw#FD{4ad!ThA(0?Md_(lc% z(rP{Eti996;4m>PGedG}dLa?|IMXAp#sVxPfWy!zh07Jlcv=v{XO$UxSB-$}#FUp` zO`yrW!o*6dshm{DJZ^9uS;Wo3x7Ii9bFbC&$Q+N^inQ!KW`u+q5^2hwj}}D{3DZ)g zSxQu=D^6KMtu`&C-X2xbK30t;YekEE>y@2F(DO%ON?CbhR*1s5wb%3RUL_i(_Y5h- zmtg4#FU;4U+x*@&B8c13f|JaV&smr|W-JsWkx~3eBZt>!5A{Lp%mx!wpeL>ARFQN! zJvr3&$7){=&QB~}x*NVjm&Ehjq3ysjpCmHg4muDhGfd$K6a5*#bvY8p^3&m>mmUk( zq)j3KO5R3J;)_#CuUp`NTRYhjW$ke>@RoFdaU8|h9+V`Y$ggVX2Iq;nB}kWUN{Jno zE-gXAUqh@H0=D|C!X_BT&u43AdIU|8A()G%nDM2S7LX_*2(jE7Qv=i@Zl>GIuBqp; zG(4;qEdGwGh~|u(XLnsn$A_82IeW_OyGgW}Y$^{|J{b)8VBvm5q8pXrcN=ZjiWU}j zJUJSO6*0nYhu){bTt=%-!hy=}04uU_wYfx|dXCbRdo0ewxf~oiYD77<>*clcbY@=m z3zSA3e*u`OivyL}6GgkKfyA;tRYWV`!50fYMf~-=%d;WOmOKqf6i;` zV3=fQ38;=QGJT@xPR7|8rDVy8P8jaR?`fH=prr z=H_ODYsSOcb}*1Wnn`4)Mjl13cQ*0Hsi9Yb(c0HMkHB2xnI*T$kAPSM9y`8YU{d9f_6OiS0OH zbye6#JQ$Gny>MXo49=NTr7Uab!j0={P~q+x_xiB#ij~~8Og8mv{tUdu!-HC}rE?K6 zJ^v+7C$1SL5AEz;!ZR@Fi&hHg*w1|V3)ur7dO+;R;9epkupNoeTffJu&Oh&2N8rA} zs=YgweK_ifM=8A&k@mPjv43Ismmg;NB@#*t50p*7_+cXgv^}XA8T}-KG4qafi$6)y zC`94NZL>~EDD8HiXXjXQF(LZIL#Vv*Z?#cDllxzUcXlM(F--n{UWzk77yS$zH+nrA zuM*RIo$JLZgYD#Vul6c_`3daE)V&?8BuFWhW4mob7@j=5LpX78Ekp{1k^~efMttdVP}wrJt)cNZ zRm{bb5KQ0Nfl-&Y$wZg*zzumGBNA#->goro|NFfYNpq~e8PDU`eJUNGx83)S`?4gC zcjN75$vg8qd&}&XdhLdt`oou7yPh7N+xZo~?+rf^ME2WC9RC7RzQwOzy!M((`Mxyo zC#8R=1jsKcf1L;Xs{?Y8|Em&M{!2aohg8D9k9ubLSE*-~|FikG-yBEv{pr!Yn`#TF zI*o3M;h|y6Zpj7!>%s=MZCv}Y5h0C{nWtnHqF&YCbTX&6{qZq$zeoeCA#fCNqL|6_ zp5uLi;l)HZNA9+eNA`;DQ-6G*e^p#C;gPJD|2!%0+l#uIn3DGT{!J-s{&hD6+tbUF z>GPfTI1+ecFE8``F#PzSe|(^9K4rv1k2Z22Gx>b@#!rv_IGOty!LR>n)#u*UhZ|Dw zxA;M?d(a;8v-yAhW$f)kgs(e2I`Zh#Np)KDk76;^Mx8}dQU1S_t96^JCPbC1u59N~ zHPI-zBU+-1rV&(GNmN@Iwz!u1*-d0C9MzRBy2^?iE!?Qq57lKok*q5l$(x&qSE{cM z^e%5{eM9lWp~k&k;Nfr!Emm6wbggX}g|T{|VxqRGjez6JSym@Kd(jRen+B_8jCTTd z$+KLa2Sd##r=k4hKeRQ-D(5tAR%p(LI{XemVfxhLW|Ti^KM7~oU$m31b~Ct z#vyI7s8HuP>Do9*js#1l>MpB=iwBH}>>DNC?Pgk)1Zy91^q(X9|2Y@!%thCOyWAdO)IY-8NjuM3iHkFpeK2YvU zkNM2|AWQrdh=K*eZ_LL?7_(_<6kj8-3pz8dr}#igawJUicA2bKWQbus-pgG3 zD#o71v#r@*tD*-se6~QHPpJLpp`c$?g(F=6rz)6%R0+^6ih2G3O#{M8H6%hJ0h9|$ z2n43J)ip(0$U;bEhi=>_#^$1SfOulTLx%O$RHPU#H0qXt&j5x31JnD#$ke~=U z7pyV&hzf$lzK{y}YL?KLZss&1vfqOBy})mQ#otgLi;=af?QyZ}O?Ig^!|T4D+s zhr*4i0tt)i2HwpH9Sge^(R|;iQO|pvRgab% z!xd5*mIfvK{8rJ$|0uvQd~WGrC0K3Uoh(=p>AIAj*`1$`YQ zV5zB~Vr`t^N$?2-`)c;D2{le0G$KC7Qh=J4jrSMASreg^Rbs@dgX{*OAQ4fE zi%n5qdpDCj@KA8Uj&5#8DD;K|ZMLDN9yZg?U70h)cxslsii{JdR<#19gtQRLWk7YM ziAeTt6o}BZRmZ4FSZ0CmLo+u=QhMUM6o7>eq}yqI4R!tJgH4md_?<4j8#k*0^%6?WC64ckVsOW&z(NyZ?7leMA9yNIFtY%VZF!mS`;wG$)f^NCL=X>Xg?+=KLt@P!Z%#SujCptIV={2P=k zTNi|iIKYx;?ra8{BVr-CA{TS%?&uJ>@bqLS#Yi58^VINwL1V`kTf*;bvE_i~{7q0! zi=z>b0a2P9K(T|*+s)}tjnsz~S_}=VJX^5AMj*3jxMt6)d-yICW=GJIsp7AY-ZA_; zv4G3r^4O1!HS6^}S?^{_kY>gb&vv*mQRtWs*yC@}X2*933LmoGU7btC!;HOIYR#<@ zH*OhLd+LY>>ZF-a#Uf5!5>fc zYoyLNzsH+I$D{B=sc#TBdqD6=RbL=n##Cs2;URAy0%z~=x;L->gcHwWNH^AS!zN>1 z70NbA7S>pzdjEO>E3`Ir_ei0o^TRQJ)rin$&wspT<6ih;7FpNd6|Y;~%Bzs$#+k@q zwvp?|+toqOTi{O;f>%Nuc~Qg8)!Ew{A{5(_A+g*z7UbsJhmgp%u##ISYMDm#K9p4g zqyS9(Kzy{^$>VeU2&PN)uwZUPlHYlpy1PV4G^6s0^&1d$$WfEyz^i^ltSnXBS;VFT z4Cyiuu)7@WAmCP4stU(%zCZmVb4Zn5Rx@*tx4CLPg6lSIL9%~L&H;DI#5}}kFU@%Q zYe6cVt5Wl~DZaF06+9mF-H92Ih9{)p&{vu(`XZg%w!G!;a(zEi7z1PX=UKBi9a zB9Cd!+)b?VZt}pki0bS3)N(JYAt&TS+6F&rw(}Wo5+x^#Ez`6p%Q>$=ZqOn+nc6h#un)cd{Axw9yoy-|nrPGlxX;X4t2ue3}C;xKc4_dp`vGn6{S^YX9plPg<{dL4$j74Qcm4k zmw#dAK*RT@!PVSC1fLb0SsbDXT2aJ2E4d2=id)BmDi2)v`#*8(_|MJV9f*@G{Usq; zKjJ2&Y(yCPP2d8#IQGUl4Au>aj5aSp4Hb$45hcbPkc28kixUdSx?3x*Yc%nq{3?** zT?qZ&zP9&h+$eRHIHoZVr8fF*=;!x%>YuV3-}7Ofw)j_3)2>eGPje%U=u(8H3`cZ9 zZ1|!Aq)_l}n3572N4UB}u`IlI3-Duw%Jg_2rYQ@RhaF{TELfEqo}CJ01+41*VY7pC zB9#+rv0&};b{H{T@1V3s2_YMh5+#zphtnPAI{+miF7Td$j zAdh8;SnnGQO^yS~)M$S1jT$B09TANXQ@Ch+gYz-FJhJ)dxxe3!`O^FcaEK54xjUHy z)_VsArICw77&zZ74$~=_*^JFJxNoQRdSA~V3*~S=ct-qk5zgx?%PM5~#wSCx>O)h7 ztaAb@Fw(UaLiMC=)>vGK_cR6b3oJWAH(Hi;W*(Cra;2CW>!2!^CE6vfv?MJ^s;E>` z*B~p+6_Hg0u~%4ZM~mgq%M9aa+Msk7kaz6$?u3 z=h2iX`nAjKxwYIUY-E*a3kvLeNGK?gvp0)IrM%q4ea2zCNvlr85&{eac<%y{>5Z8B zS0gj?@Y9=ZD!@4~v$P+vBak#~P*E=v(-;evNtaxoX@tt6U*@CE%w3#*p3M-$8WsZ@ zAx8Mw)rxrU4__nRRm`(MJ|4C@S)5In~0IrPK3S#9cQZ3EcZ?7+h|J-acUyJMr2WK(>XH1!u z)(hL`n`%@DWZuH+M)GZnC>=p2^VaX~fF`mc?Q;)#D&K8$(P9(1nCEKjV=0xdDlQ8KrCn;g^AV0-DH0Hh=< zQ^*n|7x_5~bQ+iSpixSSYAieWJkhmTSQ5@(Mc1LV2i+}bZyd_7PI9j}Kbd?(8)V=# z(@s@26t@fD*KiZ0Dn>cfMr{zR%SI9XJlL}b)v;on$#espU&S{@O>f4X=1b^GiFxVP zQ}XEI5qqUmW;il-7wXO-Hn) z3ppbcJ_3iwkC_{K(Au(tZ(y;UaT*BCZ=&J0lL1c8Ifi@Yg!XhvA zyap85is=LkJzYyg_`_u{O`As5vV&REB2JtQdlpoHU``X^L9Da2jQbf!6fyGzE?X{= zb*ff6=5njp?39`%%9n>6CYiM|9n;Bdv_p-J4dUPt!lV z`0RTu;fFqYe4Z1JJ`l$r%*NTKdA4oWJV09z%&9*_`y|uG(^J2`Df_>amkfIObwbLw zl#ow0SKsBJ_`J4u2bni$(Zr!WlKjQq=RX9%ZT=^N@PFym|Ii@(@1s{){#AOFm6i2> z55hl|^A1$seEoq#QrcaP?9Ua{82E+gOpoaNm;G@3JAG2KB~72t$>^K!IOg+c zb@u)Bonxb3jJO?}k&Eo;^)Y%%zPEv22iVQ}y^McfXFgA~(=Uv=Xw*jDl~S%on*FzG zhSi_Z6{t z{;2GS^IN(~zY_=%1LsL_SZgnA%BdR(7p0RakhZNt+G`^TwzBwsp5TwnX!kOWT_L}G zX1e=Z|M^z`{q8?EPc)~HXm)z{yA7R>!_rDdptxJ%JMq+WP|DIH&0||DNi0)qtybZu zwRffT>=L^=5`G{3$ia#DWztO!gjynPW?dzYMc-VV5~~^oHad`FK_b2}0Wmkx)RG(d zP;7~KppdGzj;tuMek1p3d?yd*2*TnlI3cxYwtR_of1}dsF;GMQq(!4lpkyy)^>V@! zGlkW0@Zg8X5oUsUnC%18Mh?G8^e`U2s7kN%+8koM>}v z#r17bkU|Nmb=46`*60(1 zn&|yObPPXERW42w3jCmWBw==8KcKFR6#&4vNnnb{<=S8Q4oO&Uop}#p%asbGuE1ZT zoD=6W8Onm`+ki&d4&^r`MyYauh%sO=-dW&VPSkGz7@Tv^au6hw50tg_dy3Ajj2@RL zKsT!I^<5Dh;iHJC?P3!L+KW;A5YNeoeJapG(rM$!V-JtSQ58+8VyL)k;qe~PCl75Z zsPISwjP)xCuDx+^+3hhLfOCfDciM22$fCh$a5tBFWKEr;$m!3gdi}o7Sx+as(^Pb}U9l2fowFR_%}OH3p$78u2-^x1 z!`9T=MX9c3TgTZ~;Kp&xM92(Rj64vJAQO*AX%o?60W2)dNG(VIfgJd+=EN-5D0EX| z-E8Ct8QP1G;-)mJ6S&i}S7XLG$;31DD+rcFLy?=SLee2E7@P-|cdE*C4WvIdZ4^)u zXz*a!hdFKA`KKRhOzPQDH+S!~w$rD;O`qs-XT%mB|eAt73L2%I$aHhg7EHRLKnTiixebRKsbe?b1+i z9qRyaWYc4=M3xF3q>{86uTyH@B8>SC*J`-{pb<+`!TA0dtLpsFz^&Z2@G7$ST`xUh zzL`UQo|oGKNj>*eKTXv^d?_u)2|*kv+UA>u-u}c}SB;v2NK(!ov!#!LRO4 zALmggR0T%j_z~9iv`w2EQ{a^9%PuiUH4rI@qDl)ltC3!Z69K*rc0KmXLhpK=4V-`} zMd%3laf+Geds41mF=v>#ZK_um45RT7<7uG>)(SL;(_VM8_Yh%CYgTOR41Q}XR(j-93c&@wkP&AyN=6e!^LL5FQ0_F zg2eyES`k!*(rDW+f&{F~iIC&|b}-4dZN(T2oQx<=BMfLHi$6RH`yzon1o#zgr?~$M zQ6qUhtl3&6ahZ+P0r2>;0POwG(u+(2+(Eqf^SWB*ixHmw{-`Xm=Dx^#JwRl4P|7G> z@myNgRLB?kva&QBsA3|0?uJ5YL#djaH`!$4l7_H8(1f;Gxh*Sq`>7;X>?o2^Wx;xp zpVX+xHM)ThSU->u`01J;wU}r@ZBOi_0@hp&gP0Q$8+gu284RXBP19amH{U1_jjF{6 z7$CVInlMjaf>Z>&YUf0S+G<6qNW}WDbk*m2VytG$xi89H;{*61n$lsWkGQ7pi;}45 zD#fiT2He$ixXWd3;KpFb(-G5kbP zw%fGK=q6wS>FFbqwvgF|^9v75GCF0AL-1vTsij#Jnm5Tm_KEzN{+MV9gWyMh09b2^ z@I*$wk&8@U<7>25*w};ZNM!a* zW-#~}HH_EoGAWN`1S^e+mLJ+Vn2QI`Rm)@oIw*M;ZFCGO$h|Q+zwuG>p3%%F-m+YNsANa{Xu%P zAc69XbbAcUFz0sQ#7Dcp?U-fA4RjkvU^ra^r#j}$0pV^CA!RMwd=<;AVfQiit|RyN zme}3NoX(WVRlhugc8EDyhsPmG5&+DdCGn>>B*4c_Q^Dch@8lD*AAut*p+KWbJH4db zY)X;AsFcdsP=1UZ!;iUyqGPtlD={o^Lr>qDSgVVhu6JtU4YpfxYB#aCt ztCJB?CsJw4?$^dKH+w|%aB?8QiP(YHcCv)O@bJd)#VDSX@CcL3;lB2KF93VvzS>mX zp@CmXxEyJ6ApM?1gc#E~CcB)s+Dt7_hOXG2 z$#04RJ1SZxC2*38ddFMW|}v0D$qmhoM{ zgxZmj!Ia4oz1+XQ%sbZm`4lbFgV*oiVN^X5W;vkH0VB;TY2;SJ!*g_ueE*I>V37{( zNT0`-3&BN=i$XlNrB(u+Pal5hpzp6aLi3sG9ku#TPnV9#9Dm;{ZvKfj9-q78^`lIB z^;1;`N-agy$YYZR{mDsq>+5&C-wXak#LA-;?u|tpH&xp2p){tuyD=lOygf@dw!)YD zcH+Nak|Z5{|3n7-mpuIs$$)E< zKCi>~2l~h9^18O{4=ZLp>w1-4-p~6x?bc7W9?!hrAH(YZzg7J?dE4(i&qLu=!bhgN z&ux%=amAH&hsM6`H@0i5=1lw4#f)3E9rn|K`s`_nDj(=d7-894{`Y5c*H@gLSb@(z zwD0ly4%Fn|^PcaWTXmqnW&MA(#)9L>sC^?wS(rf~38{LZfgKlLebjQF zgxMrJcj3uqmn&KIN((Jx+|5Ue+zc&}u)1gZsc~dc=Cz8mRR~s+!Hv9$r!`OsvMl0R z5)qT@kT9C?bCf-FM%#Y3X7c;jeJ=)at{U&MOtTF0ZHR~%A?3=jP+bayI#CATE{X3; zQ7EF4fcZDg0z$iwVgyYJKU$Sv{K_P1do571)?sUrO1cNTh{PxmuNa(2?jU7W|9e{? zeM`xaYkRvCZbV(8fkv_6z%+bg!8MaC2Vjtb3+!xVyLF$$aKmuWJNoD5?S;-oL*~37 z{t+X`z$1*sg54KpRVZ9^pdcO)hyCp{>HlNz9KtgR6KLJB(XnmYHam9y*tXrVZQC|G z9ox2T`)2NL?w!SKW>)h&wXS8=`Kr$Q9u)+o=w2f%bDYi+(mtuuI?dPE_zlhiMFe{l zI7a_%iIr3x(lzZL7QGC;Q)wozsg=<5Z0umjYtF@WT-fpb1fAmg{t~-2R)@OfuLZw` zgo^jdWrk?Y>CIi1ua2NuH!Tnj%vqJOglr0w?Kg0mre5_-EJDId@=oa(c|DsVNER_g zY4|8yd0G-mjt<*tR-#hJK?Zj-Qnd5MhM0wW7aQ3aixY+AKx79mPF%Bwm!^|2>Fv&9 zdf^19H2tRGf1csX$CGZ~@_7qX2ND>(<fS=7Wjp|kcrMZN1Z}R&zyF%+YvcFxc<&2O(9xa6@k1Bh%xH_ zd!MHcO)pjm6+9d6$!%_{&+2w*SbclWq%P>aX`BTRP z#%tQ0J%fkj3|l{hgZ`4C^aXSec~MH%WlyK?=3aXP2_*$A=rshsP@j(kIi{JdEYW{+ z`=F>#{|#KZIA+K>Z&*`X4IL|CI-jlB<$O?%2}ym7$1Vh@>)sjx zdNU0gZb!d^aMqR1&^yWXvQAHkxM6N|(H0qLlX2SmnoYc@NoWtGiOtGkB5J>nGg%C? z=bgbwU1TvrFsS9(88A4#r|BbuKcYkvH@_X9_QOmNBNtmbmmy)^-#}pGhw{RvWOX}t zO!^LX;dGzk1|2B+et2Z`Xv5YAm)f+%=>(pD7i+s~L1hL}y@VN!)V`upo2DovFF*E~ zAVQxTi5PBwq|vH@>h6F}1-hfLMkoI;Oc0MGBK`I`e(Y!rr{qiI9+C1)<3&LeDr6Md zOt=i_<;~=~vXMD=(vfwKNQw*YQB28J?h&j`rlH-CU;g*qM$x$r6Du}zE9#?yGt74` zen0{d%R@j!!+5}!`mYiaOf6_vGMjQ^G)mlS5a{rarXxjW&cgG%v1a>-f6ORc_8PhJ zglb1`kgkRS`4->;c^`lxTDG32NBaI1u2;J}i^wKn2 z#&HxbVNO1GLJRYZK_t0G;uT^!f%Q~AM5LK2@vF!@e2{UxsY3T9admuH7})@u)>nn^ zqWL?*DZdhkc!$%Ky&Z+iE|A&8ejeqOgQ@r44cm0|$sXa&x@P3vS?b}bR@SN#9zm%*bNm@3-3K}<}KMr+-EH~nmPRAjqHZfL-C3Gu$3x1i9 z&TL9`;x-L5rr8Yvbkx`=rC$of*Uu$m13cWA$i|4ss)#jWU*<0hr^;%(-GQOJNW(TQ zJi}m0Q*qr9;{ATmx{8gTYkT)qB%fEeHAZane*H2A0toP-ml)k@cadYv4H*z;B6g&f z^{u7#`6Er{UV3pPT~ID(GV;gDN-Bf;?K-RBh_G}u1j26I(zAfg<6MdmW(NqDlK`}< zh9;;IILL^L@&$V_ye=|tsxD0io)wB!u`hk5DW(4YB?ZR&In0>$tPwMLM48wlr8tnZ z+^>1}NXs!DgaLyYDNY=Urha9<_t+GK80ke%7!RAm5Fy5n^4^D-OCo_k(r#GX6Qm_s z-C8~v3(89q15Dxc8f_34UC`eTV6dHvE}EJJ4{7YqvR1SQcdFfSJ4^u5E#D~kwW)~I zlZ2s#M9o6IZBR!y-v0*oU~sXp3}IKaM~vZQ1F@b2Lfxo8b+Xu-d*KeObuA6`s%nVn zWo||fkvuw5z*tl8j30p~9DT&dh#x}_XcndiAkac;A^a);JGX9}lWR>zdQ>qmAA-m0 zf=8<^sw6p5hqcT%@2Yj}rDlB`I*W{Z#aX zK88o=)Ei^kILZf!`6Z0}6hFm{4bN;w*geQ!uHL<{FVWIU%8i*Ys z){AMWOIjIx)(*>NFhR-)V~+IO{IudIKPjW{`a-5Ybra?&_Ztt1N_7oE)F@Lk8uj4M zCaKzQA-qX^7AVWPN_omFvH@&3>Yx--vcybs)tUH00vSReaEIPHLy?PnrUsvd@Zz&z`48)qSKQtWr~7oSU(c#r z)p9nGbUJUMG*QF0ws5;+T;lWm4?T@pZMLrM3pVXd6kA2cja}C3GeYUD(D#PdZz%6X z-_u+CzNNSHe{o3oAIkdQIV7$k;8EutRo60!6pm3Jx7zU#+(@l_re`i1YmWviuo*0>zoKV@%HisUq?qgZV}i(^G^m+;MB!ud0Z-_lgP zcg|~~&c9AIzieUWLiN!Yyb55uW{rj0N~!envBfIL{0vyLx7iDphI4Ss1|{zZsDkZj zuLplY4_$XCa+EijD>o2oi@UZemRUHw{+K|PJ)I!}HNpa}kBfFXbBhXE9MpM%^`VVK zk|oa3Kyt5!Ug6M`)Txe3vQw{~>olN)$eB^JDlBse-QxY_QnW9S<;7r#hSZL zVFb`!Q)4-n&l6Tmw$aUx#99k+O%l_;svQJ$dpG2}IG`W$7PIljX?-0|L zKMm*`l|w=vh;~s-bp*o2ET<7dO&Z-U);9*aZC-87t#T!JfU{2kmniDw6L!#+n1z&F z6-HVs&GiIxQm2q!?5iwjQ!G_PsK?094SYxf`-9X@s4EgQuA#Q7$UiANn4(pH8J~9g;zY9>Gm$g`r5FYcI2}bt!k{(yR)u z;lsHG^Gy)KppJ6BxEEIU0tw42DsI>@NYM2Lx!-xaE)!z094$0HZ8k@lc|ja_wndsOvd#r2jk2}Mva`b+hItNBSS1_ zbad6Np_Rij=y{TtYSSPkmoDzoAw4h^3Ef`*aDy7n=3RzS>WRQ1?h86o0#})D!}fWYU}j`pASfb5m!=ET5<05oGZKBhTKpd< znztJJX0+zkPTsODfAN1RpDvCH&%KPZ42d#iiGvns-ODw{s~ACftV`drw)B=_tCOb; z-aO(fNvcpDA87}BC&g3OQ~k|Oz?aWvnjV>x#ga{voEO_hAzQ1O(W3EKYJgcYmh*n9 zsMW?{m^Bc(Eb-n@=0*t$kO|e2L>Q$S(vrQD6X-c%F_B0VhqWOMC)X0b2i_QjON&tW zaPFCGO+f2M{*~MKO=y@`ZK*}q{LN7QEkWt({MsA(I87o&tbp?8C)Z0>KSkRfzTgkf zw-RA%`4YH7B{~8)%v)~$QpbhsdA`D>(bXB|1YxW@ zlFvrfO~31?q{(DxBv-?Qbk|~|+Noukv;1Lue<$^gMy+2-ulI&b-I0<=3mGkT z?vV0}F!X_cZB!r;5ahD$09rLvzhd?Jf74qd#T(MUpQ3?4gou20Cbiv-iW6|O4xS8= zXsUb5q_SJCh&-4WHw`|U#X_eFf54L_ZpbO-n&%eA;-+Q<*lj;>+aoNZie*O)5f`9c zAxL@d+1o-?8Wl0D_&EKx#V8gPlp{CSDgXTGTo!K`iSm8Bkj0rUFeqUDk7MM=q}I^@dxdMfx0=xE;9I;P2-BVCct=o;BO^ z&p>W>d;>%UBl<~QS!}*uhYK8#4w;}ITaYR|QTGjV$8xE|Ppt$#^3H`f!M^k*=}Nl3 z-h`THa;+(8P28hK;>&`M$+`KK7Q+Q1hZsf8I4y4_GTsYM8?vd_VP6&%KF#Kmr(F+} zb9uL6Of<4^AA5H;A&TURVZ#VrPZuIY;+uhyf?2FkR6dMf4h2zd+9it7a<{^rG;dv> zv*&rj+}ljO;#>K^$L49B*ruP64+d5l5?gB2JRASb_Q4gOqK%Sz6gAIXvOwD-Xxcoc zeMrs;dDETfN_hi2vin)CPG!RSK~v-8BNu(=5%q|!nco8wcZa)&Kjlk~AAj6gq|jK$ z^3fNL6vO|CcCAo9%;zxhDXI&-w(~Z(b?x(AoPMK&4=xmCN}DWR$+Q@)XGt?{7 zQUd(XVT!E(E~d!L_W!!hZLwRvWhOPLXXsln-<>wvJ_OOZ#ug~V^=8Itt?wBnmomU& zN1>2I(ec(3ET?6Kb$q@opb~~!0>_ck-JQenaD2yuNk>QKIv+&#nDp~gOvfU6tZgml>lr_u$Z!e-`ia{Iuezq*yhwtax@i$4u2ZL)xXdNny!~D^p2%p4ej^ zStWt*j4_i|Z`_@a4WQIIR^Xp;L+0mwn~HJzi1&SD?}-@P3VP!=M=-4qkzVP$a&9Hs zM7G)&1Uq#pq%x){lUP-DE<7I2P`q3Ed(jlLH^ke%#H$Gy#hWmWskXEVhH~1jp)X}* ze+}O~$;~e~i#4pO-{)Fsio%<7Z7r`ee-5@7-*o14A|v{FvoXTTb=`<;3c8eGZr#yze@DwYB3F zqoafLl?wuPAJ`Fp;5mA_W!j7HyNe}WEVhbjs$<6~=RV@$y=&b)H|*TJ>y|OnrSlp1 zwqks^9QAUCsoQ`k12?1dATo`%O#JlsER|It9wqe2r)(E{Ig}`ZlG!kftdPBU-v)7R zn}q5_=^e^*4}>(+GUZ=kEuU_z=mIXYiB3#`r5p;y#Aa32Pb(U5&ncQby(2IWPY<$S z9A-~a4`A6Hk1}Sp#)o=3J?#VPOu&7Si zX^4At-A!88n9YgW;9`L-jI5zw<0jxe!+(i0>=E%%qO*fGT-L) z_PvRC*G-nv)7cK}hN=KmJ+`&H$C~^b56D7{jYcZ5Q4YCWaOQs=1mf(D$DEuYU)
  • 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
  • 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 z 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∓Q=^}pfc0S-_vbGu@1l#>A$LV7@AH<8nn9;}P1?)zqoQ|>(J!Eina2Kq zqU%}y3pD?ybp5{(XlD6Wfo2xY{|hwR;kKgrEZ6DZ&!eyCT(uUz7WiAWwji~N7XpC? z^4Obka!)#rvW?AYe(@dYZlx@JHwTA(m8#>Z=rSJgC-NRpb z00jPBv6|8(s_%8BD7&u+nijK}+QlTlNr1I4kMCwV# zxSD-9Ygkp4+awc$VnL*vRe{WG(l_`_sMjV1L8Byp>v74rWI@kYdAaUH*qcR}2R-d- z=jM+FK_QpAzkfeuO0)udT=GK1-`PqSzST96Ziinc>ltN|UfI`I*2gHD$n0Z-I0Lhy zNuFsc=GXB%K};Bq)i9Vf5o2wpgVBBBft^V5)(|4?Ds4iGK25$8MZ8VG`Pcdsr!ru| zx;R%3>@k4pFi;)H(58D7H48s(Z|PE@c$5BO%jWGsVxT`Dgt5zR7w2!iqv*%ye~w zDJ0_k5M$R-B=S$_<&fDJPJPn(LSW`x;t3?m!O9&_2cqnB48pBr^X4a0$J;Uf7ePL! z$5z$kuf@jC?cWUGj}`$RnT_*&#hvPoTxNr7!^#~+4QOymF?s;@13pKdd8Wv*U}5Dq zN##QrD!=;>MtcPz2N#w6W8U3S(^&pLeP%d3aYzR+VhJh9#`FT;@tHdVOf-|~I+2yo-E}B%%`lr=ME%Bd>|QyERE<~Xx`}D7)%NAb zPGmpCmBcl@(awk|GkNjn?`2QEe|I!nZEwOG_?ny3^eTD4TL(M7i6p`Ov^>n#hG8)j zu8xX4CtnaN--_{;)Il3l5Oyg(4`P*+L5O)LI`Xt(*GF!Ko{$dP;jqXgkFQfR2XuCM zAvkuyOwr9VQwjeuYK?KEh)zzgq`V|v#W{SzbL-9Xy8{TmGsqz`FtN$>R|v%A(*9h# z2=EXuD)#|Ga^ko-1-4v)^Dv?mlAx+6T?xy`yO0JzBYD&QTGB3oSL_rw#N=7Si2THf z{3PiW`wUkZ91iE@3JrM&pP!?Y$RI#>lpOq_Bd1*LU9*ZV!T^xEp3niu`@}bINCK$_ zJIz8m_m?8>-FJ3XTQ_x8J5rv@55h)RY3-r>d0*AKea)-ZR}WGT(r@JBO_K_oF`?S} zZPbjL3ytFR9SuLc*6w;zx0Ydh;LrD+u%MuUb#~ZE_H^gCArgK9ciBNdP2H{|{sN8K zXtLH2wn$elSN(kY4YDaofY186H6TYyiB-lbX9quj-Atj83M|zw{a`0anWwxYoV} z4^Y(pIWI;MS~&a1vq87KN-zugVargP5L7FnSuiCuk-8gJ^N+E&%s?wX^_Ce3y0cdh z>!Tt`P00?5F%dmLk(5Nn(PlpP)y>vV1ro___H_7-d7{V|C$@P~LdlMr zZLGpfL1~So+ofT6Ilbx-fPMjR?X(nlo7KP5$Kg^f z4%m)x2iE`wNj(sjL0YZp%Pc+HTaEYyM5YZc%iH~tp%mWuE)#XvE!Au^%-hsEofh7ffVDF?W**+^p(@d`@(F2Ui^xX+7$>0nHy9}XwQ!Eb#N=81(# zQYesLEc^~R1kw>Bc5kc~VCoz$RWYt35LpHeZn& zF={B`7YgELLt*C-frQ!#O>>ao0VRf;16Aom_I%b4r)oj$4}-5sa#`-4>ogowPLYL5 zGVHatv)qlT;Y^DmIv72xtFW`NQIz**W1$g161nZQ8L@KK>x235rUD>#kC?p5?##{0 z2r;{{IfA3=YqYT==Wp>tJ!P!U($lH)0TVGmfd{M!Xpm}jYCnofM)2Y|oMeXV? zKN37eTwp*i?wIZ)s74D|Ym>;uT&>Fyt*Ds+_F>5*Hu>N-`)N?C(lV$V>rDA$Oa51k z?gFN2e-My-VjJ*hPJGVp${p~XAqI`Kva1zHganzkz>@RRBcz}vi3@-JaDg(ATQA|W z79KH@SGp`nk-oU_Vc_;=AJ=Vce~t<9FJjs~@6#A%<$XX)4z@83JF2>Qb}k;h94pUz z^_&30PW}VK=>Qt5_pnytImIG(&6d6hfP zV6r1|HzpK!8@xk8RJ)~(TIX}lM}ThcFn&l(qSu32uP}TY)&M<^L>Cs{v0rW#?EodU z1x7>OMYC>fecqOlj~6YjI-Qc!AZna6kIVBiNSqZFT^z7YZAXnPXDxgWg0 z8Dh`&4*49-n!}{1MNcMf-gAJP-+lKN6kKZ31e;$W7T=tugUbe23Ev}|76Sl>FW`7PiY2OZh8%ws1Ca$BjqigpU-{MrR&dH_q-sP?_n0hFYg=w$)d2MZNsp-PQ z1FYU@x#{UQL#)LA8En^_DP#8jK*Rrj?Z#vHbiU60@NVbCrU$!xh5c}Qxq80GP{H>y z_;iHRn75to_YZZw^kB-XQ>%71)m*t|HuL4vs<<6uw!ODa!MAp$b72R$(|C3NsT3E% z9nw0uJ~+`#vXxL+rV`DW1H)BJB`f`LPDZ8QKL1zo zrS8JWvu|}ctsOp*BOn5OCuJ*?ugaVCQeXMG)Ulw0;h40VDRV{Sfqg}>sdyz zV}Yr4*sQ||z+Ocz5*i}^)11Rs1Ra^=ED-8X5Wg?RHJld>)1Qe6sNjnTq|s=}aY_8E z3)?&@FjT?Hi7RKNPWHbBhdy7Zed!YJ-RRcDx`1^M=RlUE~;B2+~_Pg#uj4P?9Y%DBIq7-VHYhRiqlf&?Qz@)Bl? zZl~rfcNfO*>DHtohu|oh-(fP-eXS~=u_k}zXjXdZY4Z(!MlxqgxizQQEclhbRyd)0 zF_OU|u_gH=OF2^n=YAU`a~qqlfGRR+BZznu7ZMfvBR1+zACj`Ikev35K2zSibzb|M z7WmlLY4hhcHxmPQeGe741CcH`zHkH=w!PB$($9EJ@}I&P$9-BcAAPT-Fi<~}T}Qf9 ziCL6%9dGgbwGZ_<|Beu(H71sySw%?E{-~ybK5~f)4suPGYgUB3u+&>IE37C%m+OOCaSI1_^({SXrzYTnn)XCD&R0!)JTDkIpumZvO(6}3nr z&2y{Xg75fyZLeU`t$=O3rKX~0x;P@64K7gpEz;N#!X<_v!3r8-&R@BCTu6C>iyqt< zNE|2S3rK@y$Ak*TuhIh-h_J0DAUn}O%uB3+?C##TePj4EFcgB zF*5Q3q&zRnaL;Ourki9(w!%lDw#%hOp-#8*wA!XppvmJ9C^qZ{@=04!hcv4ep@kWR z-Yi;7p;Apvt7)J~vNC@DiuG|GM^DFLzcE!TKWy3)><)}~F2URY$<56E#YmOmQ~_c$u@y)c_Ki(TG7&I-HjspL6Lr06Fli$b}mf`2435>Kvco><$MMr1dQW8DEGj+@^lv@f*4})Y!ow-|QuRe7J_Z<-{}6 z>IRR{ep~Be?gq2?D=!QXNH#iZ3_ZI1dJ$15xlo)KmME7{5ScgVki;f2zn_q~r6@Y^ z@5(89Y|r2LevnQlh;qZ($WEB|*g$gP%1$Q!9^H`_CvBzu16#>~`+CsEsn54LDf5I4YBX6+0{S?fMKN-lU;W zt@7@*rE~9SzSy+g`x=q!+#GDnPkLLu;wTJmhoS{$R45s5I+XwTOka{gRCMj4D$W^YzDI6kfl3JiaizkwxusT z@{w$~gOxhccEa#n4%t;N@#5%BfbMnh5A0O|C#2@axr8};ki8-qSpWk8EPl|T@$V{f zTIykhQAHtR*B0eb?I<4?2F)@|>rvuaOIT`#2jz5tKzSMp$r7>P3fl zf$)nq)G>AGz;TOpLmRu2;YI~TF6eoFn`@6ePAT`XlB7cXln)73B(^fKVvVYwa%3Y2 zp>44fSrflgG|6X-lwpt{0;PhAPF6c}sZzlSQ+Bql6y#*d3Qqf_{6x6+JEQ&N8xSWP zs3a3ghg(kZlt8dye4tn{sAKvVIR}XK@~29HeXxhe9}R_^Mm{M`h7p3EqbH`?6K9o~ zBIP_yc^&YGT3S4R1h<@5c6+`EC*b>Sg0=$DO_`@8@ceX^E6S!H)YXo>l%^>5-nzR_ zPjzp>L}7^22{Dc!n_7D!86q|3i$K2Igraj*wPD4vLNrF`YvuBL%#^f}cqDpe zpy?M6qCEO@6zng2%9}>_P zeOvwf*^TQWjtEfVkUu4M*@VKU2RI-Gs$fb)A=?WRip8d{oe_g$D5KV8q_haXb+n9+ zBy)*lpg)=}zc$TmB!5KmZs{qL&*!-dV5TULs+<*zBS3H<#2^k6L{BiAkb%80GBT0! zQTXXL<|Pvu-0|nGD5y*c%5$WJ3kzu~xGraL|9B1&#gV9?tsi^5UFm`Vx6?qGE6Ow? zG!~C7*lbVbA)}}icd+QM|EajAeI@>bxy`C-3xzK2kgI1Y&z zbiH<#+`+7c!|qB}6OYI2;)g#<)~cA%WnM5M+M5GWC9aq6UyI0x+2we&RE{>~P{@%k z`rWKBr}It`S$xuA!hS+k+|FdV!qo4-lseCS=^PObLl2YsZ=eU z4c&WoYfKa9x}IJT_+0TLdsm%Ih4Rng=9zbQ;l)l>#Q98d&^&00H#@jFSjQW@o_x1wu zVH%F&v96;9W}%ukz8@-2-(phsoY2)fA3oLKB2sER+tAI$<-wg@M{oMN+e;} z>kCF#vL$=Y&GJ>(%gr`tk?-xPChyy__7uj*-g1hk&xi5jja~(x$IjaVWFrFqw*@iv zeVaS@e-@;KdW~Y{)2UnW>t4>cFHde`?Wp!~2Jds9|4y{^=~L+_SaT=T9%biq1^-D{ zOfBlf^V8d@SvBo{T!`kk3+Yhi|GGF>LXdFTazj~s?rvu@C^R$zECD(?+g5fLx@BVK zD`$lp@JE`czv=1Q6lxoQ&y`J@=EBb8FnUa-xBOh|;Z<+>8HY0@zxOZ954k>dU0xuP z)ur;BlO#*nRDHZ9R)xM|rLntuYW0N_42fHWjvl*ogT>UZR@%J^!|>bkjn z*?bXHLQ3!`t*}r9qe`8;WPhX=UOfZ?vNY#2?_w;(kTQ2=1!PDx^JqB+thPz?UOtc+ zA-etf^ea*2I2_fc+NqelI{O4J+1U{mGJL?>ywFL%3u#*FudsPMKrM@xD$3h03jGqK zANun9V)EUwNERheukkc;mctC3{sO;tsEg!Jw5mnz@a_i+E>P0{>L>o0>Eis$qH={? zBB)Bl za>0n8kPW0R8`Hw8zT_&R_DVBQI@Bjt!SKv`I6IzG*ORah$A;5JX%E~lJaJY-Kv!v8 z>J8-54TP2EVg#WTR0vJJdb5YY|6Rp=1$m)tajGvpnXxO)=KDuoPtrOZx#YkZKQRgi zZcqTG!;4@2h?Y^@oeV-C6s)qt`OmsQazGx5#dM_j06$$egKN3e8^j4?3018?1ZegB5 zBxu`0f2EqzLnvuKfA2BHPz%_LWU6d#*~l*gkdGh~z!N zG3E@8LxAXdpCM+5URdf`?{=2g148?N4DbRL=b0(xS!xbe3(ELX>A5gssIVGVIhax` zLBiA`sEB}qhv?j1#Dt-I_eBi@BBH2~bUB2ZGcqD|zum)<qKMh3NWe{=6>iboTtL#BJr-YZ zuM_#ro(#EVsaU@32?XywuM6|nv}))p>P5NJm~A+vvV)dX9#rrW3KU8xJZJvA6<1Ni zsss){^)6AZtRgxo176I@u0n^3ypi~md6GxDA>sV-5Hl#T>8OhmTQj5u<*M2Wx_+@e0?Zw8^4At53_@2_jf*i|&)^*eYJlW)cUc0? zPP$C0whmjC)ZX%=R6Uwnp~c-j5k@eox0;{PU0qbKyDQCH9sdnaSdH}T;$t5fN1#`% zA+4JVF}Hkh63eI@t|i?o&CECi_0-<)T6@l!6?04=SsXvkNWE5M@T>zb@WV`TL%i_J zIC6S-8r;}XOmoJ@5>0e39BZMa;exBpRWt`md5XqU0)F(}H9FCXdW8&|)ukZo+r;dr zPU+=$BiH@X)6C>dF_CO4wq!xbkGO078h>H1Um|Qxduq2*Oc$xU2J^*g)>u5|dZ?hC z?frz)P8eYi2>}zAY*?yPxaz0b@5ggN__@ouh_!Hp1*tahN8B-n0DE_ZkLchI;{jTPo6 z;j7twSqCGy3wK&M_D2heA7&}kS34oLu?dm!dT!ddI%U{oQr++WSPUV~w|JZwnAluq)?KW-Owr$(CZQHhO+qse}ZQHh2+FFU5-yiqhi2uYX?8@Gy zU7M9L#;nX4Pk%>m?de0~w<8>2@i3y17cQvuQg0yIRUPv7j23j8aegf7HU1;{P*fx9 z!49PWz3^Al#Yb3^52)Igj%-WF#FAiIWExbNqXX%AN#O736(?u6EJ-gR#@Nl8iGQwC zU}0gfOM9YK=%pkf5e7fXK^HCCi+A#xYNY3>%oukq0tuU`f8r_q@Scl6)Maci0V}?Z zQS!msTr-L)0bGX<$RXI>Cfdv4BP1l?hAM~(6uZcJKzY&*=1%XV9c@ww(Vh$rPwXgV zr;LGxUU85A=i#4&QGDO8C~F3m5}s*~ zj~-=}%2|N^RsHX8X|u)Zr<;$FLrMRT^S7ty*|t2pH;?UPXK2d~9b2^v>E)^?FUD>i z`?QCLLAlSz((mVVkwGi3mVNH5!?=~n)6s6rb7TF7X)Rvm==IA>&mV>$`9Xh*m)Y!p z8%6%hEdQrQk$)qz%>1u1%S_Dw_sbA1+j#8Xh+lraLG$U&0nIC&E^YE|KDD+-IV|J^ zv_U=vZsJJJTgO>PQmX#G`GoE6jo6zKN-fp`OfY}as?qr#rly#gam<>A5#SvWgzvz< z{So;;W6FhKnhZTYCZh4bqPSbt>D3O_^~H=>?CR^;4%}Q>KVHRu7=pX)!-3nu(D_mS zDStZJlO`Lc?3okj#B}x9ub!-^^pkV@*O$orXK(kvn}V;G?A?Etc-^S~L6-lzTm{%4 zRsYjJtUH^|+>jyL_-4VGJv&^5!2dap?f7dVdG3f;liWlVqCE2aa+W`O8T$($>=c>* zin+QMHSc@b{IeI9Q7$Y)RJg{CgsNrR(=kErNDO@*WoPX^15%HVLg$y5)XSXYp^m!)wdx5C8%67eWY=0M zCpe4O+^YA11+@*J1PXepLuNgcsB0O3b zUeqrotT?U=d(h$lKt&MM_qYih0FZ!xnXUUGV;d|tTS&!IN44y#cvYjSa_I2<^sr}= zVa4U~@~o5j`*>RWksCVA4^m;abdgmDkTG!I=-|o(5!U+m9Ajz0{~|I6Zf}mBE~Naj zdBNnB#p8>y;DFN|@<}C1N2BW`Rn!QjwG&l_CMg>|b3+y`G~9zp;}p6#g5|d;Q7(&8 zxHa$b`D}#Ga>tLCG#S0*+E;W&W6S>4aJswW>)wl0RTJxMRoi?&+FVAn)`uZ!D~TpP zR}@msf8ERC9T%!PAdl9Ip}PNd4a^h;l1WQU04kI=2#?=qj`Jn}sH`kHm63t}Yd=g? zI)A-UtS?=!J$3*WQv5Y@*Yp67o)dLq;)3{^3#6?hevCoU1QBr^aiBd!>@XuVQ)aEI&6lw#CB#%Ni z>{RxSrx6{iIYi1&Ur}V>4PjHbtSH*@k!xnh6doqZ9^jj>{fHj&iIIjGWNac_C65%w zctotmZn*(CK`1%s#C)ALhUpD>FpqUll(N-GjKNV6y6AoYBiP~W=uSd)Y13XT7$LRY zh=8Tf>dijPG&%~WUlXi)G2-$(3WY+~d{C2Pp_U8owP}kkLVsm=#AUH1>?=j^ii>0w z!9Z>1+7;KAM1~oUC|112jw-G)817$5Ejs`Byy0P#1%2E?dHYW+WN{E~YoR5es`(mkWka*L2a-KWtq9+8m;8zs9%UF zN1WP}YH^K5={j$d74}y}Ee31W$NR)v+oaUbLkfupyIQ?q=5DwzmWXd!(EuV&tY~2IkWs z-B$9xPFJ7q*4z0bEdBv~X*$Tu(pV(9-I!rnh<~a%TVe8#_#;I$mKjd48`F}|C%MwD zP;qYxx@^7TQlimlo6yJe+Xw5aBGq?`@WQXyD9KB6vE-Elf-Oz?RdN#)@K(2&2!ilE zG>F?KN&nZ1WpG8LV2XFCP7HGTwZ^n?=sRgdujIL@?8b>6FrfNff{|~?etU4R2&95Z zL%J$l0TCA680WQq5Wjb^Q{HLF0-(>BtmX(_=%t^xbCQ>OvT3w{u61fSneaDK$qeKt z$5SYoWY*(#it|CKOJ^{nXb#j>$<8mFU^&6Wadn=q8Wq*UNO9?U%~Xv%B0O2-ETIaP z#+_jYbJi^uOgh#^FMC*}=*CaIgoU&{!IUaOljx+;0^fP>SXI2(o=-c}X_BvgTUm++ z4vJ~h;pqd`VfUTwuod>oJnoS&MA?{V5zUnKnN>CO_uF6s78HKG-I9JI67WA*@#98kR#c^Rvgm+OH ze-b%qt|J8WQOx^EjvWT6=>oL)pl7KUVQT6}zKndsxyi;z41$J+GM`IevxDo`qd6)( zKZ92Bb%YJd*9)Nw=4?jXJS=j})xU|;3JdDp{RE-uBk5pFdTICiQ|9~_k8lw(jB&&b zL{P$@r|=C6>e&d52!-Il(`DP##qBS?j7OfZnH}thOXKI;gQ)F^7@vPwKcMfxTD7oy zJ24KsMkK^@M=B#-@ZrKZj!VlA$SCr|qu>a|!WaRQd<_p=&VmmScQI_K77ju~QDujl zb_JmHGM6AwZl0P;ps`m2nI*W(EJDeh?2%MvBM>D^p$>2IXZIps7vSHY#26dPbp@Q-D|E-%`psZb0f{@d>Z_I+esNdOUjIhAN-<)?HjiHSVdCnp8UDooyyh1QwQS7^*Jl}^&yua%EEYU4 zj-U6T%Zt2o@GzQf!ukAW|KRAn{NIx7e`(nNP?BZ&H`1{G=idJc4a>mve|HjV=_X^b zqxt6RI}S#>S6fWIOfB)W<+vKjQ|XaoE6Gu%f(z;kM0YHwEd{^5c-N6IJdd~?2kYV) zjF^^b`#kc#9Oe{XzmTo^@>odwzJq;#$@YFkeM_Ccyx-kn%YQxLP^+oy&z#+@0%O6v zjG9ZoTe&TNziKa#>%X2j6n*bU_K)^X`R8}!$$1rzdoXpEiMl?$mak{ztykaNJw(<& zi`PHD{4Dk4Kb|OCZ$;fEzGA#wuc75rh>s5Lm^g5EXU;vDEM>#lku6eAOT8c4Kj1dN zS-W-jeoHmkn{ zk<`c3)m|mlWu>yH3trzw1$Di)ti{W)k``2#=})pxIn+A^+NLbb-Z489gX}<;(LN5; zfauUmtdrbF_YY|`X_ThQ#I9;v0=!-Ch<+gTG{XV%5Dd_6a&oEcNET+Fo`ZE-{Fzew#koB9S-?av2 zlXN&;?P;?EERs%gHi&u_Omj=EWbF`p4I8hJv{THFibafInRO&;v$Si+u^=@$IZlJn zmUNgt_Ozr=){e;`)6BI8%%-AVJOkS*czt@rK*XiAga^R8zSadY`T;V)hq4jbm~~tu zmRYSnbES13!~cr@@qB0>|Kt`P{&7Ncc8M*L!!~ujptce;?tN`Lr)9a+KNltC&K8XH zA!G(xHR#gDsuOheNu?#4btys<>O~j2Qi(bnB6#&FsNwmKG+`T#YOD<9{zRnt{6YsP zf$to=RpH?ErRL%*+5Fg@Z4?*~f#q1?Fbyqne!5#MB6L!lZnZ$^@mOk?-m+J_w-O2y z01eS%Y5I>UQReMwWuuYemsK?*Y+n~id+h!G2QX8&Cp|%tc<0hD?P{=}^Ag8qy*i5q zGq=eV0x{}1HetoB4mj&?+24hPSS6(U_Nzdf zoeNJ-^QS*`_Sfr~-es+~brnU1F>(-8=Me|Ax?zAr-L73Fn7#dfDY?c@-Sjx~k4d4g z2^kPU4Fo+&&BE^H`U;4xgJPMdVN^yQ2`4zMpjK^q+g=P|Q8)M}kj;$?nIQnQ2>)@X z7xht!Y20R>QE7ZYdV0kgTyCv?@>vC?Ry+)aW&gAvvc z=W9J9$d!K>${L1#z$SrtyE#HYrjzF{AjT>9{G3ipb&<2JC$bX>yel7wZ|bzvUfxQ_ zh!sSFfb?rqGNpqtYqFbATiR;42a4*5+Lj|0eG03Zkg2aeO+uJuJ(Ot~*VXOPI5EE$ zk$Vbk{)`J0#I>z>q2)Vc9qBaTT7`=aDXiS>Z17BN08eIZqk%KT(S(m9$NNoTa& zLTP{<8Xiqg*DYKQ*2FDd>~Cy$`3>L$X!GO%VL5!Kmjwq-69+G1oqbW0VZ5|aHl=Z+ z*J)^T+uCjrC#FqY#2k zEjEd^GO1Nt19{Jj74`wPq;>BvTB`(aH#6l0zm-PT6xzHBs{=Wg!%LvY3Y5313Onlx zZEgR#BD&bKpC5OlB2aDd%(fjuN;K?UBD4NnDuXU9 z{q6IlWtSKwNm=F6E+T%9LDM`xP8zqO*o`kVYOZ1&t6O+FzLLOz%JRzreHV=6{W3T) zwrqc|FZZ`KbQa<7XwhCpp7^!SlTKqlRCsc;?l>zxYH$lb1gj=h?mvdkiP#?0Qx|`W z7545{ca67iwq^VdabKeO&}R=<;lKMXj;U|--CZy9AH@#;csR+T%90K4JehD|;o!49 z4(5Me@+X5I?o6}z6$AFno49oLB1Z5%W60G1VTAqrNz5bfr2p;@piz$Z)9zhNze#9duMoGXn1mIR+V`~ z$jc6}KfLMvUJ-kp7;|Ob?x5wr-dJbW@_k*Y^*(IL%q0Ck+{o+fXUp>ar0>?D`M2n0 z`1LY;-zPs#7ra_>rqX{Z&uAOZFNb^W&<`eZK7sxD9+v&8TY7gO^*>7B^SMW_LHUsI zjq&4LUq!e&B*-S$hpn1WF8;wLZPTh#+op%%{i%)wBR4z}sZ^mg-R{pqP}DkP(untC z87k8|&}LL7&^vabm3Ao`nBD5(tJG#9b6Hc{5)T>qIkQ%v%5&A-oW4%+hp*TlNymos z8E>Ggdsl|Pt6$#z!I>lbb;1nt>~jTT&ccz@#*_Rwl%boT4aa3dA$ok^CX2&NT@eSF z;tk*G1YxR(ttx0kpM^T--#oS?$tg4%-Etd==PmUM9=R;3dHz7 zx}`QA@mmd{F&Zu6X}CoMmQ0nZ;2>rZaEZIX?w73Em8-^~_R0F; z#EzzvpFyZicBmbkPd{zmtr7Y{mwf!T*Yo$?l`8mcSZ|p-x@OL5kf(TP46QZ zB58`)jyR787#Wv>Bz;kFDN{opy8mbuD0si!7Kb}6g{nuP2hH$;GGKw->(a?bD8MNL z${_!F_1?r;M=%uInpEiokA#vC^($uzu3NRN6v?~KC70Xd;wjr5z)2^12(ODiEjt4< z5hiVD!-~i^)r$-={_?Ns<0sMUSH}{o05dCYLW)8`#i55N)kqBiM>l7P+s`8 z)ne>SV0hL*;KZ&cRFs9uMMgZ427>F2Bytk1Rl8RYhUhg8 z=p6>#STjGp3^||g6K=a#m~^Je0C&7dDc>F3$UsZ=iODjrh=rgEiQ zs(8R6W;7lA$wBu~vZIj$qPD@{t$wM#<-h|ON%_|B5lsq9P+Ac1OY#F;$B5cB%L@tX zu?VxXjSDF+FQgXagO?gw_D!EjgKkf7Q_)`m_9lJb_YX}>v-JebFVnkCV1Ml zkn;U-3s(0nFc0}skaUXqls&Y@X9F6;g%MMn{%9lbZhMUBwkY4q3 z11oh4=n4}&S0ftk;NsbJWDiY)Oys*y;JOdTSB;L0(aQ*)CKhl|XzZBQGcd!0P|^v{ zg(WJilp5r|Wu_loH-o}E?Cg|OU%>N`xr9_tOKs%s=UG&$(PJ!{lqQ0~0EQ$S+HMy0 z?j19uhqf6kxMB!b5CRTj00`A?q#JauD%aEjiaOZ0;qYC)uG8XSH%XQ82S1!#;@Ik-j@{JQWAOzQx)Kt&a(rZs1Lf`A!^@+D}9~B8bF6`gG5w zDYQhmY9(9}*R{v7;C21dVZzfQ9*|L%*t&Hsy9N~z8=5Eek4pt(hp4K6A>u&FIJvW< z=drl>^L3uaE^JtYj- zd@u&5&Sc6+<0Z96vQ4n`8!9R+x|&rL6vOPID~eqBB4S*K=rpOgku1lsw?%G+d9$v8 z{{>i!YTXXP67u02Rw)>B<$*i$Od*auEZfnA+r?Dm&lV4S5@bI`>H8JrFzN_b>|mxP zuI<3SQpl@17D|BKXNI2OZJyc@g6_LkP3DexI~YCqBC0Z*^y6afnC#!R=VTk1--726 z2s;u$k~Bd^6)HTHDl)rngOlJ7nYi87nyO3z{(0`V9sBdyxI z4MMLIH%b#4>K$pJ0Y?P+2G|cz&$L;!fG_A9RHTsHnqo|M(p(i@pD@^{DJUfdX4!%!h(-nLfK61fOnapaKpFly>USs<<=n=}!?`5WX4Hi$`y zHwAJ*WZ9bq3DK@+!`O-gQA`f$Oay%%?=mAqOlhAuJ7o|&z9Nq_+K&VxyUlRxOa1`bce^R{&4rb^2p*0to3!5BxKBxar_(=A z1H>*F+SnN#T1!%nnR4LW4WPfo1)xp;KLo4bG4d&yzZlBc73=V5j&ID60R zL6P&l0$QTci8AHn58f!g{SS6M`8iDgx0L-~YVtpovj2_LB+I`_O|mm^{*RRXPxY$r zY`ww95)hW?Zfjz=LFc%gP66zOM+0`VZ-E&FtT7xXA!pv%?oE3-j`TGfU-#ch86=U|y>nXe5$E*8Rga6}ni^u)%_6+*4 zhgI&ogZKH%L3>KR_r1Uf+2K#t)6Y9=7A+3Fz1VJ?Hr$QwcLyx>ZYCA?rtPDFg4A-9pV4ja8l0b)&X zDC;_^C8p@8g5_R}5K1VjRxxnL*vkzmEI#fWS>2z0?f;zY<_&7*4XS1hHnG7QhyhM^R@79H9oSUIjMzj4U+~Pbku7SH7TKZbiEFL^a1aFG zcs!dj@n4wO%{-XU-J9rjim>Q`;u4(@y6llpMWxHg6=Y`E|8cDmcA?u1{!^RsTVh~T z)DaZ|4(}lnrX@qKuq6KJ4AQD;Jcn2Q?#wzpl5C!SUuD!>^iB+MKPvY^U?s98W2_l= z0t}W3Nd2a}XtPg>)W{I7ZJWuJm_LuiY zZKPG1fTI(>LZVSoCAI8em^RG+^M3dRS){gHi%pVn-4(2@LPe!#J`Ji9wU%e^?JnFX z?^i>QL}A~YscIlc5L9Llr6_?i!vUeBi14rud#!uzJqDMZ4L3>v?!Eb`E-}?O`JJ^8 zP7pYjfa%A4hN(eLxdj0&mAH}UC=bJ}fw{LW1dd2Di&PBEc%Y4gi{^UwR&^M1`APvo zNb^$9WflS{hlvCl`@2OAJri5w95Av}$!~>eH7|O=L@Ov81(pz3#A7iqf_y14MFGwd zYJ}<*a^N%|XQxh6yraAmD5+a>VE_`li z8HdtTc5+*#KLYr&*l%({$~USePcoFks%BJQNTG>@co#FT#SLR;8e7Y#D5&OKdGZ5- zB8%qA-Q7THRmty>O@JVhx-NagCEHHd4(YZ8`x=8iS3*mj;0ZJjFmZ2+L4xt{_mrRn z94LuD{p%@XfIvd(l^;qG3Kq0-K`z|+K>{a%yo@+Wko`9-?+!I|%v_B`(>du3iCl;< zyH2jPE*7yoGQ;c&7+k0@N_l$hqK@AgMnd72OqVM8!?cOBufk4=2#ph2DWX7ssAM>^ zkU*If+}rznVOmUHB0+sJD~{zFi206K3s=xU8E+!tF#Sc?&|ioSe(Yv?s-pcwQ!dBT zzNW)5d)zUZIxXHY$w?7|LVU^{Ivrq&u?4GlqePnt)ijHVD5cV7SNtKHSkJJ;o!N3%9RvRw&GS(Q~^OD+#v0M+i+1P;&kv(vzUaC+XSGg1R_&Fw$B7X zNuSfIX@7FwlDv?+>(>WGcwi*$Cg86(c3d|WA(jDkJjHs*+E&GN-Nc;S!BtYji~3TB zdJ*chtCou4NA8)3NvNN+B=bAdHWF*GaU(#opcXsb^=n>cd9c@We~K@!PzNE`!M1lj zgH8;($Rm&_VtW+3;nwr382zKPDXQ*Raw{y+yu`01S?BwK1x(#Y)gO{mSy^N%w~<@y z$cRS8NQTNLVx43O1^SC*Orj0<=+`HKV{?(yArhKAb}fY`96u1pTaV6X%0V~PN@Cn| z5jW{9oN~x&fUe@E$Z-o`;OR8ePz36&oa%BvlZNv>>l&5Yrh+an#g{A0CRLjru_Qm_ z2^L-ddU*rHt#gC?h;+2-rG}yVw!qTn9?_^C>uIh4?`f^Qw;kRR%^uryP4XQ$+sf2< ziD%oo8tT}qHmZ-lZ=KrWa=U&D=mkxiNWxKxQt#BtG*kt15yL|i2BldqJp$6i(>DsY zO?lNg)ihv*a`JMajUJOpFb;(!AebbhD@a@Z!7Mh>GAacZ4mYE(=$9(Sh~-CHC)P2; z3=>>lhr0T}Wdbe(1qX5LuN@g-s6?vTlv zF~1j8F+Sq;c^_&K05#*SPRZ*bZinEyV;oApfSDTypmR~m_E!TLjjkNI=H|=r%hgLFQk|#85Paybo3@*x{0z4hewHFKLi&F z%K)0?*B?zKk~Y+qaGK0TDwPUIp_;H3&RfW;vPZDAfFV@U^$7S7zSDJN93mzJV_`jl zdRD>A`ar&Chn1$Q`uQy1wsOdl+x&b4`)lA~&Iy+0K8D=G0qimlF7W6T55l z6*x(^bNIyWuc+)~{%kT0!Ig*emSe>Zu~sE>ff7SRAtXK^ZEkv4sPMR6A8!Mo6V8vC z)B3jtd>yW!uIR%DZo)AXzf0OR5 zHz31{w`^kg5Y~BhOdw;0c2h0OX$^(C!=r3GB!M}0ky(8lgZO@1r<0LbH#46}rpFueO&^q^E>MTD*jP7L{F zJ?wrHC$2vlePZ8mY&}-~6fN|=0?#h0{|M?_te9letEa7e>988~=*vzork(t}HX>I2 zpPRm6aMTu~Vf~9ad*;17Ic>6#@!vD;>4uRTGN$ED9-2N3r+Wea8lW5gZ!^k&xyt|4 zjPh^fDp~$ju9B6F>3_^9|8D`4!HFgMFI@jw5Kjsul1;h5g0*RYZP9t~jUrMv3MEoX z>J9zg(v{(QM9e!hm+$A83$$8OBpwkz3J zrE9D5d7ppHX!SbDzlZW?c{Xlv|53X{?>;`9*4>r%sUKK>ylI60)4+6W)8x_9y%8}v zZPlu)W813js2qX+g_cY4q!=mXsrXVfr*~EC_8gkfir}rjIuli3qfoSBiYiL#=;~4? z@mr;Ckp7^+u_11t#nJ8V1%G(@_v0|gg?ZRxXj3ohO7HoPDG<5s2y*KPvg=h3lNnL) zuVhwZU6LY5CG_1&c&3N?g@*4F2l)#Z`Q|APIdxvLJF1gNk9ufD>KOwt(Ln?^PRcfQ zAf(f4<|(w~Z};apFp}H~Q+hY4lv*f3RA$HE&a9P-wL>$hHtq+GnfJ!-t_cMiW)v}e z1_i9o{x_|x2Zaz<6^j9q&m!rIE)o}qG`gD{_FWItSSr_v~{Mp;mQ$DuKrh%*dXLc zpt}AgPyyI^*D4HtvS=L4?CKauv5-cF!pMOAmT*$>L3POy zITW#Lo}@3!GF?J*8X^fvg-=icIiORo`x(v=I%XU|cv)>hRbp8Dp@O9g0c|;OnM{bK z&Jo1w(tlAnOn2_uaznBnB(LYMVqroEs^-r2*K{0Repy{9E!UKa<8?8<_a==22>RER zakJ(s8Meul5<15d`eIwjZc)MQEJOYluB&yq6DC-jCKU&}=!HtxEBgMpKs~w>Unh5O?K;M7t4(9|;RSoHa=SVFE4{!Q!?Q zUlO9o17}n2___|g}vXVp;DkE6Q@Tx8x2bxxSC~n-J z*#Ev*#p?x)rlNO44GOrU>M>ZlAY~$5mAY{q+d73U)v%y+qeu$mDB;kDf-k}ayb3h7 z)D)91yE4luq!GFRaP}t=0E6m6flM25DX&UAO+6UykCJ+Ea)5kd;9rwK4Jg9NG!foI z@B=FF(X3F5Vjl}rM$A=mSr7$W)07OtY~+GcfnuvXR96jQkZ zpgs~?em{maLY*e08(nFeEFuEdpB-R*f;YzgM#qsOHN1>>jE(%T0+sK3mPfqf$3s$W!}G-rM%XUCNJrkp^Bz4Cp#Y?c^Jj_djoeKn-$5rl0-ZN7n?+){2jQd6 z{OmaR{1`SNb?U^5nInmXbL;;nXh`q zu42;77rh;0))e*y0k}lV)g#=GA{C}!m+pj;FqCvImXb0XbBU8oUwtMoj??Gt*;BF? zkbQ+j~tk*tH*?ur4<$FDRR-?&`{sh{bN?fUYYM8sp-d zbhhxEFd-tw9w5#mqLxo-=5vA- z%!?YWb;XTz%8!CF9g_^?tXQyi6TDCwxu>pvRox@_%!7IdP^*RL09(rGV-?$wS`S6UaN#`u zqRO_uAaQ+G!FhE+Q{YyAln2EG*&t&EKnYziHo@SZq+0{W=@Uqgs#77}P!xpMqt*_Q zVqfYcL`y=L+0O$^=n{lMPp@TTgod%SLLYN<|IJCWF!2Z+0mBBYUK5XfE2;%dVX^;f z2hn+Eh@As1=cR7)uet-$oPxi8IUPGLF?(P20`we_N9kY4 zRDrTuoyS*8;`A9kj=Kmiu3SHL*`d|CzRnVE(yB`OGE@-A*quoL+B9{&Jib=77jE~< zWm-)EVKS!7E1cncw&q4*84Be2)i@^111@iX5;TPwp+mdnOUJTn=dv|U?Z&8Xk7+Sj zswmD?Ij#XX9$NR}xsjDk@!*3zT>HH2<2`wwCEk);bKr4VIuWaR>|)FK{5ot1DiYPk zIT+eBBeDmz(IQpP7RR;pX65c+wAA8Lkk-Ytn%sqRvFBgo&VoZ&zR+0&@c50{J;FGGG^=8dha6#MfHQ8u0JPt z9r=0h9d?sD<>qW!cIw#Ei_o&Co!r{j>(JbP8j`N#{a)}P!=Em#vhyqg$v0~9;I)^B z%Jrfr+datA9^P`_y3)TR?)m*9JCXjkf#AP%<9})(_&3sxEdMIq$in_VP3r&uKwzpR z;AA7+Xr2&WB-nU`GA*nOye+y3u2n=jf>fEXRPpuVO(!XvYm;1XHB$$MVb0X>WSAZP zlIML**rbE9Ns4DrO zd_20F^kY(YcPCH7&(rYz_<3njc~z!iBC2Q8T63Al^Y@g_oc<{p|MnDF|EfOjc{ccV zUEb@Z(pqNvpRMqRzYU1_65J9n57%d$xH4D)!+pIzj zN$x?pj|Li~ZHBpSu?$m|9~kTy{SNPau(+~o6uN^Rn@k-i6sn~mEiu*Slltq|-0zq8 zCs4v}Pk1n;YT%lXs!^butU9>szk_z6o>C-7^>(^=u)l(~e{^q#VGFqc= zw-u|c4%q{ald@#@$5~;-i3$)77BmLJ{Iw^8k8zTj+QDt`7$QPzA6kkaAkeIZzn+&a zUWR%hClgO);6xPiNRfdn6#`y8t+4De`7y6CQZWXMwLKp7+{fSrAL1%Z&)6HbiKOU1 z0QnA^ad3-W5+m(E>&{2(&~~~47%?b_QE4>^rb?&|Kq}5)xtwPPKXJkpCV?j4CigkO+o~K7}%!ZrSmIaWRom~R0uFu4F?DdFAaNWx)vb9gxzMbZPC3 zE|Z^V6NBs`03xgfeT6g;!$J*nOkttKIAkvz*&A9)^#CQq81v&Z3%?D&{bokI{Pt%6}l4HNt3|P)k7>MKhRd zN*uxoW1AJHl4!@X7!kGLaAfw?Vwya9s{zI^M9YDgEU6s3FX>8+o5%m@;FBkfC`~Uw zq(z$N`RV5AkjKN92N<;WH!?^igR^V!67 z>HnnnZU35%_+=aLtzBi@aUNKEq}jYcf*`RLVFU!<1pK|3@ zflboIji|`dC|!^JLpjze5Wu=c#4x; zCaXu}RV!%-RAdztebH|ete#*CMgwTNL@Oo~E|(bJU@e!YU+%UJaA z**{7%T(S%3pubA>G)pY$Wd^;YCr|Ckj^>Rfif^M1`y^n~({$31k#oyh!RHE4xgh4f z;tfPLM=6Stzp>Y0zHm20vwH699Z?OSIr-1Q=MazQO()0~6N#~m7+B7{=D=Pb9lFH7 zqbt%)g~?4_2*rtWU$7xDsJNFf4omU0cG0d)e{9dHU3H7 zsd&M#d}U#ery||l4RCs-ZEd7gd+o6<90IxoYq})gR{-iB;x=^K<^C?X(euRTl&gH| zX3DhMTiCHcu+H$thb}Q5%TS3R&^i0GvdhirO-vCbri@>~@^#&o7L}98+6h3?j$|qS z5kd_*+#ILJCyYA^7sxzQi{Ki%4SI~$uxlUqK7bRwi+iS2raTSsoTqz>@p3VHs-zU+ zcQ+@;<9f91t2)$Lrx>g#u2Ug8xBTi|edsSJcsmAiDLP;`=a@)R*_ztjnNcGIZ@TDA zB|!OE2)r6Xrk`(E1}8^}LaA4b$uIvS$uY|(xW&;6qy{^K-G$(N%vj?$#}zeN=?M@@ z8Lg)1#ws}flrt7#2*WZ@Yw*a;W5xTbAVR$EG|^eLEx z`(rGHVxBp`$_E~Gg)FiUuX>bMUamQah2&0HQf9~iCzNB!*9`h{cYsOD z(J>Ks^-wx;Z;3G`Xvg8i@Wj6Qc-b?9CjvH&+I;QAK@wv84Zuw3m12YLeEb_^uGc(8qz-7SK>H=U>|dp~Ouqp~nZ<9adikB8xQIas~v@R>k5*kTY;7 zK(Oqo`ES~DAdhN68G;cWc#zsmGij^Dz929YVFWdQGI~wF97JYqe0dSU;0G2go85z5 z3wwXog_isoF6DT{t2gluBZ%1~NH%(p-SZqyJ=R@ZK7%!A^h6hJa7iu1K#dcr9h8bc%c65kFHbDN%?edq(( z1sUog7d>Lf3i?BpTUms6!w#%PEklCOfOQv8m&S&CNhK}R7pT0< zFDT+K(1tKT^X0K6k5kV@QF_xYC-h+GT*~|cOAb?ahtF(VGno3-HD%16bdid1X7Q3N zDr$?x(x6bN1_y%N6=!^j76=T*Pb;`LPSDdan=Pv?XXkSzpk<`cFA*P-^MM9<^%sUn?C8c<@emX>?Sw4 z-C89cXLqeN#-R>-HPEuHpMN+^`h9fff4T<|>g(8kuxsuA@Eop)lT?4#j9YXY%x$`L z@}^I_KW-xZf$1^$EB?3O{$H5$KNQ?q|BW!`|GD?S0&}wd4=std?*A9uACh$Y)IP4p zPYe@n8mB>WQLZq?&_wYqB3suIB|=MTJp4cNyd^zzS|#V)%+&$Sg5=85ju>aVU$&g# zGbLMf^yO%>J>+5Cs{aD)Hf42IkP9}$)TF^W{_wIVxpzj9wUg7-t?&iPFto->Q@;_y7 z_*~;Rp+BTPu-yM@h3`t#)0wS1y_>i;{H*o!Xv@<7to5&<9E|pcC}9y!Gp1}@hE{c9 zMM}?)C!|*)h;Kq^st!!%R>cjp3a;fslp>Ydb|bA&C~BMEUP9a`MMzx*Rm2aBX_>-* zzbCJCmBkAH_!~Lqx4(M>e(86wesiZZp-h;<91s4cw5t79E$QiqAI=>ydLkJ%$}_sV zFNnEiL*_3C;o4LSU8CC9Ugfw#EH)6WED?6$0-@SFfv>WAjE0V=*tcL)%XUDUG;Ex* z@bDXbgsgut1sL`K zBTS#MY*#OGK#RAJU%y4vECtCF6X|If&fDvYq7w}?1xi0fgYm-6QPQAV`GX?flTud! zkuHRX*`su7>NT+jz>>h$)>ZGajX-%5kscmDMsz$zavXu2h9;Yj&*(q#3372b(hQof zcw~LiU|{W&KsFS#-jb@A2MrQCdI5whGlJd1DM2#P$_0lX>p2yFoE#x`xFl#*mm%aC zt0Ew{MX~(25_ODJ^$7b1U0{vDSc2IHfsB%H1ra2( z*P66VKT8J@`lz+8_NQ}-A>gt^xpLP!Tr4?)ZEePZoKQnz)wX&CMW&@9&3fy7BdzW5 zr!0epUP+2%y+bv1q$q=ISdJToyMdU1qJ`W>E-J;YKpLrg$#IafFGCd+#sooq#{8g# zsl?!u_~Qd=eBWM$(MM#3l0WIaI+L(O;4SDDyIUO z7)}ce&8BuN6}p10Z|u`tWEOPQ3(Kyn%56ZP3l=|BbRw}tN?O<4C^!K7iSIEudyQ+e zC>Ef8%|9>_ddU+ovZZDkEOo zQD-2WpJVso($yI{(jZ}tQmLO2A)o(4FWiaE-~XEm zO@$zL;(_-VjXxitR`BWo)a;pt4Na1JV)fo_%lFkkLV4_#@0Q`jc1IY zF9s+=53Trtwf0^)5?4$h(7e)e3XKu%{OoO_MBEWkr3=NMW;YT}^M3Dy5W^}QQEUnZ zOdHfM@_4jI#XyxuZ`B-y``Dxpu^)Xr_$t~F4?KRX5^tU>od3mg^+HbKiQDi=Cit8}OZ*YEADq;+Fx-W2 zt4Kp7TctXQAK0rrQ-Pb&d$m@%GA}VOKIkkv)I>*UJ5bm}orS=Q zGD@IH%u~n>Un;vy`IJ1x6tGBL9dc6)n2j1)7-KzK zouL97FUBr@#()jT#q4_)P6OtRSsBXT6D*dIy2xy-$IrncT$byrnwly;8|3=BZ{s7w73zdeXFozCH+R zw3W}k4UF~mnrFe7VEW@Tt7S~LSkZf=K68#Ek@JZ(xG@clnF>*m{z_3P;wcVNXvlFx zm3-_G&1`mN%>1|+&N(2OjIT#s#s=SK-nl!acnY&zi`eN`&Bg&-%aSKe2e~~_ZrHuDs*_aUGKA6)FP*TPWk6b8~8^RxK z4FTX6!VW8MQ1jy$&R#KTNu*NiUUaw*S!i}e(L3VQ81cF}>*aF=bsxjL5w%hPm@w9=**T)4s zw;W!p?^SQ>aNOkoMhq-#wWsR-ff!_WYlolny|;f$(^A((qWI=h@Xk7X74k`t{xmb` zOb-|_WJpi#xs!d%AMo)lgxmfT)z9)@lJ`HQ`u~k2FU!A5^0G3p{lEU5-?ke=2wzuv z42x*ZJ#k&GqbH#~)$^hPpv;Ya%n)}5u^U`Au^T2X60^_O?-N%y#LYee@#RGT<9}&x zlU*~@%uKW0U09~sQXIWz`5oU-eZM7sx|zNu(~s|89{p{btznnjY%d#AQ($TrP;*q2xwvvpkSnKaS5(nLJ}XtV%X(5qFN>(#>Lh#_E$7F)b4t_zlk z%r50A;;@u2*bnYFt0}iloMK&;Tn85A8YXzr^L8#0%&?$T*GQEwWEE%KqpGhy>M;Mb z?4X;~NBNp7|Axvkso_+-N$oOX0|H)n$ScUo?!r0(3U+n~wA88s0>4e7G0TL>bLbkc zLqDIJ9eo@DFp52RTF5k~_x$9RKap)blA>U$>&=*2=~vSjDpM(ilLZ=*>`0W^qF7G} zh)z<5*x@l( z*Gb;oLfb<}7~gp~0E--GJPhmokcz@(6Rkilm>g#i-JoyP)+K@?X(Nvh%`n|{4sQ^M zgIL>6)7zaS*(4@t{=KSG4UPvHr-r?Qio86BjDsmBTeAy6J3Q|?sQt&D z;||8AeA%36WD8IlSU9SIr!-KsM&SOTWJL=ubG&M~>MlYiTjVA23?zjGF5204>y&X^ zS1hV5gi{62e*FNat`*T5;7y&ShOs2BILybk3GfAuQwFwWwCjRH;^n=O{P8n=-_a!Tt5j8HDJ6^)Q;o# zrt{92sNjX{bwEa|g52xYYbZ;oC2xCxfWNUQ8^+5>`X^<{KicW0a`hU|lko>c%A0 z{kXi8~`@i|s zf}9r{eysi53wH5#M5IT>`?LWZa9+B%_$ek2+{tp=Sh&^JF7TgWqh2881BcWFMPiWzPl?q)2G#_A-jr*f z`|+s#JP=Q3JZgT1PJc;IBTJ1bloh9$Jls}f^TPr`b*-`;ok!}nmb~qm!zXeO-Ho82 z$#?-ZyHHW=Xc{`42Nhhoj$@c;QUWBDPGhfv%iq*6x_&Es9LHP|_AX2zI!@-`tkl=EjZ znWD&&PuJ-EpoDx@Gc&vc21OxqYJ16`l!3$SwLpUoessV?~K_N>gWqSqEZT;fjVmK$rQ#LSl^ z=DQt3&T+?ks!r8+vbf{b2r;UIS^Hs*e3_)7ved}3iVOQ#2oD_lm!tPr?_-^M?_3gf z4G)3Sdm$GXQ~>+yLA*+2h_^Oqyhlo||1|Chk>B&cwA}hHfLz)3fbWM$xo*sINR^2U zqK`l-sZqLYt{iG3YwvqYBxH3_372a_D^;rp6HNpc@2ZPsXoX5hke#vV-b=$q!bKzO zGqW3~u=W}!fU9w#MEYvtL5h@S`*Hmo70vv*aYqDgsdz0b(B-_~&s)OtcV*qflevkT zi;@It9*`Qso(rWD*m{=Uy!aY=mhz{LR3+3s6bo~mwQi4E$Qz`jb^`6a$ywn3po-9c z>77Z}aEl#_Ugj?Mvj~va@+3K*q&lcwr^CL?qv9Nl?ODAH>DA) z)wL{rHAIQ;@j0LBkwS=HEi6Zq+Le--+|!?<9hmQ30H+#Wip{1ow}J$E02l*lC%^2O zG3G(`YwS$ct!2eNl4XJ>j)(2+-jc0v@>`Ry!;gnL7D zf687`ddY*vQ(2$}t7EoGi`r9)m!~VcjYWu89fY0yw!<>UdDLiSI2sDqS+<*gZ(2uw znQBvIEpfHCOVF|tl5*RNK@A}RzndOMx;@%%NKn3O$$;zEoBL;;jpF4^2U>MtM-BM8 zeHE$JfjF3%^K^VQR1EG9xogF1zxSgO@oAVso_8q3Vx=YP6|3G3LoiY@|?#&Mc)Rw}UrTAR;F|#^8dt=o_dhkkg?Tui+b^o2V=v_a8 z$d;GQ>uaYs=`_|E8sR2cP+f1_A6gFxQLLf3aFLm`@VB%4Gm}fy=5q0g8~kUd)?CPL zV7;w9vKP>M33S|ba>_n2aG3AzX6(5W2T3z>n|p7c;6UnfRg9sXWOE@Malq)YIjm9z z(CG=sJ>fw$p7oJSZdN7do-Xrh_ZfLVZ*W0keC)o&nEfzIOyB9jUq@-`d^h3_LvAZi zUmu#n{6Ss)extp*(&n_6SCkZjrp-Fy4m(RP7>=AvIyolDMZzEM~;MQTEGqZr5$nDkOmRrOhQYme%v zHR{0S+5+KtixX+B~n#p}W4`yL}j@YgqBzhV5sMxnFO-4r^L+@Z3ADR|9L0DD|qE&nHP( z8djo4X(DeW8JtUKd$;XMyAzG&-@TyJv^HP*bQp1jb)K1i0}I)l|Pg zrH4k<{@EPyUsm})HAnm#S!I@gl~rb8`Jc8QN9<+K< z{pxoF-ipi7p^13>uy$-KPI#a=&TjuAU3n&7~&^X@m`#JbcHma^I^l@;HZ zDofX5xx1>VqWl!cl)4TB>O?1VY4GDZN1|FXgN#&lw_VV6d~jC~AZiN?Z|px4yymj? z3*R3@p84InkNOaCj$nyEhXXIa_B^GcRAG4C>aYw4iA%N*Zj>EX%PXTFwBibe-h!)X zv|Qkv_X|ratuyJ%F$=3owiRGd(b6`2lo*sN^%q70Vt0Og0Q?3FQsvTqs8MpOef&;X z+ohoKes=sH)?L|xwp?+CE#Y-3B>3x3= z&YwO=cH{A2pU+RkP|MfetPyCHAIZ-w`!~th5+#=b)i8^2J89l>YLr{n^g`1Y9liOZ zCD2DdC=wh}pIs@ToB^f@m5T3&?i1G&Np+s}SOYL1J9~prHzX*Af%>fPCfQ_D^_%g?bZxUWTP3t zIwK(qDef*UUgZ6iOq%Z&iwXJA(go0)CFlJbOOigpaSxa%Fnv0X2^>R3cMXJFA^oTF zafT`HNCC3Y+l5l!mTEmPQ#=aTSZ)eFBQLyZ7bSZ z!`Ok^!OFh9RO5+gD)l7uE#H^v_5{czF zBPi$yMkFDV2ePVJ8j41^i}!L~+Q$e2kJzU*AqN$;S%7%1?MQ?$2yJ_51ptML{z5n; zVim(1W%F@+E{keOIDAE=&~vI6kuZ^t|Lrf01y}xn`Oa*4a;0s4s$gu1NM_ZKVA9Q` zj$G<;wXtj(n*| zaCz)!pK+Q{%5|TL%GewOO+g03IRYzzc6xJo3?fbSkYYcu7;0E^XGZah2~TFuUrFn^ zwGif=3w8OlHnS*23BMpshE+>9_rVWJXnz2Nf8eYp1p_nHeilX0NpA z6c`!~J?k&9p>wbK9U9^kmmOCvVyGT#^D27P0*fx@~+SYBtk%Qf05u#G<$q@x8eYyR}9q_P=2CDm0}#SZu&3lN_*YLXm; zd)fEW5Z-iH6*hNInpX|w0VZx<;!zCTz=Y&C4^#>m7QxYvFG;{6b4DN|+Qg9Ju~YkF z3nZ!=IXbvIV3*J=l&CwVb8G49g=JVp6o>(19V0&)8-1L{gR<};Y)q?ibKM6g(n=UV zF93O2;6^>l!dxB}crD+JHnZhe(pDw4&{N4ohG-ZHcMf&g2UFESTI2HT$(8{ks%RSC z4<*7%7=Ki7Rgo}Zw^B;UoUwnWDwQgW4abG73AY9yz%e{f)OzbOV#n-^WOOuR3wR#* zLsL0$6+qNH@^rvhp)loQ0FnX;vk>v@?L}e!@T3_qYLFOCAjG>GBFu)mBOd7(gCPkJbWn@u&VLB*lkZ&b8=%01*P*XVTvpx#KR|6U5r<;sV7 z06S+yMT4oh*v@-kIldD81MADv)-!H;Bag#JBWH;rTZD49?tAzBO3*yzvSHLoUlZ+vCWtsJ2iMJezZG2kI@Gt*IH@J4dM*Ys9*arf%ikzj+dK zwxcd`WZeR^vz0gR&s5=s2Zp1$ZFRhoUr$I)pApC1z&faZGo=w?!19r#J>KYgl=0IL z>bQ}8konHu%Y!p7Uw^(-6W^Wwkl=;eS{hxY^y9&<)0iMIVAjZNFBPTaT<;}% zII;`5KI56rr~mUKF7}zH;6PWlTxuav8*aDb>%Wi=eEN3q)Pg;hSL@vm4$7iT1%ItbiW4-6vNmV<~&`4N8N!$mAh@SrRV zR(7)o`9)qzvES(d1&KV&FR^0?hoHN%}`=iUC|-Ox&SDpd%i0zJYtNWC{RLCi%P2zWwLI2tdT`;ed*ei$$l4MNT=$j~2q-pJCP-CGS3RnTZt=f8y{V+d3NN z65fck#C(Mv9Gye6Q?-jI&Iq|@{1yqxn2%j5;y#m>Kpph*i~Il!!u`IZ*d+~-xwbjI zECdS3qmV)KkSvhVXfbRYMyuxE95B3FOGI2Z=AbXzIoVpf^|0+U!6)*836ERe(!}s8 z=pWN+sKWvUYN`%M;APK44xR1#?~ZoB5Xp6Yq_Luh{6zWkd;A}jh8IH8V(Dx>*ZMJl z1vg$P^ltyK>2|mn)`(!3y5n>{J^m6-R>&Lg5tx`JX3N3nd}*3fcgjyW;Vh3Locv0x zdi0~9Q}nua|Ekt(hD@JZt)Dkp&`*vdvoBfvJD{Gu?O>aMC!wE5Z_x&*ZVRMLEv`=1 zF=hAwW)zhqGy3CK4l)%|*ZT7)N`L)(yx@I)p_p5MP^ zzr~EQ{Vls2N-jXo!H22A+2L#FuV&t-l1Z-$pM^K5J~T}PEfUB5T@*G*-Owvi=m2`8 zz-LLCD!a}Pk-4-0=PuKBEhAr`o|(UKGOJYumFTUTLE-k8CvQRl+YAF!#{Z8WP15sg z(iWj8L4;U5LmpvRv)6?RicbAL0;IhoK8raYP}0R*+u@J9x49kp$fvObMG=|vIyWVC zdTsyvTv1YsXCgN9B<*abH+;>k4YYOcZauPp>>I zL!0$`aH0s7$Ps^!f=B}R#>fgqM5K0<;D=Gnxn;E5d}m}%$&uH23vatvM6(G559a(5t=I z2P$`7R;o8yQ0}UBpBa*CqA~VH!p4?r(@i7vCb+n&ecFo)>a^l9#Dt^v+}tq?$~4<) z=!&HgaKEhA!&<+}d~o+6J~2uKapzU+@&D+ zP4u?Z5Ie#4v-z)yJcbY3K{WiwAsm_e!>$=D4v!4seJ2tkSYdTPq;SbrdI)@adQp0o z2$gT$Cv4gxvSBXT2TI?ThJg}G2%P&1!0?C-ZpMSq)}GiH5<)zNY0=-r^kYcFkB4VEXJ^9>rX7FMgGt4=72!NslPt84HaBC|*h;Gb=p8gjKk}QhW z{gwd-R@T%_0Ovoa9^3VDX~+t9n3x-R6O6^Ffuu0n_i~>B5jl<=2&83~m{)US!e&jj zc*y(nvU>*s(ed@6b3H%m{KU20(tQ#;!`3Yn%D5CeX8uQ(r4u7&U9)^#mo=X;fFX6d{u|Gb% zOdUy6=!I!pM*qq6v$C@S5my&J+O-2ftbsa_ZXvIC`Pl-62g9~5%}oJVqx|;HHP++4 z+)IgK(`99yPC*)Z;9)FE5^Yho}DQF5UgP zkXrktSLdd+t6I4=9{1PuqiE+1eAjSJtXJc9``R|#KN2;MW3!NApzy+DAziOwUxYne z>(gyhlcRPBlkb)9>Om$M3-j?4hCAxRfmr|VUI7D&Ag%x;fW zeJ^%?ZDTe6iC#a5ey1I1^~f{ganqYzkbe*RWF&Cg!n!z@Q0avk!@yzG@Wu4-Vl;rBHpbj5Y2?c*nXVOu!VgNrT5Q^#j?Mh@>Z3sPZqcw-U;;pP41vP0p#a}+G=iLhjl{I z=JZBhN<&;H!w8mq9!_`Y8MzetJETIi9)8^Vp@xD$hQJ6_23E_^uMk_IB8|#@mPI-V z;D?X-Fv$}ZV?sLMLKjg=6Hx5&=RSK*Ohy3!`2{6;9b60_8;CWlg3kiP&$S{$9Qqn4 zK!E2t+O=3=8b6itT3mj2kf+CpV4-Eq?EoeZ^V(Kkod%Kr;v+gw#WR#s00J9W(c+AX zi3{nZItWqDQVI&v8M5UT)?Si%60k=G_s^v+ghL);zS3V3`hecM!1sJ~zH3q&6C@FaFIcaK9n!lut-UxaKx1AM4y9=3 zEPGz2BkHOae7o!h!1P*11jaLpgl}GY4I~X)$7$kD1>O9t`w$!(~?}okd73g|MXLp@+*(6 zuH1?6;8PKzDUL%A&K&r})desVa@NP(RddMTMHkH&E`&Ey*#4bwCgmM^*V%$4w+>X0tpb3TiX%`#IeWn39)*?M8-;pOa$f4t&ZAzHsl`PjW+qKCMm<( zhSZ|!7f@}3c{61EMl9*|B7nVk*2)9I%H_78Ul43L&~wb60q@y0VHrS650hCoNh^9( zuK<9~A_;2fas5bag;h64p0mig-e(Qg$rAWb^stOi&q}n%e!lO|OXy0TvaWV2f(1QJ z$&6OPBjd3?2yf$Md}M%y*Nch5(0N-DHbXocVG1JXKYxY9nB}`+2=!}@&opvmNUZtH zAme9FU>FGxFa$aM*fQxd91krTx#FZyMAJCD*;V^sW=AiI2_`fite&9_cZ3PcMF0RY zP*;DY;6Q10)%A^*5t0in=_VeQp-N$yGO{hu9^yWosB4W zsrRZCMDY_AkqeC5EoBBNj7~-UX5vhg7|g7bRYuz+A1rZ7811h`t#Ba1^xEM(^D+#V zPuNz)y4xz#>S(O4GuiTGydVz%!xIlsbo-?*QqWtZ0agPN#|{teH7_PqITjser%6no ztM5LqCZ-wwd$w?A@|V?xJ8OvpZ{Fl}fbDPNB7czl1a=R?k%DN7<^5A4g0BNnBRY;JM0*n zG_0hu7K2Z|7>Tro>f~90qCoy!V`*T2EU&VF?gu@=;fjGH^s}M!_&5b7kUi8)BzMgS zUx`WeeSEa~3m8?hIAqNrU*w~%s+Ox}E!NMgsnqP58##e_i4{Yu<^mC0WWAF+~T zHCv!eUZML&y$c~xHh>hHJHJ|`f9N5GXLDu$5{dAv@oeQx@=ii|o94u8JGnYFaaOdL=L&ZS6oDXYqbO7#vJVC=Y(Kegsoqn9e+dgEr zUn`b^vs$Luc4J%{l`SX>$+(=(3%4gyErNU&GWG&l8+I|Txw;Rz=Wsg{mOCl$}0CDx_A`|C3_Tc+%^fFR_+gGVyYIDH6rRd!MW=K~yrJOem!;Q*+3 zD_6i`9J z!bnJqzzG9|$AXy_+W}vBwd5l%*m(_dPmd02)gvfcb+d=%1wd#lxKE7x_nYV*&+lyl zSNyFM3XYe6B%vuv&>Z_);tDfUjKiuU_&@r z{Hfv!KlHVmEElpmrc_tlO@R(&?x)N1sP$Oissu8om4ZI_4VE>8ND&8Lz0oUa1`)I` zuSEx~HKUM-Eha|pONYf~8Nv3*<~hg>C!hdl@%CD)MeqgSiMD`E!?0Q~@rZ7i*$!U2 zo&KV=reUe1x3S7hUDHuniqtLNPW5|JJTOF4eBid|N-+Sc?e7B@U&1u4lj{V)(niCg zNpz2i{@E(HIL1wxG|Yoj^YKU#qf(wKeNieSYJcG6C-~a7@B0 zGnE8inI6^6b0%3ZV15X?T(5UyT=pIrW#j8USRdUdfZMT5>|(Sbbxm>gaj}3$J4$_j z3S{`@Ok|`v?kF-`OppMkCPXU;e?}BK%7Y(*?pN{19ugWR)47i?A(8S}dQaQo7z0k( z){E*r#hQ`{O>Pt1-(J+Bzv39YM2l7B51|tG}CzcI(1RX*cV0`4gIHQ{Smr zwPvGsUvX*E+2Pf$Q1g9a_Kgs4ee{mwTR_q^>+)&rB`D{8V&>kc6uW3y+p^PV_Bze? z4GQ#I8|I%)B>%;3|3ecA>%S4Z{om*QSFl?qW~TqwfUje_!TOJo|CU=RSO2t8FAGx` zKIBQ(b_oF6*((35{1adr1)?ED4g!jbw|@lYOs>3AvX()c7=VW`VOvn^W_wPxraX8h z|2}@nk2!k4+_pVQ(Yr0keYM8z;=Rf7{RCFK$l>nJH}ln-G31ESOM2Kl8~xbFlgR0~ zy}XTnZMUW7{i46_Zrn7kS81AJ)f&qnoBr}{EWVyhz`MOhihXLW|J)AYd$szSnSP5e z>-t<^aglSw=MLhDc6P(X)uA(6-Ses+H_xat%^0Lzw>~M))%$XI$|})hm&+nHxYfa; zF>_j-kJPjNyx@yk`jrE~ zDJNAIBXy^!Nh#c3(*c4mMFBX@qw{>ARe_^}r8k?G+&3Bkz{3fFUzhsF>aw@oAaT|c zJ54^c2sA`2c6!o%Y)J(sM5%EhJLvf(FDjeo$BEhBEwQUdT=xOr@<&5)T&t%}l@0NL zK2H$J^FYez6s2{nK|f~d1PBdkn%a_rZL$|2Zn6Uow$7Z0;tM z<$#iuT06sIU@5D!9RD&c^t>fL>}vkW~lNn>Op3uJ(z^4fbm`mmPwH`B5{3tDlCt znkS^!_D}Zhuo1#++@&J-7(L2%n%JP%%7|Gz@~g2SAp&T0g|JTiocm<@2nEFktcpG{ zbg%H2{n?x3Db|v*87Y81ttMGoVj>mFwz7W?b3r>Z%}OOY4`TiAu?g!D=^3Q5Bm7FW zd@yLM68`Z3lte;V6mn~L(rGFK5x9z7pg6L2e>8V}x`SigO-XNtEZyd8B91R}V@RA) zITm_p0RH&^L*dQvt=me68QPkr9)Jw0E@2kK8mEYOIOG~;L82^pI}6}$nH9ZgKB)7c zaN|ODFvOFT)cAWuK^Sa$$%l1S4Txl5SDYZD?^5n9Y9b_PhhNOEC+)Z{ji?rlVB5i# z6WGL#>P6VjN&e%d`fXl+F%W|(P-jtlXvN`^Dx3deIMYO8blw55(K3vvRaT`eSmt7r zXAdkF3}3x*o7mmyO!UcKB1E?he;5XD>0f2Rpc0}-`qy@p+M=(M`<2VH6TsYF&rsIbyI3y6LK$&dN7be9da)%=zxfAimVDAjWt*4UML4myNQ%%lDbG!W!) zNPHJf-jYic2h39GJh;=1sQJPY98LG!Nm=uC0D9+5OUev9|9 zl*^YzucUPA^TXPzfdnuFfv$U~i_eoLJQqMkGAkau4c3FHvCh9Dzru1sBvT~&X_mcD z3JMsZhWMWmY&%-k~0iOrWm8>_rwQhKQI|slm@HRzlS$iG)?#k<4yI@uMDj z8+e4kz3dS6%TYkshnLE#H=H{T;eO)u>#ZtpblMd*ANe=F}}r=iYRhe#A`=H z`m#>NLEfxpj{^3E>~N}B$}iGIKD}6F8=| zUEV8V#|r;k#4;JSH;e!xSeVd=N@RB1%EP{02;4ECC-*2oR;4_zVQ^F)0;u}WKDVFY zA;Tb^8;X*imAlVyK~Czcx@?YroDR5=M`$rLkxpsuZ*@8uzK?rQBEOU?FhU&XG}rq; zZ_tBb__Lo!o|NxxHwKk4k;Y?DFm;Ee50$^qHbxk)Ex$Ju@Nlv>6gI?ER4s(IDkGW? zuB@U_+U9{pTh-dcki$JYrJUUIR3T3~|L|awcXaq(@NtNByh1dnErvx%@8-9+WyW(J z+KYz4Z_;4|iUw*M5xa#0f|VShH6vH842D?X0fJh5!0s}4<*tQCWsyXih}bK9RJ^6Jwr z88^bvKi}~=@!*{QVK-l=;VC%u@-gGVJAkMBf)1;sb^9l(nf1Te>VHZ#{~NJY)_)aS zWnyLdAFA1Ly#?j}sOEKy@L6z*)r1n`tfeiCYqbRnF0OZgaQtu<3332(ns4uEP=2i~ zoA}ku^1~_hG+|Z<#lBDW=M7-vWaD!TU8h0}@9=KExo5r|ni37h`x?EM-S%z+(bv7p z5ZzB_+518IE{c=Qqrr>)*h0Cjm)+gIi(|ASyl=*DcZ<%kc#~w)3YN=sw3@G0iBrw) z7t|kQbwRZ%KHvvgeHRGN*yZ z+G&$K$I%!h?dKu*n%Ah_?s~1Jk^Aca<`{Y_+ni=&70GD+N#z_3hfF}_QguL4DZOOV ztJ7K4Lj20LRU^`s!JaO#Z5%!}%9whn z^WS4Wr!fLXxVZ}_q7o%Fg8<4A!Z1tcKOBTThSf}2&Wz9d(UeqddBr7j;=6^;`)tG1 zA>x=53ccIqB4INMuFf$=i#`M-gJgwkQB0L=|t56;L5l+Ptz#Hq_myrpbD<%!;|`5~fqL@WTvgZ43a0fH;m0j`s1j#!PE}HZH#TK30A=FDLg}t*YFt z4T{dk>gWxkRHt>OmPAhg18eB~jHc-Q6A zZ~+|G6HQ-?XgD2ka^6uz!?Xj!0h(XYWbH(eL$yYBh!nt#@_ZQcI|9w+I{441++@_) z@jp~g@?_i&W>~H!S7Y+vnxp_0)Q{XcArPcN*B>Yvw}0wtRd1psqs^!#0$I^U4G8-s zu>GOrZgvh5!*8gnj0Bk80RW%4hdC+zf?(Ac#>ZgS?J?EOW1d4w03!XfCE8kNjf+R_ z=bu%=gS!~)2*lQB3Hke`hFbt+LOG83r;$MeCT`>w(P1rYJ-7UJ!|` zNsR$!<*EYSLE#3c$LR*lqlKbfUPm zLrt*wwki~uncQ^)zdu8O+`E_J264=#gsmbOFNtq5CF@i6dZPvgB20fwhSeE8tP0f_ zxJ?zf0T}ua1I2d~`kHygF?S=SoOo{Po$F9WV2itO*#Z+4@kDGp=YHidrpeCA6KxFH zMvni&uqccLo7Aos!RdioLy8S_9>Epp=MAk8Ac##0D6+wGD$(5Ja~yE=q>Au6HMv>h zDx`bSExpk5?#%1;#`mrfif3f9WF|WrP{NL`Es)o}ylvT>vh%d@VOud^L1LslS2B@` z;_d)91SyOYfqNK~?sdSYO-HGo(OKVmw1ru0TYUhiiJ(RA8Aqo1Hv>>A4>-uD&qB%5 zXzKkvIopyO{iuFPbS!&9VVnRei1ade#_*8k_l4V2N%tjI(CQUi>+H=L~OHV-lHkS zp(~jeJA|FM6n9aR5GErtp~%8|3Y3S(!WWwly;m)zZ=~$dy?+0YV7ISbbeH2YP!HK~n67JeuMfwW@8V!3))t3gnHIR>plKO0x z-FrGg85BX{S7;;qpx%`_My{jhn9W6FsGNm%d}-R3eGXsF#IED(J@nmd)Z__T4x7|_ zDzW7Mc(#*5-*q#gevLBf6s@LXj@60OO{tE*p4!P=`(B%UXa5pU7*F~Zb@VE*c4xu% z%#ZCnI+yYgiCn!H$T53`NB9P7c_RAr&$RS^(aryqmi{-Qo2>sTy2;A$Khe!tEH*^1 z=b9a@D*%n9Ve$4z?!nq?AmCn|c+e|9eE0lPv(uIYohV@n-Djo zLmp&h}_ zpO5d29^T*9cVBvCyf1yO$5;t^+o@gO{U1+DlMW2obmfD0qKlXHXy08m3l%pPTp!Q= zu}@-Z@9zRHCtRKHGfegcH_2`pFLswytj1pNgk|18+HsBiJgI3? zd^O4{kF}U#QqNcM+4e-pi%psPs5$mVT%d?m|Myj)lOhNC{^J;iE|X70F{myP7$mfA zC~diDPW;@tw48PH9K#wgJ+#%=>}eF2-{Ah?_7F2JFDcXRNWT7^+@z2M(v`{F!SnKvRW%^D;N_ingFAs9ynTu{h5jI3y7Zn4S0r(Pz}$DF-EtP zjhCG}UhBK3(%e4~)EqWPccKgqs*KlY8K~P#nkJC%z%U-!Ig;fp ze4BQQ;EBeyYCL}RrB|9P^0|j zzYqtku(dYa)n^BRNLymRJpT<~HZgiL4~`?(@W9#NY34(^z>ixV4uRjHc)T0PK+~bV zfl5yfOPtY?@7OZ@*U;OKdS-A$5Mq7H(pQj@AEt24584a17a(uY9;Br*R8@0u=691u zl~bou#r(}~Dg>Ji6n0o-r8qzn)tWbO_3_Ua*%P8bcR!fhNYSS#(f`HXJ2X}rKtAeR%RWe`$6ycjX|<5oxn>EjniVvQSASaXx^3L;{Om?7wMV7COo zf!R~+q);#cO;}PLIPPeA>B(dmv5_t(+nr<(R>=Fek5BNZclPauh4?G_JTn4VRb2 z6e0J=Ge!g`>N^%LdbV6!#J!OXN}I`o;vpL1qP=ZWc{h=~)5xbN@h#l&9e2EA@}@5R z2c6(C7v(L`Xtyc-ZJfQ&^}$SM!sq}(I*!e;xij%_WJo_{8Xy)ddh8yk!5 z-(RG#0nJ3}^K)QaeYV8VH+aRqg%^!Jk=qL@UzRPj1|B4UT#$N&qSjxod}xQrLCaks zVscH`+Vm3BiFP4|w-DV=7MSOXH5gwdtnZuht@>$)LbaSZ&7vl?Wr#Jn@0*l?72CxI zLQ>6Pa6tU+pAT(93r^>XCqE%1yr;}AlU#3?+&>UHIVD^uWW3_MsGnOrIcI(FHP&m0 zUyem(h$5+*6!nT#zHk+BYAIko9k}{O$*@D2kWS|^IV*RHr|Wa~>gBA(DIh_*n9kGw zuO&;7O?9kyfdM~CYh7S(m~uPjrkJ%t>PmY+aa+eMY|CH8uup}M>94DPTak`kXOqVK z9kEXU{%qM?6|YIB!xg2>vN#IRw&;{w!y#zI(3dQ`-1AQNT*W>+8*<@bbczIWn3B1) z9P706ZPo%d5KL0mjG4l9O8EFnU<=q>))*V>THTAu%XPSWtU~AxEbQOpE96!b1a5D} z(bnQ{GU(mzX7EiW_%K8M=9rHsgEDr}$@1xisbNEtszcmZlMwwu$r3|yKRjDVF4Qfe zaeX*AEp&545kK2Ij}9sYXM=^QQw>N|D$i0u7_EJ2M4KLf6t?a;ZFoNL0Izwnspmzb z`s`jBiGKc_C4R10O0pP!+u1KP<00(|ZXVvG7V&IDVBujURgs^7rZOM@=pQ6aQz-HW z-wUZ7n%{+G8U-sZofI+zjS>cdB#z@S zrP$nq0!j=?d$VR1kvv1!y#}S<+(%}_87rELdz_EHLANMf=W>HEy%gwcLJlkLFy@## zylaoN)k7?@FiaZLgcbV6y%Wdln1cQd+5ilT&?bWTT zH6wA0|E>WDO!l-O3Z+cFqkNc_b6|V_Fli3*DtQwtn9itWl(I&(#fv5$GjV7BjE!(0 z&ASLsD!=!2Kn=DCq$iigCyIdXrU9i}q0&ZjoHK%j$le^IgBYcI7Mbr%m0gLEG&!jq zX>@Otx%+WrenZ(k`GC$^u4Qw9qmBD_xnao`BuUgg?w9gz1nFf{qw}Im6@-?XEWwJ& zeA>eqjOeJqh-Y%<_JQY~_cF?Y7R;2MkZoe#K%2F}OJ1M-!LFm8ApYUd|CM4TN#C|XL`QHVq7-I_HWy?C|@p4PFX+KG{S_HNi* zB`YBEcD7=D|;oe|zp>Dv<2;atm%(@I%x(7dq)D)69(>gj#8@@}NMj@p4YoU7z z&#IvFezHL3E65A3EsS!!{t~`^*!l`1NV>V$jo4b@yJt|R)8l&stt*RL|9c5631G=p zo3L~!(ri(m9A=9;@b>foR^WY}dwpSWD(|h4{2z^^q3<%Dozm4?=H_|@nk8$7_W2Rn z%Lwz=&jWCZU;kN%_+RYve=0=$H)5Zx|5fahje-9EvyhL&8u<_Z3;OX8bYIbn57~Os zf%h1{J{fP{Pgp)!x2*M>i)neLrZz)gpGq%J544d~11`zOA36BpVzg=5nU|-hrvSs= z9^LH`SW|=EzOAdNwymAKRqDfEFE0s@eqT(r?7i+jX1pKsbJS{kcW#h(BVA}wdA%hb zS6ExRy6W%OAqR4P8Q&sF&$gVpwycZGRppH+xi5z{20tje&rrUr7t6n{Eq}3t^FE5( zuDVEZfAb>ZA>rj=T}Qm1o3d=t>Rs5j9(s1=UZt|FZA`B(9MS>CM< zW4}+b>me;N0SV5LMY>VDB~T3Vq}kI898`>s19pMf*exy{%DyuR$78ax%(Q51;L$Qa zjqrs0tQ#c?h@1*5?Q&w6J{CFS5Lgl_XIqs`M$k(_CmH7S6Rk$fr(@Q^(a_Ev@p|q? z#)=xeN(vfi%~$$!WrP6O)*^=pLL&vcg*OCUk@fCbzk%WAqZdHz3%&+PZ9@Fp5>tMt z5CdD?rwqH`w)X}XUSXw>-kLJ_(U#DW${)L9Cc{Qhqp+a_nLburohdfBn74@VV{j|a z#Bnx~v?j#UdN$5WZ(`UoCPcZMAj#`1+&=WKm^c$45OuW;EkLAHogt=2UshT?<^cct zO?fnSIcd0l_bB0d8uOv{>~fxM4Wt?={;?o>%-CF1l)ik{A6q9xjeu))Wa0Xl&1`Mn zv}U?9<{tPr?6-Z~bXFv$iU}G*kSe~h+oQu6x|6x!)O2-@QN_P<_pN4%C+zmS*0286 zQsLHmJfY&T_;H%4YF+B)NonRXkdE}*>0aA}=E98>?p=@&_pyX}9#(JxNWYP>e*}PG zr&XN@HBdJ+^iar0KQtkjqjbhnRZL(A_@M|L2ZO&8$=Cz>9@##D^yfu9+beMB$hP+m~>qXa4vT2vQ}g1C7f9DPT}lDTk2^O)NUM ztuGn-iv^@&G^YLww}E6u8aLr0W;nERhp@<9A%XMs5pcWO&}^r@=18-VC)E$Oy!*4T zNKhn0PsfMG`pj~kFkTZmk>}L9pU9zahjkuuPjf)%q1;6W+P{pa|2(2r@c3>sihQCS zJvx)pi?V}p59|i^=e?#RF&L9i>kk=Z1m!SCbjWj(k>C(ivXkUs7A4364z@g;cxruR zT3AIFNa%R%C_}CQ;eROYOnaJeNdb2L3l1--MaHk;*38sPMm8k#1>vge0m;D%md3ae z7!^c}RzK4GMF%1Za|(JxE6r99DE}=JCE+GnzJj}S&9$rZJWiPlsgp~{1%{J@AL!!= z;^C;bTvAx|o)=8L%*h8sfmqi6F&1bgkEVAIXIzJnEOD@SHK%4FRSqcBT~Y&8jS&g_ zeU)Fx@_RNvoiiF1XkW4q&Sngl&Sh?pWC!kBQo3u5Rjj<30cvb?Ev(C5VWmC0YrQzh zpxqPH%bS^&u*#MsEks7K!}A-2qi?63g2KRyx>3<9S&3Dwr^&?CNb^nx9Fzi$idN@w z8#cAVBP(e%W`hMz14qjgyrOM1V+b<^PX;BC=Ed=U<_W=5h*B?7U3&guRk;Hcz1DkG zxbBD!-Qlnf&T}yf3S=W6K6D`OvL@^)t>9vY1Mpc+$Trb!` z9;w6*)+1oGKeJ}@%C0#0`+LJhG^!psIss-*h{XK#M;GDN%b9&%euw3^s~ZoIxRBQj z`c%XsY~t7Biof4M-UxQyh4h%xNfG_p%*;pwby8U)G`Y$c&J94s1}6TbJ6*?+wMGIi?jV0yAa@(XvU7?%H}*&9!egMkm15BmbNcHF;Y zF>n|G{t<$9s3$=?(c}YW+b=ahNVzE^+aos3d8s6un?9F)Fogru4PQHh(E_T0Mg~uK0v(! zuN~I}SEG&;wH4dSmWHh~z70@P=uVwAawTbg%pdVGP>?Yb9fT=lhupTxlRrVj%>4Zi z|7cgOoCTJ@@f-w*$*i^-?LZ}EYJD{{<{w>1Y8b!)a(lf_sX%2Jc7cc)y_FgjRPCFw zm+;Kl$YH|yp|}q$Pb`A(6TRsiHET|O11V{cwx9-Q95U{orkuFU5GWDWurS!WNYV3c zCq#v{+n(9W^Bnp~37^|MV4?Q`ChLx>aKqqZ$4eA>1O-| z)J|b*M>Kezc;6RGJjIiiLoy4Obv1@Uxas=Tq3O< z(VJ>j;r@wH0gIa|4QvQUOUz)B-|$L|EQ*Y7Sn zZp>}K0B~~Jq~|I0j~=Pb+a=siT(g63sKxL3;~@kF<1b3(bfq4iR4F6Ia1W9b>O|2F z9qWr1qirM66X8yD4ml`}sJA&EV{KMBo4GF+Oe=WWnLjwbZ7)5GQ=__M85fhp3MT1) zt`5*6W(0R(!FsA99cG#wlJb*&Ay+_JD`0{kpt_W?W{=#Z%!>(r^rTR3L!vp+fk0|` zko4M^A05(hpY6XK4NcbN2giww9jiY(!c1e{j#GZ{$0w2YxS@m#D^(>0Au-}+aHCqD)hPdX>P43{@g6aC zZ}2)8lnw~MGMB}93~Fk$w20!*&PPY%K$wewkJ_Gkdn>)DkzD+;Q7)+7W zkNxe^PlTiXWUy>ydC?Jn5M(6+KE+I-=s#Q`b>i0H9Obwk9Y--NhX^mBb(|Lfx_cT65e^?z6)5D6*B{ONXF5&FStqNL=d#v;gJKH8QR6ysytMNR3Im zRzAm(o5H-H+mko7zq=prDI-rk?x&Pf%UK(yUN)Rf8?}eaYa5;~_a{rH`2eX z|5f^zp6UO-bZGv+6<2wB4sN=wzg8moh`k^@pcI{5nTARQvieH}0FbMN)TYFW1Qb;N zr<~S{Yzpmlr}o!M5QZ1=IN}x0cf}PQ$5`Y67#*g$;MVTb?~i+?P038-r0dtwFuc!@ zKUq`yF8AvV zZJFKV(9`qFWYNbG@Y9pX`$pD|k8Ri%s%_Bb{44f%I}zTLnFd3Tt~N?D^&!yEQ-vDU zS#3^EkD>=9hO$E8Dbdm*$C~msv{mtKQ3RVw%+0a%mS|PHMp&q(LG$Ey zL~YW)@mq!tU!5fTg-V%=uN$Tfp9%PzkBU_z--leDZfh>N-c;pCT%`ENt5}Ew%M;PoRhYb_^;DJ%v{G9jFpV@T*+}2q88^^ zX_vllGp2dsRk02zj4~A*$acZu65a^c*wtqAtt#|qCt5}c*9lLep}u>VqHlkswTd2WMaC7MTm zK3V~q&s_?}0U3?4r-2sE0uCrT_R!Of+oUhD)jZnU1Ao)@9L$m*Ar~;%D^R0Hr3PLg zs+TnGL~94)m+skFaKoZbQ1_RZ2{iI}3CS1)qf8V@-!RC3VH^(f*CE705Sp}1(9Xy~o zP)X!XXd%)d1@(%h?h)%$#CP-~w{5%qrm#vxN?6A_@F7Y7;=4;D*Vi(A+U+$|f!}W7 zOW5xC&2X|aOphf=Fi5R;qVau1VmKyOCXwl@6x)?`>o0*>5*Vt#I;~C&?@gegKKAcB zxPzx_nSYV(IW+4s3lAMNV~EyU*l=F6(*EV~8IVR&PlPk%eTYt&Go~NsP>i#9f2YLc z`x`qPr%z1hLO~NGZPSY!hsjY?gZ5X*46uA3drAv8Z4S_WEVSQ^iRAGsjxCl&&lm z#cG^?;Ira5hE*w-Ck0W$bMj0_!WG2}P9bnf;D+q`Ob%4%_#+Pw&inoKe0?Q}DBqI% zn>bAdjVpoW`p<9<-c)hCB^staC2qtBB2YcUhJFZg$)UEbksDnEvf>Y81BZvyq|yw< zOcBYa)7^j-{l8aSq}@<@$nbg!&TNYkwHo8pSu0T)sHBw?=)wuCuBZ*DmBQt4;w`Hk z5}Rb3>5i9`Y3bjE+!VuU0Fs=UMAKq6(-9pa}G1#|K}0ZjVb+>@}^5CZ;W_>g73;dvCEEWPHBo@&gc* z%nIfY%2WM$>mA-E6!xM_06;;44>DJWuVGr z;T>^f=qkQkJ9%NCZD1rfb{}%yR`iOZK}&=1K_|c#Imt@dsOQc)MRi?jf1{Z<;+NbO zV#PAE+-v2=O(u2ag&H@VZiqnQJ>e_ zE;(&vHU5^%@Yp?)EuM#{!#CVjCZ>AI`SP#eF1ZR`TJl0LY>-0s zq;QtmlJ9L4yLQ22^2tS#lOjjuNa^yJ(Y(+yljqO_4y0%N^4?99XRtKGZ0R48V*s0{kmT^q1U7C!snvox)!0 z?I&Cy%cPDvv|?VC6q$QXADq=U^t6Bt;V{l5^0{zjc5w?anIt#i`&(Yh0B)tlYu#ce zzx#GL@sC{K?#?Y@l*1+|YM@lhEIE|QQYn_vxE`wveAbCzSMtMp=^^zv7p3jMa`5^I z@wLb6_YvoeNeX0YyfQ*?Ucl$7y9nr_5FY!sHW$c(X;wgVS)F>#?A zCdoCf<;dGf`>BL?#=7plm!ZOC)^)vP*leQbtx=Dx8zj?=!R_2v_I^xv!pE#}mL!%| zVeC)AtV(wpU5y5ADh{rnF*DcPhe3bvGTz@DuS6XbyqDpRd^(J;ork6^dmg^q&(5f@ znh5J$x?4jD8k8YwE!3!&`<g>HBfs|z_ls)LoAv11u75L?=3eM~ds5^1I3!4uI`FV2>Erum z{5g+TvH3R4R)%%=)!XoVLU;GKjkYxlXxX%BO{Wat@p!yiYk8gId%^tbKC1dyUHojE zxcV^iU7mTRk@C6gH50744!I`zH_!sw3$ODHTxJa|J~|fBvQ`0I9Xf!vi#8R#Zxi!% zula>CJ+ez(<(NKp3)7Hh%2rC2F)*Z=w#$}k>A?BFzIC>Gvthm;O%v}$Ag^D|98$pS z80%>pqu98%;=BIx1@kiQ)|%_u^C;#lS-!jR7iNVGg%nYvk;K>Tmg%qvOBqEm&)4bB zxeW9hVH52ab22{;y?28CbiG6UYA1TQ7}-Y8P9waOv3T)O5534^5S zTVnfGJ8MhG$umq3ZdaBqOejB(L~-gJ_q_Gk-dB2{OO?l}ir2a%dig&6wV`NJIlhn2 zl+~>~ls%w21}y!`&7T;k!N?J_BPd9Af`aQHT(2->f(5s3^ZH0g zNli^wGUNjx9Qjb(CaSv-3oZIa4(a2V@1G+KGIGiYYG5k=S&q+&K088-z(B~XA6)b! zS9hq_JekSG%1RbGST=tSeWMh@JUkp+q?XY}F_dzGgWrgDwtWUlIUL1@%SXMon+Z^j(ByEG@2JbODZ7Dd=IRc z>GAIA=oCXbtWiUk$&9gzkz2MnK5CKqBh!M*l zSRE9RBq*Gg0)RqdvY!6a_YY!N=~o9!0U9i}D24@UPB&BaP9mNkGb>2kLxkkt`;r9^ zxlH6qpe*jJ+;zVoivmn$nVV9?J*3oX55?=!X+9?wMR>ywY!`+f_fjC7LTPtPO-1|G zw(j5q0j95tfM$E5o+wrlG@eXZ-ARSeUIqt|Lqw`~RiK2*7GvAW3RK}RUVO<9V-FDV zDkRijARNPI^O_N;c&KX+Kff3~_NxU{prLO(;BK+|;_pHm%fal2@ghR_g@{ki>OLQS zE0mqM2HcaYLJ|NPpoA`;dfu?jY1J);zhbrA`+iFn@9qgJo{VXOLS;|Wt z2m^iI8xY7GX$;@<%(-S04`_T+@XMujqYZ?Sd(ZMGw@xf2EZ`Fi87wmx@X5+apZa8^ zm$AFQ2~mKVmp%y}Fe@^Q@5&U2!626gwBFugD zEV;72iC{Ne%*(SzS2K&*Jyp*tTaO~wGUCdV5dXLfa+#tmEQPO+ z)<~z~a~W%!V4xq#YpCsp*Qy0w8q4&1`J^l>F2W#zZ}yBk zr2vA0HT#>PvX`hrupX#XnjHYA7lGBO3yT^T*PNF^(>SjMdLq!44O!EgFhTi`|5x*| z6d*P6c$9Ugph1M_6}xgBai(5va9=Y=1nDm#pEFHlcXI=OOihGH50UG0*k4gMS?qrB zy&neCMrG1ThOrN|fVU5a#Ip$QB#gF}(9UKjax$tLAvHoV0dRylQY~~g%7>qUXZaOA zPdUf*cc@vi-q82;#LISRom5F@v|BOv}f7yoC(HK12=iU_Ejm(WZ^-6PQcF@aQnpHN?nz1X?+L$0yT|Dtj_-tCXL_KzkNX@h72Bc zn6p0nL(0ICEaSY~e*!tFuFOiND(zt~;U4?AZy%d{#9aip^Ovz%?wwoN{nmlmlLf9}p zM{^*E^CkmL9^+UvpC6DIA-6f~3 z!=3i^@3l0B$%!c{HXjAgH?1e&h9yE5u0FuPWf>;Eg=g**ie@*3FC@){`xVWHx=ThY zCx$cEzd!6++KbPT_ki6~n2|KIXVDKXN4VmU96%F@%(Y$^X`y2<50th+GbE%H8J>Io zd<}SzwC?ng8d%|uj_j=`Eodkzf@7VB_~nDh6XU^7nM{({sKDX_i8wwWa|t$#ht%*V z&9K_i+SFn^%t$6O%%<4O|1JILZ~aqih$Ousph-!P)-qAasHVoB;4<0LzlbG>9Mgw; zP*OWm+jk#&YJu#<`Jk;2L}FvZfs=&%cn_gGn-O6!mb1u>))8}Oqea5`*_JTO%ykcM zI=rYIxyO1Ub((JF**$y$q2Ruc@)zdeMQk~FrTK9)?9ambg5$2yrcCkv8?Uo)(WZ;o z^BwvaUi4iGS~bv=#9y;*nPhbXl;nsaMv-0T%|+rXnQ!`^B4QpAy_7AeFmpu@Vuk>| zt{r%rmxBu=z;oo$36EyRN%C5H<32&tTqNeMm)#hQucy+@jluM?ZfqmZUyl?F-^8hU zZ%7Cpy2Ow-YM(E3exX%FLRjwTDAN7t1D% zX3I%S0{5|Cgw>!(#gn4-Nk9oDRR@Jq?zxyF?z{D17mg-m(Z&JW!qg3_bx zZk|Nn@0om)4SBQf&OrZme{j{7>vi{{)_t}jL><__cOu%=>P_-}ChR7$^>XE;f4vUw zev8}Jl)5fVTUV>u)^f;K(dvA=b))JwqWpGd$Z#*>VjrJ^u7P%*PZd_)G}kH5n0~yj zeQa}p2gg`C5pvu^X49X##Gh(; z4`0LH84O#*lUwLEIeFnid%{Fg1{(tBDUF4Wx?szce^@?mDj6%oSC{^2{J|pOyyC1= z;fB#JU-Pn~`omcwX%qWY>R9}T{ja!rH4Ys=ArQX5Y$qR1O>oum-rkzd$-Wv9JLfiJ&W%|=8deCd zjK5D`N@gbz0Q3yp>(9uIYx4;&bOxIRBiJWT_0&Qv7RZo9C&Ab~CXXM6AEzA|WeiXp zBb?5aI8`9fGaEgEzQyZft7&djC2@)q>lKMO7UYNMw$m;fPc9ZrB{BR1z3j0_z{PPH z?{n317DUe}Y~tWwi{p1(qsVJZiv$<)jq`*25EX@`@pqp}Xa`4EMk~u zffZf}6Ge-8ZetyOaB1R;Tvd`pWaoqea_pV%Ek56<7q_oy6LW_L*!Hn@$`6twAW?mzb|G?@5NudOxAbsRtgb6^jhqtW}SZ2D(x!2Tu153Ba9WYAUhGJxB zjNjd+PdrIRB=cOn{CxmP63AJJ4>wM=Q2qq_3sO2V3=BiZ)EO-w6eeOdZaZQ;4mV~> z1TMCkv;(z@OFSb#N{d)bKfp*C#bWeA+MA-h91^ps^~&@22MF(pciirRTj6c334M8V zQRbDxSA>nEVam-w!$f~V2=0)`l~o9a8k0c4Pu7YoafFv5C@~}Af5ZvqWHeSh;NuUe zC&>Zv$V5FoA(DgN1`{@4d{z!xh?q3vQDNlaoiw5&zfl)Ld7o>&;AH4ONO;0K{_?zf z%#s_SN4H|0bz@vBHp8QeSo9R3|~XJ%S83mAnv@{PEBw+NsV zNTIX2CjW<=fS)ZYM*^A#SUY+`DiX07e_Y6QGn@Q=4;eQc@jQq8%_ew^Z}h>lF2nNT z@6#an<)Y67MZS37)2hgUH|XNqS4K$DrI2H$gPPfG)AD|;O4G&J1bVGJaJlItQ42YL zf&$QAKcYKT+0T`l5%9r}drqg2j&+yOC>WPCa9dX&6$(;KWW(M=m``Kwg_Pj_hz~GN zZzxX4G2(9w9yHkZP*5lbR)?dv(0GAP#Ykcd!w*01{zPAQH{|4aBDhkFc50f1G@i-7 zbzH``b!5u6>jCef>BAu$dLAra;0wU7d zn39wR3t|3fkIGj;czC`|{A(Bo0Y_e39s5Ui&?ReW2<0g zI0A!KC7hRNU-IXQhU4!M$}v&KeoJB<>I%+m-lu*vngO26o!ZA)H#oi0^nC6P`0BR0 zQO-7)F5@D-9#5Ava(%-B@q1GXIM~(Ta2eWW&9Swb6)RwZ7$kK@1BA&&1pWq8=J^+Oji+u_H?PZa;6lT7pH+o&|tGv9z^8I z8(^FQq`89wP&MEfHG22Qeo!*HR{{p=Cv`U{e=(veGs6f;PBtmH*-ArBMM_(wG|yHS zZ*~*1N?ej0OvOu^Uyb*M2cgmXQa38Jt>zA%(A_RGU8tBD_y6Q8ASe_>f zmamk#j=#Q!#+}-b%P;XKL%;;qYMIbHrZ7!Y66p%XrOr^EHUMUp)+npW?c&4XDPM)r zeX7`xB_HEb@RmAeY$wpjb+(U;E(u+vLeHGXH9o+w+e}>7Re^rOAq_x6h`;hd;;{~= zq3(5HG$k+DmMJGGGz%Fqp2m44;1$j7g2bZQa4XKpa{RN@jVG<+Aa!@PGcoqu9x=5d z7l*$QDoSjL!!r^p0PIA{MWR^yll1_E{;cl@NT=;*oOFNjM7z4z zZJK;fpl>mX_7A7|G?yxC>?OOWvLQ4#cMx^sE1L|Ky0hjf zo@r2DY8822h;UB_)dzSa^(h<(GQFv=r;IBbapYo^Udhv8e^5-Dnbe; zVR8h~cDOEXUdVLOw7}*`>m=nJo&^?|4chjFb(koy*|{%)!s8Es%0-i|v(3L=t)+Q) z8bjF=dr!q7A+=N;Ec&m)%o32XF23pe2G)EetCLH`wtDM?3#0O9NbWYZ8sT?UVQ#Bp zdHOPz(IVEg6wkS!Ck%{zR*?}4I@&=P>yWFl57`9wvA8Q8Gi{11j^dH%@U=yf=JD*Y zod0S4NNJn-vN4D6=QP|FZPtg44<#OE;mBNJ6ahd zir^L!xLd>NFuX2%j&i+z$TS_iAnP@kQTPP?y*eJryRIp=U`?ru^M2m3V>fboJk8AY z;VA-kZ~5r}&d!=n%KV5oymsE!Kx zi}S*cKg1m3sdif5r{x{LV)X`H`Jp7e#eOCnfANVp<`Q;9C%i9(MfWNibh*_Q_ne(3 zww{V6HPk%zuC-utHIKNOr`Vi<5^mX2u#+_utF9?}RSBW*{Y$L2I&rb7zS~O@|8y06 z&huyJ3D@8M6aBH2uw0ocLKq}9JyxTtivUIXBasfo#nnc+Poa%ziJhzTAs~KS(`LW< z_oI1NziI|;bqkF%t2?*qjFKa@q9eIoa!aP*#p90>`&O3L`2*uyZ7$( zX?zi^VzVghnwVO44lJIG^9*C7F$1*IwC|Ve=CO`yW-nBzEzTYjr$|oplnF|x-?`tr zCzWz!m2x&IrmdMXyklA*!$R1eM_L6=FNZS(=W(Y>T?;-EmvDsC*qsSYX|oZXbz(Zy z5-6o~VikrCt^w+U`|7+`fFF2LhWb+>l~|-k#y`+4YN(D92#=R56P~Y{>zW67%a?-3 zuPc?}B^s{{+~U@_8E^l(BQV3*I~<99*J8D1FdwR6ikXm5_&%8CgGaq##A@6vWlC>9C4 zH_wZ+-I)1e+(X8s5s2f%CCGHts z)sm32?oeDd535`#14Hj5BmqnH9{czQlusW8EmUdwUCL7amP9lFX_z}_n5(&)&`YV) z7SU7S!hSgt;&AT)Sfj1xpweyw!Z^06@iMFrK+yW-g0Owq@6u=4AR5nFbD^@WVEQOm za1R|D7&S*Sj3;ek_n4ePh=6@;mlR?y3bH;d$z^_8EXZLAg17LJ_oO%C z`V}3G;=z$h0FI@9JaGM;y(Yyul?EYEhS78e1VZ}In+g!KNo+E7l(axh*&xCuM#mv9 zXJT&4KVo+l3PiMeRx99f*z3(Y_oUX3bu0ZOn;#9&;=+U!PP*k`pK<}&Ig z&Jh$L3Gv1HhiNfugZj!4@FRpB79MkzmBU~t#Odnzs&#(AhSg30V|~+KrTWr3m$7LA zQ@e>i1JfAoevg5CfwE;qK@+v+0kIu!5|O#`5?afpgN9oV6Qt+@(M7=aD%VWLm6W}q zCEPkYA>5x<#iH7Ab+Jk8fiV0I4-dt%^gaX+JQDLW)=Uc}OAwoe09BkMZt8>?{m_3b ziX?5ot0MU!@a+UteFz*vA6UF706N zY!_%b;V#mKKSSb=m2#dlcf|!1y2_lPpgN`_NAP&D#?Z8hbN3rHj>cwgHEcR| zZ(AvgbpCTy;lPK3iL>YW)TZFPEz0;BvkY)pypSV4Io@qTi79sDau=WQ>V`)M!bsY> zO?{uM^#V0uK#uh#s{>rc3gKX5h|Du|8wB}iO3pIdc>PGsDJC!a7=$))0dVauy+K63 zgpI{r{vdipED3#AmMS2!z9CPTmZ7z>%REV>g?4!NdaBQZ5fn|rfssuZZ-E(q=J#{c z(@&dhF$JdOinqap*%%t}TPwKmZ(G&$S(AW^$i?EaziTB2w0*ES%y=azx~Z4b+6 zoUNCad?4lBz_HBaD;g18f#9%Kj%7D+F?350J%tbrB5$%OY6ypY?u_C+`O<6*FiZD9 zL4(H(H};zKM0)(7S|*XL!nxv5mH&j%n(fE0Y_Hhpq&~amZ8cBO`msk@MU90Kwd(T*}aD80AkFU{5|1UXjg(q^; z1oeyW9kHw(PVKdcW`4J|zehA4_qhFV#lH;~c*L_UL@c~Na~ve_u{l+~4T63Tg;fJsK4$BGlxOr$zO`6gp6>jC`?*MqqYj<2Zr_$x_%PAmK$B zzYZnxFYDz~5hBm9CT?@eCvwAPM}2$n#@h&1f)hH}tOce%!T=P`WVRCANC2*^Bc zB*>){?LXjDK9CE-9tRAAU)6B+TDe1S2LIW$-`nNlYE_c+q23Yn4!5VcvF^K+MC-yl zVAq#;*h-k?f+2isBJGHzo1zZHd=35P>VA57e!RPB&$O-Uxw)R^8%KGk(9Kj79609Y z(5XcMPcAbzy)VB$IH2Rr(5O0!FfPqI+7t}Rx z^WFHQb(HmB-7>wD<&?rUll%3?sprV~kiEf~t9`R*7FQ43JI&MHHqEyVS5RxOQlms=>QrZZK z<-(xol<{1ultL?~F+FSya_cfrNpsv#$By8)w$x2|E zr6j+KWV%$bq}a5$d4^D)E*l_kK9T4xU*h&Vl$s6h@xBl$-Ee-57+(g_n}?ij~dQp^NFOz%F-Xnm_=++(P<`fR6(=9AZ8hGM15!N$4!t*qj7+G9i_*Uc% zCm#hN25<>6O#sk_4rIe>Pkdciq&St#JA-g2{P|VF2LFZJ+a=74xOB^KTx|nn$|N-; z{8=-sXs%NByM=a8l%(&*a@u0`&7?r5;Ij8=4Phb4P^ecN#%-?mAA200(h}I*ItTxJ zCbxNRnd<>=@2-2021LQ?;+xJ>y-UNQ)z(;i$mpGy-$gtKf&}TutMobJEj>=XGihE| zt)nDj9-QoEBk&@m-s!*a+{alg?38+xb=SI(;f7aR3Gy6Ct|@ck3gn77;MIZ~ktlZR zoodCudrU}?AyUw1+2!`aj24-Ud?;26fkuVea%AO+_#pTc^mPa_xs4?a_=ClCSg=U= zopDjYaAK3^=f=Bv*&}9`pQ<^Je?7l}&0 z#%E~^3g3#8lqvkU_vHsl06h26k{>76SJutwY%eQ;XL_iCQwf8GvF-JAD9U6NUdX?h zr%ggfPFQ5q(WcF9e;OU71M^T|5^_Ys_$N_Ms>+g!A}On^EzpgBv9U1B$@lZA5Sru( zyrPXDN3F7$(@}saHz}9!%EQ=9P-O4QyHP4a^bd>p@#{8%{wglP!^h7`o|Z287tTT7 z)fk|Pf(zJhDp^$*!AYYL^v>2PM3$t9prwO_!b`4;Na?I7A7F(=QJcPvQ!U9g&eA&cb z13F~E%{S`#|E$1F8tvRE05OZq-zSozxOt1+=31+VqzbF$%gT$JtQ#)P40g>7at>Dv z>CGiT{);T(?=hO$v30NSTzW-bA$c`Byz>RQXA}j+0%d~akDbe+9hLwS|M*#iL@ml@ z@ct-5+N(+$c$uok`c!&SQ?roAh&Y{qEl#iG@u0Sug&FkB01Zxra`r~Tyr#fG-hN;{%;n4mCc$e zx!ovAKEtO|N1mRGN>thEH^PCig<~tpFy1~@LviE5wt}aMdGW<4UGymXkvs(DvV*@I zI+#+SfWNlXM$N7cT)gnx;ICQZN96gqPV-$TKq%Wu1w8z*aqY#&#X&z zF5}`J2;Jv`rB5BN>#CA)@=$8er!FC>Kn>P_7rM4oVzzAMA3%6-A(<^BR3dD~XgFI< zL3kL*&}gOb$c>W1d!@?bEaDNZXit%@bwRV^C#I)2gV5^iDQ3btYPA$+5O?U97+BjG z)lL6-`^;>&+RCpxqphN7yo3^aVPcKitmKxumN@M;<~MQcv~w$E;!xo-py#rq*bc~n zPv<2TAT+D45xnP^q8-m=2i4H62DOY)_=4NTnoY>nzD{jdahs;YTs^bcrz0y6esFSu zs$!tW6`PfZ-XDGtY#@iF(B~djH++ia$Inh&cfv2{b$RJaGSi>ZncCvoaPV%9w+Tp^ zt7llD;!V|UwfOqrup@DUqT~#C@!<(_@7IJ^^8)xSB`XQ)IYLey4~a{^-4t18vsi(Y z{DugH>#2(@SDuoY*ndye!>3x`Q{EyxdYn--Wg1+Ncn!<-50s2zU%pH@Rm}JjI`@hY z$pHNky)E4+o0^;Nmjf2>Vf?7OjWl$jJ(+?Bt8hnb$QldH3+_Z&MfC(7YNiu3EQ+5! zMw5;>#A9cwveN~s){rSthBqHt_)6M2F?etcE2)K&^8|Sd&h@t^@O;9RR!vxe1$yQs zQn>^Y=h!NB1l+gagYD-x4yz`#8nvbFGdD#9Bg3g#VWhMr0}ufJTUqQo3o;Y>?6qvR z6n0YLseAB}q@@9^F^ek2~PdE9ezF>??L+*$kcE$lZHN*imi{C+l~+ z%h=LUrNY_&!`?e|i4rDCyH&Nzwry*dz00<}%eHOXwr$(CZQHJ|`b_RR=k}l{-J|{i znYmW39K;(LPsF30Q`c4nYH_mp<5{%V6W(7wmiCn&cdmz3y_z;yLFP=KHz(AsD(U_e z0uA>tnd}S7r{hn~KU3HL#VP+&>iXY^Q?mYxI3)x7|54ZKKVzya@SfY%=ob>|J?Afk ztJ(*-d@&6xc{FQ7d>X)>IV9?O)Ul9aYO~wUMxySWttggzd^8vM?Mse>zx#h1!!lzO zk3)Fn_(OO^f9v#)^WLh!#@`0~G_~BFJG%(mK03fecW3rFIIVPV_1!-%9`rW{L~Fmi zx#-?K`JM*j9c>DX3vpx>i?ylpE9-E7d1m(fwts~BdLPOET%Y}_-^Ba;o&Bht&A70P z$2pAZ0~Y}I_xjoKg{y%zHFEy+QZKQOF*6!%Ua3vBha)&yM{C>HJbj1_qSN$mu@tMH zIv3(2xCaH-hsp3wWrMOR*w`+CdE&(Ivd%Ze`Ss~j_s6AAH*&*wG5w@o${c(VUZ4`c zIYi)!1bmH3QQVsUecu~`#UfU!00qs6HirpT{;q3bLoJa_-ab)RqxvZj<_{ACp4qRg zjA9|!^s7*&?{)fgKOCP?4MZ@`2ONfiDzNV5M)qk+qMVU+$YT(1I)I8({|>={q>v@o zPv2=rTu`Q6T76)AKPcXbuE9HCv{I*e?1_k6h{uHqwV8qU2oR>wv%F(%ybO%aNj|tY zRGq)7Vxof)vsV{bvMIk8%cNkESo>Exj}cT~OscYbY2XxbLXm&l=pQTwEn_f7?JVd&JwxXE`8@qL(eF)5+ZHi4uh(Z?%U{7Y!=1s5a zz(xuveZ#Gf$4nw6mF-wbn16TdRC*6|q!Ne12oye7P*xB}*UY<`023U6xV1pY(zE11 z!eD_Vlax_a?^vt8@EtX*y`~b%Jc@RC=wX9tc${DQ-?RNk#0jUDQw|t=RxJ?fkQTFC z6Fox27lGG1g7W9f{`HRvK`(8LUgFboO87;_?tH2yC=@*dcSg1hPGN)eD5q0&?X=Sej_7qWPnP22l$%ZUv&|y2towPY{3K4 zw;Nc2k7*&kDLC4VQ~THarb!fQblGFKjd-bFTaAWhrLUy(~BbSr+|51C==qXe!#TC1LR{^1s`eCFI_ zsr9sI7O|c4vNvs?#>_Q9AxzlVYA2HC2@&5!Qps>3HV8|ZQP(GX`-tqQ9(O50WdA)) z9@2uQJr)*BfJSopCaA zNz?u+Cm%H8APjm>8X7P7B#lHae`$p*jK6Ow4O81D8w2dSzJ`;sykeF*ye{X20nHEp zcph{AV{+(0wfw4Pi77H7uBeZY*@NwffhJGVGCjV>>J6WhovcrgZx@AB{)P~qrb2dO zD8YjB3@Cke9^#Hzvkzt6B6z!>c(zIcR=#mK=Z(z;o9Go(R${AYi+Z3f>IT>{=zS#t zpD*eGvC$2{^o3q9nl=;&WmG2imQ;)A_u%}&A1bV&W;yo1_99D);e$2!5@DCz3ap8Q z?L)VrWK16;k)Y8-Ty73xb`}OBU{gQA6)PU6TFLZR8FS^vZY{k3DDsHwb_ZG!gk1xjbJw>i66|6C2s1!}OQaqen8 zWx_*~rMNENm3Vf2IE^z=cPb<_&Vuhnwz0z#7rC)}hqtmj7wPx}CyQM9d%d*wZUNpp zFr%$(GKJk~vP%+Aj*_jnVTbaPg(;8v*kC(*tHZ-KE0QkK>GTPfNKjR(@A4-~B+{Oy z3W6<{@N^H5P%VMBMAWak$P{9bLLG*EK>jwsp`R>8jcMjcu86tM4Q)tfA6|*fO(Z-N zu~gZj+3y2h8@)k(t7Rx=cw)?dJ;et#JEOF-tR^8*kIue>sEO6NKbUCE`2J_0M*^2} z*0@-66wur74azZ#9e%bxjSLJAxc;`+9rSHSGhdooFFB;Qb>=Ab7ZOa_>jlo*00ge4 zVH{dvnQ5Ufcl65_fRlqMRBnRm#EBt@1$v=P7HO2gK@TT0nz z6K4aWj2^FRog)25K?LpswVQ1uGgie4cT{O4EnxRG!8TLk%wAoX_g9GEvT+kvsebSB zLeM6U8vCmgb31bFy)a1|ZT-m~t#5-U66!8F-^qsSiNLmLtl$%?iM)OL&k5{pdJ+|X zO{ga3kopmk?ul@FEK~yA;KAX?Sw*`oNTmcGYGarAz(C92IqygAVa+`{8~uZ?L!1$9ivDZtlC?w(|KT4=x#0v96f{}eRu)bsZ8x6078aI=r)Ryn7nb z^`{fOTetnq-#uZUi)b2dPlp*t;a@LJImzqgtMA)!KP}*_{h_PtWJlNCDLPr|)pMte zQge%Gb!TU*-c1ml^eWps+hDYp&sR^)IA1%}uL9fW`b}>~0_GQ4Hh)^c-MuUNA8%$2 z7^IGy%caE69oV%dSx?P`)-$|b9^$9ZGXfG967B@u^Ut_Z`u0)_rQ3>-SiUdfyFW$O zt6w|2UKck%)oeeg4h<0Oe@0pp;}p@ry@vFXP=Z?@gBphuOaHBzav zcT~>NUxdIvsLqQX_*?3JlY#+r@=b4u)d=;!=4dv&*Tp`uGYIOKDPc)CH(mfVgAN1o z$o;lB{Dx&TM-N|2=%PA2A!tz_bjt`9RZUIxtju^&64EklAXb>^Ub_$+Q^8Q0W3Nrl zed5?XA-@b|R6rwNOLLB{>6}QFF8y68EJ%{{19XT94pJxOmlD%zt-O20t+Ja&hrsF) z_{2p;2^)rh#7&EqLN~{Yh4^0o#yLxcUAh>M9{wqT5T*V_IkyfUy5WGkReh15tuf2A zjBkmTy8Nb?+VnGo+{aS6eHBt-G8(cA$9!DjvOf%WDTR{f@KGhpf#uJ^ zqR>1cR6ib{@Ern@nVy_+UX}e8Rn^3i)$3RK0ERf?pc0K?)n8e%T+{d1Sn{3O)hLd! z#PS6H&dfQgzlkO0Os;^Q6_vnMfX8do*%@p?NXLJ)?f69S!VfKhg)+#*c8^U-oNcS` zPZ1=m1g`w$cF2PLEfnX^abAm1)a%o1r2wD_o6wY5@S8nXBY3fG$KnNT(ar!JcM52) z)HqA5v(KfON$>@f(i0c@b~u!NNnB((h2%TGNVDgRx-Qf(&Fzyt7-HWM%Prp~j8Qg4 zyc(>~-dwjRYocr1JVBooJ@MWOD)%L+jy4Wv_z6K?$w6N7YYf!gf)Pr)#JS3#@&P&p zX{F(`n{>~2-tzej!S(Zk#MR7ZX;s|0A~C^1s0-gddS+ZGz^;g`Lr<0o`~^)zoEfgs za4jei@w~~}>QkqIT4^AYt+Cyx-*}iHp^90GO)ROFrlRr%KiDz@s&_wqZ^skoP@;(3 zTFT(h#LUt{tAv#ts*^IU`ka9g#tR=Ltu*4YF)kI5h&|&pQ-wNX%8~(vjIILS~ ztQW!<9>$^Z4`i_4%^+WN&tNXLH}T$!8O9@SK-UncGg-D3DxGexmA$z^nT+v{q0QCfx-wct2^X z?#~_)8(*m!{zoDvSz|wiHL*%rS0u*$?ta#2{iZ_?d|71oePgB#P}n7GL&f%5RK56J zy_;A)J~lruCz=gkS1NMLNkt9}Z+w<<5noxy3Lt5N$t{%=$SydnHU&qXjV)-H!`Dfv z5YcHY3*2!2a%yNaCq^Wim3Z#s7XgH0&v7<4lvSJ@fW4cvxMsexGJ~p)<@4*gm-LQa z454r0^G;?iwHsf4dcY*UzKy@PUi;C48SgZCFGrp?QsmM+EHIH6byaSEcWbYW0l^0m zpxI@Q`-hNx0wDM4rO5pwf}K2pnq0e}M^pt-u8Mzceb?Ew{jH-`m%$9w?K8 zaab6n&SK@YeP|A`d%6Dp_;`FeY)-JCwdFP5*jKeg05LxB>lFs+uIlJ8=&g;HBFm42 z%Z|pB4B3ftorzfk(&NYNY@(EUX5yhmUS%ws95LTTlJ~eTM%V3x?^6$5->5!Mja*5K!D^QtNf67M362^l4 zu{^vWttl}ww4RxSZxOKNbW*9!Y4QP#66B<*390^8I-h;)wjDpe3xa3NUh0a~Ec^_k zXF!P)XHmL@rMCyWAw~0k^aXha3lbfNd!DRo~ zYV786?4qnQj72NAr#v^N`|?bjS2t;CelQYSn8_=RK=M`uwlv6qxQaS9i_kSETe@(1zrzw7y z8-HdWn>fZEnP42Bn9%_VZt@iD3d7D^oa*!L(iW3&k11s>Q>r(j>>8hN-F>7oS@{%5LY&twciC5ie zc_#M_IagLY)Ot`yy!R(Tf?s}?3a0dG%L$#TSpXdML(ynG^sh8_;! z|EoVgP96Jq+uAtM;sI?tJcjifX#tdd|I3eoxkFA1TGyY!!u0~VzcYH6dX*+W zeoUKxE~_FaR9&XM64oT|4wS(XXMKt?45PTLR+g9))wHzmfcP;iG|aRQH_VlnuS(`H zLQfy{#}WYK9s5y!O=H#tS7yhl%f}wH*en6DHs0Hfust}VKrfTjlsN|HSYLF1#A?E% z%3s+rBc1#~+U~Nd#l<@i8x%ot)q$fUQ?fYsrcph?7ul=GMmTzPkE_teRpX z=}cJ|$lMRNe&!;%A3&|2zjK%hfmCkG!LPcEpK_SeDFHWdx)3ai7gGpG1UH|+Dzc2x zZ8`?vm>}3ZYY!f_fo_MXYE`xtb#0Mj9^boo2bhemABGJJA~uvS0rxherstXEB;a= zL9Yb*tk=OLY=|x>%oS+ZgB&LlCTFK~i_nqpAY@c0k|pxzUF((r#ao|d24cGqVJ$({ za)U?lp?lK>KD`sk<{9`OxO02$P17MV#!*MS8F3t9x|$fkF@S|mQ19xIr0#@psAd zfOXn1mcEtVdasO%cWGq-pHo$$Cy#1{)emuNT3q@S1}jQ;(z3w`RsFdX_&x_(#E`xr zE^;f^^F|ZBN3ikE%4q-Kvh|)%i8>7*$EX?2%Y;&b7t)Z$&PS_=UfVK_;f+hs=z?rP z)d-;LFb}l%#caAgii8=&IpzIwAwH&+;a8IY1yP~BE8FXvoTP>e=HxQ%1Xl;=LzraP zA$Dk;h{OEA4P^+ykO_2G1Ruh_A8uz^=5DvteZXvRX7)kyp%__KCn%$o zAnALyBAyu56+$DQ#EgV%NW)(tU94B6W=t_MI|YikQBn(F3S54@V1DRTF0TgCc8k;k zLgCpQq&ZzF2f;r~lwgr^!C8H>$sBDwQdNP$n%@tl*e7Hyo&ohpuWsx{$ z&n}1fvsN0TF|rhJ?vj+yRf#~Z-R@Ni!jtx69tNjE)a`(>=37gClP~EX|2#8Gl2uCx zq^I3ddR??5@lkkKX|M!K59k*fWfiYXF$MYd$G#c(#LIB@N8#TOQ^MkT;j*0A785AL zRfh2I5O+z&wxcg-q9Y;qt!QMdIoY&K@bHygZepQ^Yrmh=u}cLaZd`!@t)4qg7@q;S zN(7#(ZlWD?n>F1}Dp@k=*-)`E0}X6d5{RR?PJ4=tt2gS0A18t7@Dw$pHHsgyCDOnK!Wjo?d@-q0u< z-RQQhAWtQY5saq2m3^D&UPEcxMM69`ZSC_Nn*of-Emsp1RU;9hWvudR?O%n*=o$WZqV@l)Fg{Pd0&3D5kGuSXiweQGNo>-#J_Cg$3~D5;K{qR?_t6u5$|E!x^_@A zl{{)zJE}s}La}@7{h`YRZWG*wx~|Sol@U)8vgTk2#G1&pbIts~?~1LAnNe0qOMDRl zq9X=xNfn5~WZ=Y(u71rzyWJj?&1(R0M-a;ZKnpOn^_(KpdDa9y#4t5}>Ft)HUhTbIR zyrh3R{YVeiFBGH0zmRv*XE7xzjdK~%FLgzghZ=?tC;qmLM+=hqG$x^*fug{jcPJs9 zcYXW(dP%t?X8Kk?1~-gzP5;EEBXh5O;CWMB%;kGKRK8ZOtd+ z2*aRwz3dIJvF}ZyeEY5ZQ1ctDV+qgut93NM1-v*tK3#pI}je?3>fM44r#T7Qe7@A5v+ zQ6ABtlp~~QjW-M!t@d>~NKctykFO!EDYVwA0a{`i(-YS|Qb(W5!>5K*ng$NA{}qsk zFnelU7f?Px!y|>jPxrgO?Br@C6xR z*~hvlkz;Mt6XYf97#k5|zx^~;_*w{m{zP9+p){HsOy2PipnXvJd>gT0GCiIxTWV+l{8-Ajc%oWJpHrMs_ndK9l9 zT1Mr>2#1zauKeZA$dUm#bYAD6@P1`!z}Z)h2^vCrjb#;r zN7D#>ekWxCj6gKDq}q69G@KV%C5qEW1*N_mmA(^(<~mWh^bQ7vi;^*o9!eh!>hFR$ zCE_JY7XLqo8YNf;^SgNfq9PlJB@eyG%zrt53y^+*Fbn_nbpA1x7_(`#k(z ziAgy<9BS8~XNV0fgOIKLpas|uD1?{J0nG};eB3O!Wf@tSF7jk`$O#N6>0I{R0_J?g z-&-f#cMDBP-)R}0w({0Bef0*~jIItApVp)zjYeZQT*}0T0`&{4OO%40tI(vpDHKd# zA${N_Ewcfui5WO9@?b?3Bh)Ga9761_91yxg*hs#z8;Af-mKX1C`qui!0x>71){c-! z12To%4r4=~^D#*(GTPj2UW{(AiFMfZ28Lm?2iRU@ESwUw5?inyVl?43f7gdaJiE>D zri=>c;pyplYN8MqQ)!}nuPdV71HozU_^`Os+OB}JqI9%H)lAeF8C>b&I4Q6+m8obf z&E~+b0h5Z>-6lrfdNAu&T$vM3Rs|(bXDvHOlkPkW<6!zmfrH=gR^;g!GM#fdWF5{v3>@F5abX$y`A8hU`zC%* zKNcto2GZ~=n=ZkA=q@x~9XpS9YN%8(veVvNQOY`uxjha>3%iqBwO%Y0OE_+qaxH;K zk(}ci%rOUbYuGYUc@#*2Fw3|va9g};=vH+Te@y6c2l~1A0q>mW^p5DTl?iZ)e4v$4 ze`ih<1vVyNKb9b8TgApq##9GWp$%a+d~3pp;Z_81!lR1Zuqsqy$^FzLKR(u0I|n{T{&zPXC%<9iA@EzU7i~b-CIrVOSv^w@5rRH^HBtH^{6` z3g6$w)b=|4{)$T(i<_jJF!B98mYm%Giu$r(T-zD|7Bh7$V(S=3blDBqPa!z;&$Qlu z>81aa*84ZoOKkr#z4ZULPXAF9@ME3kCpY|tmqG-lh|G=?u1q&gr*kaIl*CQy@l%Cb z33NvDd;RGNxZ+QkQ%zly19B$TXbOQ#bLX96f2QuxL~bYPGASVO47_H2=#PFW&pXt^ z=<+%WzW(x~f~D(fDN6R%o;Bmf>8?6GdmFs_v=)ordU?7UxGN@8zW%2F_B3mzL3ORA zXyT-7N2B|8?98Q`{OR{PkBxrHE&tqx<$as>SQvJHUtxaYd*OS5e{!%GINr@qf6PWlM+Lt%w_) z`N<4*`(0X+Oc9-)GFUR4L6c_Z3^F9*@UqN_kr+E zd?|&NWH$D9Ey=5(;f7t#HB_mWe zjAz>U#uG63(kJ=`xzIHGso5U>OMg~(j-gN3gy%3TxTm^Bl4?c5w4ejg2N|3^=`4xd zhR@k~$r`x)3e>!9Y+QWneorh^mkfz5I@ZbO*xfXgbT(iM2A`KCh3J^DFua=}qm|Of z+0<&Hi%X9HY&0NBI`1=nshu|a_np3oFEmoK<5w69Dyf|U)qQNXfs9Nu=QAh`?7j~F zO)kp|u{|kF!X2bVB6#V!SBoi>#E`~T+YZHd{mrl1AyUj$5G&WP!Q;`%TFYhA`=Kva zkS0oag6e_~d-s7|_LQVDSOyxIW+atxAy>^UE||Hiranwv?#xNQ%N63Juvy}hmXW^JOMoq>zcu>(3Be|dum z1_mj}1mAu15C@8|ygK@J4W;2|1g2-zHUKPWPS1VJU4iL}W)Ty$KIYfM+YdTZ-PM14 z+`?CB-A55$0Bb1s(&x(D{ne61%u&VLBFB~ZD3^pV_`##sAc6b6+p7uwOE-a z|4W9f0jgIA!!|a@8Et;^$4d6Gv-p&DmeH?OVyRGMqTmG$S8XxTereMR;x;W^u%zfe zjBy^z^&4}Cg5~Z;z#ZTq_m8|)_`lsbeH4$TVbdKcLx@QVdH9%X;73xhbBe^XvHvIw zZop{CB4o4kT=xYMlA9EX&GIWKia>9xgZ6G>V1)@y^CFH4tr0V*rT5Oof>|$3cI_J2 zXT^*3E=F;H&qC18O4XI2mVxBn&7Lo3>loW!?frJ1AHML9)hVhIHM64xY2vD-%@u&* zk_al6;%5wEIgeMPtCY&0MC)@)YA9*LOdSQ%g|h3xg-3j|{^K2aV#TBz38vv3kL~U? zsC*K8o|IUf^<9%}E$>}*B|b+%{tDjLy98b?WC|42!9Jqv1~5R@B3w+UI@>dR6Ff>b z0ld>AdSPN3OnEF8ylwM^Fsk55EVgmR>jBkDfv2pM!6q_|KIpc29amKJ{-a9fftji!#p7r9vu znT(Nn#!R5(M8#WXPF%{ygGz;QI27UNX>3v48@a);e7)l?a+ye;)K`x=+7;gsSN5de zWi}M*m5!9?kJ;5EReC+B%Pwcma9nWLHR&2(A(xv-+fpM=si}!Ojyv0@Pw`@oW{<^p z=%s+}Jn1qh!B*Dz=C7IkS*B+EWeoE1R}r-gNCG4QZ*>p03EGwrf!8pepKz`cf63I`iytFr^elBF>|z9dJMC`$e0Dk9IT z+V7ql;_-EuP)*U*EANR-_2evSUOku+z>>t=QHFsFIP zaOore_dTBQQn@0I*jpgN25i@;>Z+84rQkLdi_I;jVl%#Sh_e-$vd$=5c=iyzB%Kx- z|LYL;dF~+heYUXjDCc1|pkD13Y%4?p;5X}QPLPQ9H7RBPfna%)}g2CWUb(5iDX67753J>TDR#=Ae zOdaeE9j89Tk^$+EB^yOle6 z2oY?B5iEGxz$Kr^2E&wU9_PeC{lC>rb+eto5rVA%teEzm9)99kk{$zu8}eey0`$hu z+2tvF!B4Xt+$`U^#L?ECw>BmQugsM{qaNINHg?tm)PDO&=f#ZuTlZacSekUb629tt zt*R#3g4l7B&0A97kViB4Q*0k1=bTn|Aj1GuAVMu$8={`pCOo3tJ1h;#=E5Z_5wIPb zkhrPdz;T_;(qxwcC{iN5_CJ!*pDhzJ#-K!NHT$uy)8J09QqFVd*h+&K#tb%q%U7jw1#?UD%r+9}5>$tgSxh z#8J;jB`f1MxDB`|Shg?gvUN|fdW`4&XZ;47B};7n-Qr~nf5>nyL^fQxj^$2Uld_pS zM+-E_3Z0T9)c^wxU&It7DU|4s#TV?5uU<9*J^v{3dPXo`wRYgFOdc>1<_?8D?Ct7P zzPvr+&Fj$8hGn}BpXTX6o_@YB89nsC<6=Vp*BB#iQQ!O|l4<{c`4^_j-?1{_LId&Ewce zg_^FXaZ#nX%I)@XyrM!Tn;e0kS6zEn&wV1iE)xHv= z0(PHPaV829{Oy2otBTWEP651Mfr**n6{P~{{Ux{QHEI2QsTjMW*&P^AJk?nwep)hu zohBMm@KmJ$u9>)oByitHx6s`YWgA4UuYa-WVf7e_cPbsYH7}W30=nFsSoeS#!~Di9 zg%{CSAQanc@^CAfR7O_jgzMY(HG@BtbXL-3`vjlI(^LS8gtcMM_oPV+MDH>XBQy^P zUCDu#cV>BdQJ&SY)eHv^Sy(W{l5hK<7*D1l@0ZW;M@@jFk5g^{rb_;01no;{J)Yx< z=OL)J=U2107zw>?*u@{bkn_-9F=l5GhYT*xt&xtvl7PP3%w=*KVl9nvsBa zUVZSD&)B4p)vy}}6|^Ia z7ytl|mUn+B4HYE)wS%liUFgJ+1dUlq5RU4nlS^zX>+M{|~wmd{?8hhBFC}Ld+YVSvG7Yu(UIl~SgaoEH6IMhR|8<3d}g^fs_r)?iAmINBeIcmA-08_in@wduFsjHfnJv zYhg{yp2TZjMNN<8JTSf1x)czE6>{DwnN3~ArnALi>GB4UjE;LWwF&+K$Nny1+4sF@ z{@HzIaTEYAxX_AM-z@}TYGj=3$p|PtS)bkt-=TR!~ zn@uGUOms& zkX&p4HGyusz0O4VZ~$<(#Lan0v#WET+?z5J&xEg0fkbF-`=C72`+jcfw*#YQtG`%a z78d50ZiwnK1nY0lJ|6;SmAOVM$&auBS-IU+o-bEZ9tJXb)1|9qlp73jQlym^(&Uqi zp&`KFv>hbh0DO(-5)|Wy^@zLpd;bb@5)G1r!o}0EU4o z9Kz&ANvj|tNe#6V+Pp0lTnz2H!B2s26>NPiq;)d3a5N(8>ih9Avv>&gfUN`*g7R-k zg9bWi9;DzHzFIkWPia)cx0?`z9zovzq5|Bznt6%x(@v$$pj{G#)Rd4XY+aPToqK#O zwg7FkGO-ho&FXY=V?m4>xqw^ssZ%#kn(&xiOKIoNC|C3&%PC8h0-4Lq{QM;E=JP2W z80QgG$Yz91Af3Vw`y_CgH@Dqj8C+qRKTBvrxR~(AtKOcdqXmF>#h>~@uy?-xvpib* zwAOVdmA-Uw_Y_=!2R@gNI8p=`lwy^B+481Snh)!XAWFah%?u?5m}mEymCR)*g_bur z&_zh%PHv>vE=!Vu`%c_j1Q)<&g@vH-{EoFkI`8U8Tm4ecz}Rn6#E_l_`wGWB)s7{d z4^(ZSgx%B ziHngg;r3_N<>?AzEI7wfS+6CM?S>~R4G|_IYs9Lqz$KO}5ds792}8gN)iap*L~u2C zpV0bcPTjePIVOsC_fFA$EvpD_NIH(cpt?n6f9*3%PrhLUSjGfpBFr~luzAlc@(dN< zS8p!HM8UEpiebrNCS};;UfGJJa&oZ7!T0`rsq2XC4ZVTx}}`Yh&rN zXQh?$S*VF51lyJ|BXo9|J?guLF$-(|L?GdhL-gP z8=}W^HU81zl@EqtmnD(Rs)XGwVM}LYXAcePdrxc$#!y^IOhV$Sj`!juu6tdwi|y!J z4uF%c0kwFY>P1x*?by79BgbI!*`lIn^tJO@vd*neZqaH&H_z?v9Uhy$``u=v+ml<7 z(S85zxqN3EPpa2f(pfLm_BM>9H!uDBNB_t3%&A)>7o8sZ)XuY=%-J*o^9nlx} zjfoD&`uF9HfA^70=kl`Tq;|W=@^#%7s(2*h*vL@<(;8 zpGMp6uFJbm9lx^1XJzY2)xk_Tt#~XPi+ZItiiBa~pLDLF;&ob|OQCr%LxviamXf{_ zhfX?wtNdZreJ}ZPO7~}3Rd=z@_deRd{x?YI;Hrq|&Z+5@@cURAywYERtw3EZq=X2i ztEHD44@Lr2ZKWn#+?B>Pk#y(8r?VnkPs6avT&jpEXRa2ojzBpUSiJaF!C}h3dF!Yy zB_|88<3H99K#%sO`h0XEY{L|og&EkyMDR)DeV`?iG*LpE@G*E8solrH(yd10Cbz&?D0)w~&`oNo23g)*}r4IwtfBLx0U`xmR)i90I^0 z!kiQR7OwT&c!9S89>6kZT6X-p%d6y?;aQvV1+~o zj>h^%NbqW`#q}0@oF3DspKen{Jv~|s`GqC(pWQ$cUqAqS*beYD>ZdU#jTy6E3IqQ& z7iT==9@<@E3cr~@AtMw4D?g>b5|R^$m{|I00zfTw1vSNL$!$%GUW~PJkGheOtNBs% zg$GquovW!qE-XTGFyw{dscq5)0?m0o7(A|3$%vTqz(Etr<$a1y?cs(h6k17ZdarO1 z>gO~qaj$&RV699oL+gHKVdp6Z!)E>;G2!yuxbw%m`gNj!bsRD&9p_<|mT7D}lF2|h zjI)Y@c$UxW)`_E0Mvo%uXSuUvATOsRsbg^&MI^3D4}!y`u&qI;gu)8V1HJ9Ei({?LM^ZFPyr{u4lNB&=Bxo?6d+&`d;(Y9^j#oTWwVll z*`@?P_k!0JW*GSV9wS3AfhgO`*hYp};TLB_RS;Oiso`Z&gW!h5^8_BU%`F8&d)`3f z3+IFnAv&W`V6CIdx!n8*o=>Vv005FS@*$7xH7G;O9Wbe3Y_u94MJ8BfMUxQm2!X2E z@N@PEN%dLK6vc;cO&D_tAf+^lO+a`p z{cfAFn^z4O-2jDzSuvtx8X)tieFnM#A$77O;-umHI_L*gBjtz0JoCCDOiuQ~8i;LC z&K2dit~o8StVC_)FXDZe8x`v#SIL;ZrpYZFK z+B@zIo@E0pGKr{)8%$;)8rz4*ZC(%U4kidP_=P|qNnQD-JxW5@kom4)Ab5p{j< zs*fEgcMCt_cnt0z7Qk*Q9FcMgz1ajn%a6YmpX41D9yN=@+?{KGt2r7K&qZj66}4O{ zquv$^SHa9!{x#AoPz&#FNugKIz*3|}Fd`A%bKI0F$cpDz$7De)Pb2bsse~4vmGMyq z&Gjo+xF{wTr)_2}1DlfL3WgsX=s}|<8C9=|M#$1`pdEW~jBFD+b}Fwr>*{WD?v6$iFKgIURei?@?h%TDsswRK$u~kg!0E*QJ}P5DcFn_uBegJidB3(cz9;H z`3#Bv<7s0WxDHu;|M!46tRbd@*f{P(mi#Xp0G=@t z4W;<4IV@t}+$yB^8GM|>AH5p{7wTdQ6>Fd|k1m7d9J>NU&4;zlwCrCVSDJ0wdClsE z0AJcJu&_~I;kVPAKnDcpwz(@&m%8$gYfLpl`LhR>H^DCQ$rjqjgBRr_ zTk}97SAG#MpWVa-<&+iaVvIY29MKJdt5YmI4XiCc<(KgD8PWUg_nFXFzJ z`le#&K(D!*bJvN*gAm@yf~FKMj%5c&3L8Hv90AaTk?KI-Hox>6N^W*{3H(o1efHi$ zB*W$WRPR1*3c8j(LYgxj_6h%%IBG5*9pYv;pC}#jER?Ve_I*h>QMKcwu`_Z%bRUg$ zix{%qLt8*$KRo9{6B-2?W4_1&9q%tZM#=j6 zMY1aww$o@n?k=w{kmY$IyedxiC)2t?yH3r_GWAO3`wNFg?TIKjm9sN*@8@OUenw7> zd!)%5!Scb^T^h>A*6P()O>Twz(+3l7yu%;9@z)uW{p~-|T+e+twF{t7?f z+jIMhMsPLqP)xpYCIV&LNfcnObJO$vY15TqTa)&t5VTQNXZOAGZCB(YwtUc|SBLjL z`5&2@sA=u1#d}`5MLXuMF1m&D&-%e(yi(kb+oP+6e9L zXU5attul*L&legW&pjgVjpd(*_#Ss;n_Lc3&WbOwFASTnjexwd+EOa_lXq_JjdIE9 zj~?wEYZlFB+2wd%I%k@uN~!RY#hSU|^R9=HrVG0TUyqa9iI$4HZJ5_bZwJTqt5v-) zTW)Q=poX0sI~YZ_pS6+;xo{5Q%KkJH*GBboFy1e6m)&`AcbAF`YC4_4qtc0QOC4Au1J~|EJ%ZkMenNDNy4w<77oggtn z$7X%BxyCSslj3cLZzj~l+;bs8*Kj;0kmi;4A4UmQ(&EcSquh&-`!VT#2EM4`-^cx> zjQ8R05}r5l-g}!m;%xuJH~v5N&Y?>Z0Nd7S+qP}nwrxe4mA1`FRNA&(Y1_7qO4rN2 zZ}j@zK~K6z{Rbje#0s2!&i?j3XzEVksy6w>u-z7jibN;QJ|>>c9ktT`MBFZvx~|t< zV|$R0+>!TdsqB6`%Z#H_XcuW2;ZHh)m29N`MNK0`ZY5)u&%I~omJB*$aa6ev05hUn z27diIq9L&mzOknqrmDxCh~v2i5$C{2o=6r(40?UE0p7?c~C%X-zqP3k4n~c*#1V~ zfY?$2Wbl*K*2;govY~WxoqDIW8Z=)>QJyd{^l-#njBI%XGsp8rEcy$On_Xt$Iv@mJ zQ|qiOTYybE5wil?GGlk+6x`CDk{7Af*)}0nWO6mzONCC&h5;?jjWs2CQ7WWgHIO%thNGLj){;aHl1O?;E!CyrrUK1&HRw8l;xg+r4Pm1NBZPTNhE9ws#MGP{y9 zthVjUF7IdWE40?(W}{~mB=ZGjp6&u*3=Y{g!X33v#K(`3CVL%eJ!vw7Y@FGUqRJGD zJ4Zyiv28#XX8@tZ2&2*MclnY~6INO0G;qys3F4T#T)bMyhU^yj3K^c=n?#T1@EZXj zgpRm3EP2F|3R#pprJdr2RSj~0b$VL|X_TIy1ZbbeABEJjquUD+F-M1J%2xg`aEK#< z=R8N2#557aGm1Q|YE!Ew@C*KSKF4TcCKN*s?95^L{S1`Y-GBz?IraGns3#^f$Fsju zp_QYRinuO-^BCW_&i~;k2Qw=oGQ3N;5wkf;rvRW^23*fn5+9QOqugqxRYDU>Md1%? zPt3<@0XgM@L;lwxjiY$6fjdy__<3-%D9Djf^m}}!0G`QSap4Rg0b&u&Ok*hGm>9&D zOx~SSKa@PV@DH$=u;$G)cv9z=Q0rZK%1GKqt76_ziOE56L9+D}C>A2Rk)KVu>?v25 zg?_vl(Mm%sUIVN$S@IHn3FR{36gk0nGlT)({nEAiJ=yx@n+^+E_XN`OfDj}c=%EIX zYR>UFVMEipO8=~hB=^?Ha|ODWs~f;(CBZfyBU?z;+olVsfl2=l*hfI~OZb@%3K8Eh=0`Aao_1(iv@bAJf@sCcmqPv`iL@*+kSAK_OD>%r*@xf1sn#n@Z z$*8#&8k$T;UumZ*H}g3NiQM=S!3l}e#|JgNF11G|c!7CI(Jep24xQj%5j8psa~NO= zV>Ii%z&LZ~aqB|I6jfQjcEH30loZWKn=*UUn=u~j>0xHs(Cbm(G#SEL#$~q7V%nwH z8X%h&Hsggxu6XLp)Jk-H%dX#i3AL0|B#_q>3E}RpmJ2|vz2S#|@bX+OcNwVkoNv|+ zOE@ePhFPijq(naPQUTDNAuX4g4_#t@xAO5Qk+=qGlF5>$Zr>*~872$k#~XGZs-EVG=JT@!?n@fW)9<3Y?D?`*$JY z_~(9nHc~VQRMOUNDJ&Ltw~F~Pc=*<|HJFed=1pNmzv-G2KQrJ!!%j2rfSw#Ms?X zcL0hcRJ>VVvk`gGPE|rYbBRzw1#tQMx2e7D5FPFW~|Uq`${z=0mz&>y+qkRQZU$j=>|jfqA79hB<@v_G!r0R>TXyp#Ecvl zbWyqf^12MxA!!=;rwzp86c%d*0ul!>J9%k?r@4QrZHF)XXvq(O>EXIrWvxC)`WShXqNJO^p zyOUNZCm3D@4U+Uglw`eq7r0-nM7jCcbTBzwgsxAWhXC5S`BzL7ui2&7@+n-GcSK|Z zZY#blr8jI@0aM!paydpe#h;t{8=rfw(YgNA2ooMelmj`U1SAR4h}6IR$B}r@Cd$H; z^r2FMxg|er6`6(sXrYFkm`+~28_)HYW96=zSyC&^dJGd@CapibXmh~4kQt9Otp=zF zgxfGBd_MpD6(2G2Yktk3{NDJ(OuzrB^&9$pOdNU7*=kKWzHrU5XHc)^$XfbvZq#SI z>D4R0@xPe)qPI?%u5I~_q`N%vL+QctYwuJNpoJiCR-mUv@D!~ ziUpCFBq;&S!u|cs@pd{}-J;0w`|&fU9!1eCD!~;I;hO&sP{s^LCpSTbs>>6--*$Pf zf4^XR=FIWOODv_}2dW1i0e`1be6M!dkaL@#av3IO{Bf?I?9*D{O|9W~jdtizY44;Cg5q4|Bb+3;9=>@s;QSSgwb#QeP-+1Vni4je@9sB_9E8N zVKB`R-FS5-am7)&=I+$7X1^p}#Tmd<3;#126Ti-( zUiC;e4w|{x#V)n7yWg+?ju9kEkVhSG zn7wd-@kv02O?x9EgW&wef*oyY$wN_s81DoojK-DYgisz@1U0dTF24r+SfX1&% zp}S+duwU|?F@-QCG$qF{vh9(PwJF;GO!^>58;)rLE$>p+W*OFIZq((1WhLP$y;Rkj z<|i<@$NVBM6t!X(K+wE;>3hQUK6c~NTxEd#H9q_`}bJ+a9TY|N71tlo%u z>9F|j&@e0PWI{@Ih4u|!#?0H)Z&}%SjLxTrlxXmaKqN%`o%A;~aOXZJ#J&`iG*(&3 zaDD{}&lC%GObgV5LbIQ4+QK~5-l5p|{IK;Xs0anYZ3+#)#i_v&tnjs7z?Xy>NO9FG zL>lI$WESa!2#Ftqpe8`(eTbCHw|jiNnDfb&J2~LHe!T84z4U9rQfolR7@5Mp2Jj`j zikJ$4B^(OxY~AtEnGuLBbg{7j$6*}Qv*5sqweaQn+0cY&IY_-W?JB`F#g}KzRkTQz z{G>w8b2C<*Ym$D+Tfgm_OLq39pmk-Kq67I{O%Y6q>;(7E>NAYC;N?CUM!-L_NSEC&#es5LwA8oJHk*uTNew4RlMPoH-f7 z9Xw9va2anj94)AD7p6lYUrKJupJBL|S9U~h^_=yE5M3wR_;U+X=jN1HX`+tCQ)Lsw zZhZ~7f_VE3)#CaX>y;_o2ys5EK`~?|z~Y$e2Xl#rPBq&CzR6}3)l?2PWs3IUMaaL0 zIPIX02gH__UtEUILuK&W&b}Y41fXq;+84xyx}dQci=V4I3nxrJYgA zB`@2&jpwTd>vU>sHnxqvn6s0<(T-Un`T^8&xaM*EDZc%tsZNY7$dy>XoBJG9agj6O zi0!+sYV&Q3R{E^W^h^w6s_afRYe?Y}MCVKU6Vc1Ur8WA4pA`-{C@}1h`A?fDK36m= z=`#GH$qAjul|(S)?B!v9ep8M3T#<19-K?l(pzgrU z!r<}VDM(kEg+tAXO_6lO+_0dUKrkO2X{oPQWZ>aF2E)20;K!R#%^$Xxs!!iaq6OCy z!d@mlVF6hb#=lGz8%8UeuZ4PVFK6=_@ZsV2lpV4bq2n&84}Mk69DBJ#3I>ozU5X(V z6t=?^QLP{EveP;zkaG(4!38aGP^4=A^fLcx&QnLurd7Rplc$92F^m}cLyuP3bZoev zEEvp;Fc|cZzq5defbIuXg$EzLYz6|dXstmnxq*{qk*KS@j9Gdb8JIcoPcNojFVqG5 zY^y=jVpdkw8J%sGGTRvRHNNkk_5GJMYKs*cZaj_Mt>Z)8NNsh%_zw?h_K68ml12>fz^nTyUBb0Jv&XqR&M_$u>@QBjJf@uNB|%1$T4G7dG1*M7=Ga-;*;>m~>q)=sx2D4%@ibI+(FDDS2LI^PIJ{E& zY}d(dp(p!Ubrd0H-QH9Bvf2_pHpnIwM-M`@j7zmr=K4G;jdE8Pml^01>O-Z)89FEY zy*Dn&xlnSSuCEl^yDuM%>3GP&X1Oef^EBt`%B(PqC9^$vVJ%6wkwxxmh=wTFCH645 zDS>ynfk&gqnwg?5V6+V+NyG@8UmzfnoVH3zR2YUNW(cUXMuy>xLhDB?#*0MO(wfA0@!O)QQ;SCYlCwZ>e<<&3FZ^HN>vKHp|7|w@ zFVFg)nvMUBJS+FV%CmB^|I_+iKN*!9#pguR%5#t5H^*1b-Z3=7GlI#QsmIA43CFXr zd*zl%N3n!T=Us1al}dBQw<{DOEt(>T7z)B;V?jpU+}zyyxN&L-&#*$%!u+q?f zKrr+lv++}ogWnhAHP@!Mb2Wiq?{^j7?VDS9j{Z)T{|o7oi?aMyOrLLw+H+UYnN30Zzw-rM+<$=ZT`0Y6nr!NTAX?NRowHs%Djp6Lf-!oK@`@bMV=l2L` z>*(XWZl5zFD-|p>>FIL$GV$g|f7c6G!N9)&pc*}pWUNnMRQ#3I1HP#Y0R>T8Ju0Er zv9vK8S+s94cZKySeXC|{B+HhINCZ8Vu;|IvfM(VT7d()$N{Mhs6-K+5^J2uY&PWn0 zYO-hb@EI2v9vX}vF*^0ycMBPphQN=)2L%-U5b$jDgw z^U{N&2yzgOeCPv-nF0^KSga(x1-3e#!Zh%dnL(>){Lgy(!X*ZV|6m?r=UeQbo!&&< zwNdfy(GgygKPa{}FuqYTKcP&eJ#0zm*9qLJzpeo{a@9FtMeL)>t@JlE6Wra zzt9xjs=RLQuJ0tDbXa^CuxpZIi?=Cxk+3v8>Y(%)Y$Be16a12=BngxuOzcT^F{ZMM z_>NS&Pv=hFR@Lp0CT7jCDjB*nZ5Rh`@JwO0_F?K8ST|=U(n5;f!;J{$GV?sTFe$O8 zhSp!{;f(qA00(nGmthc_16-I6Mobb9OkFbS`)W?~OQHy!Lp}spBX;Ga^PW0-`uC^i z^4NI1%TR!Y7ZHCgW+4CvCP~!`mvznWS$ybN^Zq<-8;wZm=d7rei}P3-Lh$x0*t!lH z*f*a*7K=*;FAAI(e!W&g##sgqo^8esUI(pwF_I!z8dp=4j2}BzDG+-k<>y3080llc z@>M-g?@4WD?1aQ!1D&&pM^@}7f{bk!7OJ;8Arf!lXKx-p&U1fCsZ7rI5H8@ssGth_ zmDb!pEKgM<-MGwAOy>?;>#mREuUA8^Dc-1Dy!_M?tj4Y~X@ctm+a2c>9w9FjeZLgu znkn&~_DYXJr{ql)(J5q|RaQxg4Q$^A)=-<}U8@@;1>xZaN}k(rPtQ@l5BtC~nZ zPBisI!yvN@RaL|oc6J{q6@ zs&u}W)hl0$c0B!PhM+E%q-CWD|LsX#vT}&7q)VTX;aZ>qM`(MpA_Xae+=?R%zdFLl zd)^j*C=taFY9G{C%?nC0Howt2eB4Ig{1W}!usuPQ2*u&BfiurJVN@`^6^UDX2TF{w zr?Yr7yBgVSS_T;8B##1ws?E-IRy`VecUnp^NlGaITbT}Y&rdjVC{VPk;s~PbBh`pM zIZIEcqc^*M~+OkBsdxdQHJb1BaxJi=gkJRQ)|l!IH>3JdIb zlz3FFRXezB26x-lxru(KI#iR&hscv*Otzr!`+cMh%fxgvLm7XEH%;U0REJ+?^RFv~ z(CJSpK%_c_#g_mDB-~uuiKTX0bmI2gW$Me{^o_(4#=}A*BKLQ7)2Dkm=!QV3V)tUe zTjh8ICk+uCMS%n`a2CCZaC}sE?g?;&W3l*`dKi6w(MD!WXzRb03j)VN!t1DIJ6qM3 z63DU}+c~YEpb|w=?I=&Uk=ljU217Am)@V8l+@(s0c}3k29ZC%RJ`y5;+XzyaUUkbM zbyua1W6}d|420rlT~8V4**cgqbTZ?{L7WeTFtDP&<|qgfcTI;8!?^qb%D-Ez<&5X( z6p93GRtI=kK_vOf;_z*9sbw2a#zz>ag#UEVA}k8|&;}X0Uks+{MyhpEuuc`>)tk+c z?{pgDHq#Ivu3cgNl)2PhSBNvOr}MN5R-5L5I5IhjzKgF&Ga0F72!p}0(#ufgwZa^` zP0#Cj^6W?qeT}2&Oepuk1weo*TdvI(54I4iH}dWNFvfcoQ-114)qT4Ybtc|(a;GXD zo3Vq{aZh#4&hkuZ*}vqSuV0><6g{!|5ug>JE!^GWMp7ZTs$`jITMjJ2cZA&kB8)uY z*o^(w6^5g|?abXX>vg7iFBgn5dXhoO?p{y&kl>ZYiJv+Zloe1jB?@E&OGcG693O%e zN;?;$j(I?RV=aIkDzbzP(-n*UD$&;n9^m%fa z+F+BpNxAtgP+meRm)c(?Q#_g)-h-d|<@vExt|A5D2r(j+pq|cb5@uat0VGu68)CBC zNEvnPYcYm_WLiEy{ugKe=N4nL3aP9oenK_dzV6bZ$LXHLP-cx#m>H(9q-cbMNJ{bz!R!%2*;( z*rlnXFnIWdXEz0uM6yfHh35|-#pMQo(YOWNL8nIxQ*tCv!#blipUQ<1m5Er=FA$>k#yls485wV01wJo^>c{= zU^vB#O6q~=r4e|vxV_0;NC%G82sH5tbqu3S%ks~9L>K!uJm4MzmcwRCo@Gy4rkLcu zE~m3{)*Q|#{bHCfR_nFGzVw6qdQn{d&&y1Nw~vWSV49;o9V};ZM10+3UPQ`6s*`e! za;S^m|=OVnwdEExYX8R!7hD( z5`(SOvK`>UZubz-M21-0(dK;alSm7U-P~GZS9*$Lm7>=%kA{cgqvSRZiP;RQhdov7 z`Qr^#c#{_&oM!UJlC@6Bv-JQ2!XjIUOGSIDB{__kqSBV`oBWolu8n8d)&0lu1MKb$!Ex}1RydAf9-P;BZ$wbO_XJ8(J|HH?1kr#L?r@;(X9nQvVm z)bV!K{hdpH)x1(vdl$1#ZA#6vZe`OPJFKmLci`ZYKJRkXeZPlHt^0XI+2J*m`}b2T zU(3J;2zhZ-GsH12Zd?Y1{az0H+#$Z1lr~DYj*pxPj=9Nelv6vr*5pb{*Ia% zcvUQcAXM~ZI7wjMxX1DpuKpDgbz48OMg=6+y5cC0aKS(NMu< z-(3`HyxDOGg)ktCvM6O6c_Hrn>U)sD#NUD8)z%0LjjUez3%n@^)l1JEZx_f&t;0_l zmAx88AGO;Tf4id|nxclpb%v5nu|a=_ZH^)G5R7FHS|V-H)P$5Pt0_R{b5`h_)K4#p zLfO4>?WuWm6ABhvQg=o_fDOlOU}kE%E{9|e$hSZ$JG3H5TA|ijNQ5kBRQ{`A zCvOY&qQnD_BvTBB()j`L6QVew-ANRuPeXkcR5;$>Rj6A^$*g>p+{>jvP;;381w5Sy z4^aK50P#hbmc}aS1a_Lj9;1K=jr2ak5_VD->>5e-?#{G+ylK=q5tY!Uetz48*>fr$ za84bMcIpS6pT8kWvHORp9u!r1qhEQWu%;qmM4r>nSB;K^u|aK~tCRzsN?0cINbj7Pi>Ly;MNQz$D|7 z^xvxS2xAVw62?>PiBAjz-+G4u4si_@l^5fZ-G^fpqd-9L3Kx6rnXke&_3fIou6d~E z{R@ZnZ7J$)gDi$jtn`~%t|XnW)PctYDpy#AsC{K=(k^;5%pdSNCS8ZhDyE&b*yp>H z&sF>^sruR?g6<#B6c^B^PHbXA>b%i`BDO1*{=B^2(&Q2+7&IW*-e5$A%2zLeqr)2& zSjPyE{br4j`hTuU=1lnAGwsgFy8jgLpx1KA4qHd1&Uas~?U}6Ln}Nvkh_14FF{Q2f z>Y7`Rk*CYjr#Ph$X``_~3TU07?M)Ddk(m%L!FZ>m|4})JTcO)9sib>X_&V|e^3Owo zu8tA^qqe7?R_}S!r=UPZrE1RWC_=fWR19jLcArKeqtDO7i%T)i82oz;M|UbbGN4ol zfmWV>r{@c@UU}VnipD?sl{?ZW!DE6oID!R(ES)%HJRn#Sq~7GVZD}5S7;%v0fkbxJ z)R4_n!r*3&&e#?~Z_eQ@y@9tZ@x7~i<7q5xg{9MxwNaLQ(^8ba6VAsb-WkP>4}LC3EN zdO}_Cj)R6`w$Kj!w7Y#LlDA^v(QNjn<@#2BW=ge?P=b zMarLuW*CVHqGUWHcgXU2^THnoTI7&Q&&0PC{I?)^CbS4Q{ob~PBPKc3W#$-SBz9)> z!7(h;nqBkN7elNgbdd71<#Dkl0c52xu8vb~*K$8F#O7tL*S%3$r;`5g`EfPiviB+P z;AO3GBOCzGcscU59zlW=6jhC2lHjQcV1~3p1vvVY<8p2#VmiV?_Vv}yh$N;NV*j=c z@ntDbtksn=%nA7VvObUPCFRwB7-Qk|C~wyxb7D_#X+e!OXc(ln+olL1IvUmV(Q**L z_5VG9BqdbTg`3_CgCCCn9P8>#<4hN;zFUL!In3KOFT4Qx9a-kz!v7g3|>K}XR!VJ%I_Zbdy(E(4B zNqKfE@St93C6MXe=YiTXI!uADspIGJqPp*I5N~86uQw< z0)v4GC5FH#6AbacFa~0OCUDoE0iApSlTH-(4ucg z+S=ZpIr8YhTkFy>OMPC79@)`1?xM5sN4k7@J@_l$XX~Z>@tYTc@eR*)hEkz*BJD zDKWjph+bQ=zxbU)TaZBb|29|umz(|1%++j6|2}T^|33D=!p*X?{&Q#0|8TQ2wYwYJ zzz1VK8)3N&tz%aZP<2_Xb&zz=fuzbf!zkRu)U*#bwH<3X@ej>yX1)o)ymh9sne|%w zTl)GbmJ3g>aD)|_tWP+(H;Xs^yS*w?C9GdBlbjBJLut<~8EcjvG+o#Y;YMm{pYGq* zE+-tyd)|Kk89{A~SDftiVa?6q*{Ld>c(Uo{))argeD$xgV)60F0vJ z?1{L-N)8~Sj*VYYL!3}W+ksS7Ng1@!BQLBi9StD{o$bo#jlt9KX24T( z?rlf#j=iw`Z!k?S%bL@v?`dD6j2V-P&MJR^Qr7>X6+%5%V?CYbDCo3Yeiz`}@?8kD z(e!|?{xyJpaN;AVyfJV9WJ3Nc-JD3NyF+XBQTdiqvVnB4J%S&-HXMGE57NRn5%i%^ z)yYA*rVM1Q%vp0@{=i#QIZ(mcmub-g$2n7vZ7{# zqlIfeJ7oGaU&|1RQ>+%915H0`iDo1#BwcvEMK90h78sq@-8@p^XUDEq6%f`e5k(e{ zjxPpXC<5@+TnkWPkPp5f#)$~5GC=soZmsTq8wYGnZpndaR_3NZDBCHqkBW^k0}APd z#2mG-_2ki6+`bo%+PJrl zQ8{nQY?VE`7uB$!Nb~~Dm8}%ngAbOhg^Fm&w5)C+fg2bw~}edkZKF29@10ZXA( zNN-se)mS-h;Q>!%B3``qud}O(pM1J8gyGS0QA@>#5Sd_=TT#EqCes~bF0$9Nl=9J{adKaGa0(ysaChEcF0eStW#Y`XF%nB)5e!D zWpLpZx{&%>i(u-R5{)Rt5n83u(udyRemcBa2-?~CaRfw@YdDqK2J%4dJP-#cr4Z0&G z-rklOtg)7HE#kXtWW&|t*TL&pua+O^8eq>{iuux7ruLOUxDD}58QHz0A6nCe$FQu- zf)JwW^@W5t6+diYo3GCgSIs~W6nZ z?Rz)+yszTAeG-Osirp~(!#{+N4Ee3L$tApW_&IM+J7S;}t^UcSMkA#*A%pUmA#N60 zjSClIXfFIxBo^I4$TKYrX4j3?fbYr zQo;@IdQKz};c#we;IN9WQ{-h4!?=Ms^~tI-n

    M=Ee~uyd!@I?)ubAJ5|`aN|8oR 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%0D(397+qDP8Zo5 zn;{ZwF*XZhpgaXnjK+94d}N`%9Rd`Ef$W2VyJAESzydMUk3+UAlG_4|jq;R2W{cPd z1s4%QGZ+FScE9o-Tq1>q=raXOkcHBW8w0}A5!Z?C1H6IAKJc^zT?3FY6c;3k=ByMv zwMBdcg#zg_N*{#@R3m$%uvsGWQOOjM`KT}uTAqY_{Q5cI#L3s~3E9y_7iW1cq$XP{X z1mPEr(-gSHgo(BI6)!M`>YzI-|5O zSQIwO7sz8#pABjS*#NQ+CY41;br;ew5nW?4SZLg*Fqu>|-++`slvfZ!MeGvNP7$86 zC^XS=G`J%Op_xUei0ln~Eb9LtBV?nw4={>~#uR`-wv4QSryHU$$h6UMP~)I7!d)0D zBQ~2Z!c)j?QTqjx26Omz4cyF8njsB?6c8N;F+cP1I8>BA2BZQ=4nlskqH6#X>BG?|4A=-dAGF$0`XGp+F@;89)6iTQx)CD1Ie;&83Ra3}%kn0uA@Eh%W(`D3V(M473v28*miuWzcAl@{7zzXQ90%8kB<~yr;3C z>5HxbYLDs*^a{}aGo;0!y$CL}z0rD_Mu&cm$T%pJQJSGl7NL(p2G5JE0U}3pE;#C7 zis%}H2AwGsm%&2oEeJCry&D=6)CJXNCYdg>-+$-<;GG*0JBLplpz#BYjfTb#P;il) z0bua=#*lqLE{fK~aOfgZ3(;86GeUU)VGFHSL7O4dM%MtkopU_f$< zuEB7D2lYPMm#0IY6^*si z<`Oy%`nHHZgBOP`_pjps2FV2iqr*wWPiq7UIUZg-;m8NxR(gcP=PY1mZ5v>*z R0lJ@{k&~2_ms*=l`al0>?!f>6 literal 0 HcmV?d00001 diff --git a/samples/lenna.bmp b/Part Two/lenna.bmp similarity index 100% rename from samples/lenna.bmp rename to Part Two/lenna.bmp diff --git a/Part Two/lenna_with_dragon.jpg b/Part Two/lenna_with_dragon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22a83313b7da73b6e0e8beea6b7ae126ba702598 GIT binary patch literal 44150 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 literal 0 HcmV?d00001 diff --git a/Part Two/wales-flag-xs.jpg b/Part Two/wales-flag-xs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..464da9fdba4e5b6bfdddd352dac7cee9770d6a89 GIT binary patch literal 39415 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 Nwf+A%HS^Ehe*t2LuEYQU literal 0 HcmV?d00001 diff --git a/Part Two/wales.jpg b/Part Two/wales.jpg new file mode 100644 index 0000000000000000000000000000000000000000..977d82eb015f76475e7b6c00611ed949015a27ae GIT binary patch literal 306920 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

    ?xR0t=n_FXXr(<55suR8f2=F6SA5cb%GV8 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μm!PXVro=bH8#Tj#0|V(X|=w1G0pu-0}c%_ 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≪GOD`%%*b^8YNu?46%lVK-(6GdVYu1Gm$AM1vp!;ziWH#2e(7#l z7<{j;h>JTE2^+}lK(wcR`-dikaP2k-cmrzS*PxK;T$YWNLXF~?njpB=pZzF0wKC*t zI_LMhM%T(&s5TNaulKWmsMz2zmZNm(=D5Q{Ovnjz*}{tK1+_Sb4&BTvFP2xqwL33L zc)!d{pycu;{)shTiwKQ$O)8~ljzM~iqxr%SIX84KH?z{9<$_T^I@z62=FENyFI^9`!tVF^3p#e@~%?r4J4|zTKn5L98WMU zx{859dp(b^uT{$~)3CX+mgI4v47r~W_sX z<-cx9#y!P&&9mF72+5wt2dTYz^SQ=YG;qu_2Mw;mHtwZ3yaJo^-@MtiOp3M!tp;pC ziL?jgHT7J+imL-Q^kv>PPQ3KBNN8Hz7S<>gQkwGr{Kxy+ixZV+H?ZQa-|yj-^HDfK z72F6RP>!^dS=*YCW$vr|b!naVm`OBPgk{O_{AB=qtvB1gq-kAR z9Rlc+CAmsENGNIzdX88^d}Olfm3aN^Q-ANyJ8diq02~cqv7Zog3GN<^P4YMRyE{vj<1Y+!dcBwp(?mCC%EE0tw`x+Fe>bx^ z1(wNy;8HcB-xw`n{Q}s+XR%C63Hc^2vRHw+PvB|I+Kv-C zC^b?^3$bKqm9b;BjNyhkID|*~yzF=+iQuSRjdEtYtovl%M8^>T>SJl}J45EKteV#~ zO_W>4dtR%uDx1o5Xgo^&LmNFArqDm5lq9&2HYxq76EU{lMv8aHeduU}Q&wq5Y~qX2 z=)t%PYYM`gh8t09M8hlYQr*82$vApv+@^zw6fuwwNDt9D`dy}g_lD} z_}JlYI=Ob6vn~@t>29-#F_SHizbu(3s0NvR<_!GWH{HPMAIPwZkip2J08WdY(bu0#C6uQp&TBVYl$wsiaTF)n zFL*I4UW0y@f0RAt%Z*=w&qDMoLSkZ1>Thqei>LV9E{azUcB4Sf8WLt9TXXKXIR!^Q8{Pk zc?ht&+Pc@HUTp~vE!~;#ZR00J4LmT@tAm@7XzA5W1R{2ee+JV9>PmF4b)xI{SX%xZ z3GXFWcYYj%VSJ%+iwK18t;d#`%(ai83s?E^)s7L|?TOM{96k_YoGejk`jWnqAve=B z*MykkZAguI3^i{2QLxKV9qS}k+4qUEYp$G)!gf;%-931(YMRk073Wo#SSsWjJi}bE z=~K#{*&lVqG#~p;pEcH9Md|1AW_zh73<=^ebv5R*-y_0r3=eJL&{B3E>b#N(21MfC zpMx9`N7=60Y+qJf00bU!tr~Zn#Hk6wu$yxAyhwl1CjH0}`AW+rA3+*y#hWmDlyqv^?1<�jt4Lwds|$@c_g{AGQw%Tp4pWu~mJVt-}6 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 literal 0 HcmV?d00001 diff --git a/samples/airplane.bmp b/airplane.bmp similarity index 100% rename from samples/airplane.bmp rename to airplane.bmp diff --git a/clock.py b/clock.py new file mode 100644 index 0000000..6c282b0 --- /dev/null +++ b/clock.py @@ -0,0 +1,57 @@ +## This is course material for Introduction to Python Scientific Programming +## Example code: matplotlib_clock.py +## Author: Allen Y. Yang +## +## (c) Copyright 2020. Intelligent Racing Inc. Not permitted for commercial use + +from datetime import datetime +import matplotlib.pyplot as plt +import os +import numpy as np + +# Initialization, define some constant +path = os.path.dirname(os.path.abspath(__file__)) +filename = path + '/airplane.bmp' +background = plt.imread(filename) + +second_hand_length = 200 +second_hand_width = 2 +minute_hand_length = 150 +minute_hand_width = 6 +hour_hand_length = 100 +hour_hand_width = 10 + +center = np.array([256, 256]) +def clock_hand_vector(angle, length): + return np.array([length * np.sin(angle), -length * np.cos(angle)]) + +# draw an image background +fig, ax = plt.subplots() +ax.set_axis_off() +while True: + plt.imshow(background) + + # First retrieve the time + now_time = datetime.now() + hour = now_time.hour + if hour>12: hour = hour - 12 + minute = now_time.minute + second = now_time.second + + # Calculate end points of hour, minute, second + rps = second/60*2*np.pi + rpm = (minute + second / 60) / 60 * 2 * np.pi + rph = (hour + minute / 60 + second / 3600) / 12 * 2 * np.pi + rpgmth = hour + 7/ 24 * 2 * np.pi + hour_vector = clock_hand_vector(rph, hour_hand_length) + minute_vector = clock_hand_vector(rpm, minute_hand_length) + second_vector = clock_hand_vector(rps, second_hand_length) + gmt_vector = clock_hand_vector(rpgmth, second_hand_length) + + plt.arrow(center[0], center[1], hour_vector[0], hour_vector[1], head_length = 3, linewidth = hour_hand_width, color = 'black') + plt.arrow(center[0], center[1], gmt_vector[0], gmt_vector[1], head_length = 3, linewidth = hour_hand_width, color = 'yellow') + plt.arrow(center[0], center[1], minute_vector[0], minute_vector[1], linewidth = minute_hand_width, color = 'black') + plt.arrow(center[0], center[1], second_vector[0], second_vector[1], linewidth = second_hand_width, color = 'red') + + plt.pause(0.01) + plt.clf() diff --git a/graph.py b/graph.py new file mode 100644 index 0000000..e69de29 diff --git a/learning_rates.ipynb b/learning_rates.ipynb new file mode 100644 index 0000000..d8913f9 --- /dev/null +++ b/learning_rates.ipynb @@ -0,0 +1,25 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#.0001\n", + "#.01\n", + "#.5\n", + "\"\"\"if you choose a value too small you will take forever\"\"\"\n", + "\"\"\"if you choose a value too large you might go past the limits of the graph\"\"\"\n", + "\"\"\"even if you had infinite time and resources, you should still not choose too small of a value because of local minima.\"\"\"" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/samples/read_image.py b/samples/read_image.py index e7a5e7b..20c8a2a 100644 --- a/samples/read_image.py +++ b/samples/read_image.py @@ -22,7 +22,7 @@ plot_data = data.copy() for width in range(512): for height in range(10): - plot_data[height][width] = [255, 0, 0] + plot_data[height][width][0] = [255, 0, 0] plot_data[511-height][width] = [0,0,255] # Write the modified images diff --git a/samples/widget_slider.py b/samples/widget_slider.py index 4b06a98..d10ad39 100644 --- a/samples/widget_slider.py +++ b/samples/widget_slider.py @@ -19,8 +19,8 @@ # Create two sliders axcolor = 'lightgoldenrodyellow' -axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor) -axamp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor) +axfreq = plt.axes([0.25, 0.1, 0.65, 0.05], facecolor=axcolor) +axamp = plt.axes([0.25, 0.15, 0.65, 0.05], facecolor=axcolor) sfreq = Slider(axfreq, 'Freq', 0.1, 30.0, valinit=f0, valstep=delta_f) samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0, valstep=delta_a)