From 6204803ef9af3600fe40d03a660e401d0edcd02f Mon Sep 17 00:00:00 2001
From: ph
Date: Wed, 17 Jul 2024 23:32:38 +0200
Subject: [PATCH] adds exercises from last year for reference
---
.../Exercise 1 Virtual Environments.md | 41 +++++++++++++++++++
.../exercises2023/Exercise 2 Importing.md | 35 ++++++++++++++++
.../Exercise 3 Editable Installation.md | 27 ++++++++++++
.../exercises2023/Exercise 4 Workflow.md | 30 ++++++++++++++
.../exercises2023/Exercise 5 Documentation.md | 15 +++++++
5 files changed, 148 insertions(+)
create mode 100644 exercises/exercises2023/Exercise 1 Virtual Environments.md
create mode 100644 exercises/exercises2023/Exercise 2 Importing.md
create mode 100644 exercises/exercises2023/Exercise 3 Editable Installation.md
create mode 100644 exercises/exercises2023/Exercise 4 Workflow.md
create mode 100644 exercises/exercises2023/Exercise 5 Documentation.md
diff --git a/exercises/exercises2023/Exercise 1 Virtual Environments.md b/exercises/exercises2023/Exercise 1 Virtual Environments.md
new file mode 100644
index 0000000..3d3249f
--- /dev/null
+++ b/exercises/exercises2023/Exercise 1 Virtual Environments.md
@@ -0,0 +1,41 @@
+## Exercise 1: Virtual Environments
+
+#### Goal
+
+Create a virtual environment + install a package + see that that package was installed only in environment
+
+#### Tasks
+
+We will use `venv` as our environment manager - while commands might differ, the principles apply to all other package managers as well.
+
+1. Check which Python you are currently using, and which packages are installed. Also check which folders are in the folder you are installing the environment into.
+3. Create and activate a new environment.
+4. Check again which Python you are using and which packages are installed - are they different?
+5. Install a specific version of a package using pip e.g. pandas=1.5.3
+6. See that dependencies are also installed (more packages than only pandas appear)
+7. Deactivate and delete the environment
+
+
+#### Commands in case you get stuck (not in correct order):
+
+```bash
+% investigate Python and packages
+> which python
+> pip freeze
+> pip install
+> pip install ==0.0.1
+
+% create an environment option 1 (create folder called venv_folder for files related to virtual environment, feel free to change the name)
+> cd
+> mkdir venv_folder
+> python3 -m venv venv_folder
+> source venv_folder/bin/activate
+
+% create an environment option 2
+> python3 -m venv
+> source /bin/activate
+
+% deactivate and delete a venv environment
+> deactivate
+> rm -rf venv_folder
+```
diff --git a/exercises/exercises2023/Exercise 2 Importing.md b/exercises/exercises2023/Exercise 2 Importing.md
new file mode 100644
index 0000000..3add34a
--- /dev/null
+++ b/exercises/exercises2023/Exercise 2 Importing.md
@@ -0,0 +1,35 @@
+## Exercise 2: Importing
+
+#### Goal
+
+Get comfortable with different ways of importing objects from a package.
+
+#### Preparation
+
+0. [if not done already] fork the repository
+
+ https://github.com/ASPP/2023-heraklion-ODD
+ and clone it to the laptop in a new directory
+
+1. You will be editing files within this directory
+
+2. Open a terminal and change to this directory, so that you can run the scripts that you are editing
+
+#### Tasks
+
+1. Work on the file `brewing/example_usage_within_package.py`:
+
+ 1. import and call the `make_example_potion` function from the module `brew_potions.py` function ➔ open a terminal, change to the `brewing` directory and run the script `example_usage_within_package.py`: what happens?
+ 2. change the import statement so that you can call the `make_example_potion` function like this: `br.make_example_potion` ➔ run the script again: what happens?
+
+2. Work on the file `example_usage_outside_package.py`, which is in the directory where you cloned the repo:
+
+ 1. import the brewing package inside the `example_usage_outside_package.py` that lives at the top level directory of the repo ➔ in the terminal, change to the top level directory of the repo, add the import statement and run the script `example_usage_outside_package.py`: what happens?
+ 2. import and call only the `make_example_potion` function from the module `brew_potions.py`, which is in the `brewing` directory ➔ run the script again: what happens?
+ 3. does it work? if yes, why? If no, why not?
+ 4. change the import statements so that it works, then check whether `brewing/example_usage_inside_package.py` from 1.2 still works.
+
+3. Work on the file `scripts_and_notebooks/example_usage_different_folder.py`:
+
+ 1. try to import and call only the `make_example_potion` function from the module `brew_potions.py` ➔ in the terminal, change to the `scripts_and_notebooks` directory and run the script `example_usage_different_folder.py`: what happens?
+ 2. does it work? if yes, why? If no, why not?
diff --git a/exercises/exercises2023/Exercise 3 Editable Installation.md b/exercises/exercises2023/Exercise 3 Editable Installation.md
new file mode 100644
index 0000000..460eafd
--- /dev/null
+++ b/exercises/exercises2023/Exercise 3 Editable Installation.md
@@ -0,0 +1,27 @@
+## Exercise 3: Editable Installation
+
+#### Goal
+
+See advantages of using brewing package as an editable installation.
+
+#### Tasks
+
+1. Check which packages are installed currently
+ `> pip freeze`
+
+2. install the brewing package as an editable installation
+ `> pip install -e `
+
+ or go into the folder which contains `brewing` and call
+
+ `> pip install -e .`
+
+3. check which packages are installed now
+ `> pip freeze`
+ What changed?
+
+4. Try running the `example_usage_X.py` files that you created in Exercise 1. Do they run without errors and if not, can you make them all work simultaneously?
+
+ 1. `example_usage_outside_package.py`
+ 2. `scripts/example_usage_different_folder.py`
+ 3. `brewing/example_usage_within_package.py`
diff --git a/exercises/exercises2023/Exercise 4 Workflow.md b/exercises/exercises2023/Exercise 4 Workflow.md
new file mode 100644
index 0000000..fb8aa75
--- /dev/null
+++ b/exercises/exercises2023/Exercise 4 Workflow.md
@@ -0,0 +1,30 @@
+## Exercise 4: Workflow
+
+#### Goal
+
+Mimic the *write feature* ⇄ *test feature* workflow.
+
+#### Tasks
+
+In the `brew_potions.py` file complete the `make_python_expert_potion` function that makes the *Python expert* potion (instructions below).
+
+Get Professor Snape to inspect your potion as shown for the example potion. Calling `inspection_by_snape` should never give you an error, so you will have to read what Snape does and says to find out what went wrong.
+
+This is supposed to be easy and fun, so run the inspection often and make mistakes with the potion.
+
+Use your git skills to commit the changes you made to a new branch, and create a pull request on Github.
+
+##### Brewing instructions
+
+Make a new potion called `python_expert` according to these instructions:
+
+```
+1. Set up a pewter cauldron and light a fire underneath it
+2. Add fish eyes, unicorn hair and tea leaves
+3. Let simmer for 2 hours
+4. Have Snape inspect the potion (use target_potion='python_expert').
+```
+
+Use the `if __name__ =="__main__"` block in `brew_potions.py` to create the `python_expert` potion and call Snape to inspect the potion by calling `inspection_by_snape` . Make sure you actaully call the function you are editing and change the **target** potion for Snape to `"python_expert"`.
+
+Note that if you copy from the `example_potion()` function, it is missing a crucial step. You can look at the `Potion()` class in `brewing/potion_class.by` for inspiration.
diff --git a/exercises/exercises2023/Exercise 5 Documentation.md b/exercises/exercises2023/Exercise 5 Documentation.md
new file mode 100644
index 0000000..e94ea47
--- /dev/null
+++ b/exercises/exercises2023/Exercise 5 Documentation.md
@@ -0,0 +1,15 @@
+## Exercise 5: Documentation
+
+#### Goal
+
+Practice writing doctrings
+
+#### Tasks
+
+As an exercise, write the docstring for the `make_python_expert` function you just wrote.
+
+For a more detailed description, see: https://numpydoc.readthedocs.io/en/latest/format.html
+
+Commit your documenatation and update your pull request.
+
+If you are done, think about which parts of the brewing package should be documented and in what way.