Gittin' Started with your Data Analysis Tool Kit: Intro to version control using Git and GitHub
===
## Getting Started
---
To work with climate model output and observational datasets, we will be using the Python programming language and backing up and collaborating by sharing our code via GitHub. The first step is to become familiar with the Command Line interface and Git & GitHub. Our labs GitHub can be found here:
https://github.com/oceanclimateconnections-temple
### Setting up Git and a GitHub account
__Git__ is an open source (free to use, modify, and distribute) version control system (_VCS_) on your local computer that is recording (tracking) all changes you make to a particular file ... so your changes are backed up and you can revert back to previous versions in the event of errors / breaking code! Git stores "snap-shots" of your code along the way. This means your work is always backed up locally (phew!)
__GitHub__ is a remote repository online (a website) where all your code (and its tracked changes) is stored on the cloud. You can push your files and all changes to this web interface for secure back up. You can _always_ access these files and you can use GitHub to collaborate with others.
Please read through this [webpage](https://kinsta.com/knowledgebase/what-is-github/) and watch the video to become more familiar with what Git and GitHub are. This [book chapter](https://git-scm.com/book/en/v2/GitHub-Account-Setup-and-Configuration) is also a great resource for getting started with Git & GitHub.
<iframe width="720" height="405" src="https://www.youtube.com/embed/21Gl97tkbHU" title="Git vs Github vs GitLab — Key Differences and How to Get Started with Version Control" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### Step 1: Downloading git software for your local machine
#### Mac OS:
__Download git software for your operating system & run the installer (For Mac; [see here for windows](https://git-scm.com/download/win)):__
Open up a terminal window by typing terminal into your mac's search bar. A window like the following should pop up - click to open a terminal window. The terminal application gives us access to the Unix Command Line on a Mac. When you type in a terminal window, you are sending commands straight to your computers Operating System.

To install git type the following (as shown below): `git --version` and click __Install__ when prompted. This will install Xcode Command Line Tools on your mac. Xcode Command Line Tools are Unix Tools that allow you to interact directly with your operating system through the terminal, or command line.


Upon successfull installation of Xcode Command Line Tools, enter the following (omitting the $) and the git version on your computer should now be printed out as shown below:
```
$ git --version
git version 2.37.0 (Apple Git-136)
```
#### On your account on the cstocean.tu.temple.edu server:
The lab's server has Linux Ubuntu as its operating system, so the instructions differ from those above.
Once logged into your account on the server, first check to see if git is already installed by entering the following:
`$ git --version`
If not, install with:
`$ sudo apt install git-all`
### Step 2: Set up a personal GitHub account following the prompts [here](https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F&source=header-home).
You can use any email account you will have continued access to to set up your GitHub account (I am not sure if you lose access to your Temple account after graduation). Once your account has been created message me (via Slack or email) your GitHub handle (username) and become familiar with how to create a new repository by following the example [here](https://docs.github.com/en/get-started/quickstart/create-a-repo).
Now that you have created a repository on your GitHub account, you can "__clone__" that same repository to your local computer. But first we must generate a pair of SSH keys for pushing commits (edits) back and forth between GitHub and your local computer. Follow the instructions [here](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) [__make sure you are following the Linux instructions when on the server__] for setting up a SSH key and [adding the SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).
Make sure you read through the linked instructions above, but, in-short, issue the following commands in your terminal window on the server to generate your SSH key that you will add to GitHub. Enter your github email credentials instead of mine:
```
ssh-keygen -t ed25519 -C tuq41374@temple.edu
```
Hit `enter` when asked where to save the file. Your passphrase that you are asked to create can be anything 1234, 4567, whatever you want .. something easy to type and remember.
```
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
```
Enter the passphrase you just created now print the concents of your .pub file.This is your key that GitHub will ask for. And now continue on your journey of adding this SSH key to your GitHub account (see link above).
`cat ~/.ssh/id_ed25519.pub`
Once you have succesfully added your newly generated SSH key to your GitHub account, go to your test repository you created earlier (click on your widget in the top right and click on "Your Repositories" and click on the repository name). Click on the green button that says __Code__, make sure SSH is highlighted.
Open up a terminal window on your computer and make sure you are in a directory (you can type `pwd` (stands for "print working directory") to see where on your computer you are. To go into another directory use `cd directory_name` or to create a new directory use `mkdir new_directory_name`.


Once you are where you want to be ... type the following in the window (replacing the text after git clone with the text in your green Code box on GitHub):
`git clone git@github.com:oceanclimateconnections-temple/antarctic_atmosphere.git`
__Congrats you've cloned your first remote repository locally!!__
Within your directory, you should now see an identical copy of the repository that is on your GitHub account. Check that you see your "README.md" file.
### Key Concepts
Repository:
Cloning:
Forking:
Origin:
#### Forking and Cloning a Remote Repository (on GitHub)
The first thing you want to do is to fork our project repository (repo for short), [antarctic_atmosphere](https://github.com/oceanclimateconnections-temple/antarctic_atmosphere) from GitHub. Forking a repo means that you are making a copy of the repository which allows you to freely experiment with changes __without affecting the original repository__. To fork the repo, you will first need to accept your invitation to be a collaborator since this is a private repository.
Navigate to the GitHub page a click the "fork" button. Once you have forked the repository, you will have a copy on your GitHub account.
<center><img src="https://www.earthdatascience.org/images/earth-analytics/git-version-control/git-fork-emphasis.png"/> </center>
Now we need to get that on to your laptop, this means we want to clone __your fork__ that you just created to your computer. When you created your forked repo on GitHub.com, it exists as a __remote repo__. Cloning creates a __local copy__ of that repo on your computer. We can then sync between the two locations. Cloning a repository pulls down a full copy of all the repository data that GitHub.com has at that point in time.
To clone your fork of antarctic_atmosphere, open a terminal and navigate to where you want this repository (directory) to reside and enter the following command with your GitHub username instead of "YOUR-USERNAME":
```
$ mkdir antarctic_atmosphere
$ cd antarctic_atmosphere
$ git config --global user.name "your_github_username"
$ git config --global user.email "your_github_email"
$ git config --global credential.helper cache
$ git clone https://github.com/YOUR-USERNAME/antarctic_atmosphere
```
Now if you do `ls`, you should see a folder called `antarctic_atmosphere`. This is your local git repo of our project repo.
Next we need to connect your repository to the original repository (__origin__) so that you can easily get any changes that I make. Start by moving into your `antarctic_atmosphere` folder. Type `git remote -v` and press Enter. This will list the current remote repositories (on GitHub) that you're connected to. These will be labeled `origin`. Next enter the following to create an "upstream link" to the original repo:
```
$ git remote add upstream git@github.com:oceanclimateconnections-temple/antarctic_atmosphere.git
```
To ensure that was added enter git remote -v again. Now there should be extra lines in the list labeled upstream.
#### Pushing your local changes to your remote fork on GitHub
Lets test to make sure that you can now "push" to your own forked version of the antarctic_atmosphere repository by creating a simple `test.txt` file and pushing it to GitHub. It is useful to have your GitHub account opened in a browser next to your terminal for this.
In your terminal navigate to your antarctic_atmosphere repository and do the following:
`vim testing_push.txt # This will open up a blank .txt file called testing_push`
Hit "i" on your keyboard to go into insert mode and type anything you want here. Now to save the changes to this newly created .txt file, hit "hit __esc__ and hold down __shift__ and hit __zz__". This should take you backout to your directory and you should now see a file called "testing_push.txt".
Check the status of your changes with git: `$ git status`.
Tell git to track any new files: `$ git add testing_push.txt`.
Type `$ git status` again and you should now see that your testing_push.txt file is being "tracked".
Commit your changes to git: `$ git commit -a -m “short message detailing work done”`
Push changes to __your GitHub forked repository__: `$ git push`
__IMPORTANT__: For your project you should make sure that you are only pushing your local changes to your own fork of the antarctic_atmosphere repository. This will avoid accidentally deleting things from the main repository. Note that since we set the "upstream" link earlier, you can still __pull__ any changes that I make to the original repo.
### Working with the Unix shell and command line editors (vi, vim, etc).
Working with the Unix shell (Command Line Interface) is fundamental to computing tasks associated with the work we do. It is important to get an understanding of how to use basic Unix commands in your terminal window. Working through resources outlined below will bring you up to speed!
[Software Carpentry Tutorial on The Unix Shell](https://swcarpentry.github.io/shell-novice/): Work through sections 1 - 3. This will cover the basics and you will learn enough to do the tasks you need to access data, list files, make directories, and navigate via the shell. If you wish, continue on to sections 4 - 7 of the tutorial for general knowledge of what the shell is capable of doing.
You’ll need minimal familiarity with a command line editor. These are basically very simple programs (like word processors) that allow you to edit text files and code in the command line. Work through this [lecture](https://missing.csail.mit.edu/2020/editors/) on editors to become familiar.
The most popular command line editor is VI or VIM ("VI IMPROVED"). Please use [this resource](https://www.guru99.com/the-vi-editor.html#5) which will show you how to use VI to create, edit, and save files. It will give you a list of commands that are useful for working with your files.
### Creating a Python Environment on your computer (good to know this if you want to work on your own laptop, but this step will already be done on our Server and computers in the lab.)
An environment consists of a certain Python version and all the packages you need for your work (if you're interested you can read more [here](https://www.freecodecamp.org/news/why-you-need-python-environments-and-how-to-manage-them-with-conda-85f155f4353c/).) This is another great resource: https://whiteboxml.com/blog/the-definitive-guide-to-python-virtual-environments-with-conda.
This first step is to download __Anaconda__, which is a python package manager. To do so, follow the instructions [here](https://problemsolvingwithpython.com/01-Orientation/01.04-Installing-Anaconda-on-MacOS/).
Once you have confirmed that you have anaconda installed and some version of python (in my case, the __base environment__ created by Anaconda installed Python version 3.9.13 by default) and have achieved printing the "Zen of Python" poem you are ready to go to the next step! The current environment you are in is referred to as Anaconda's "__base environment__" - we don't want to install any packages into this environment, but instead we want to create separate environments that we will use for our projects.

One of the cleanest ways to create an environment is through the use of a YML file. A YML file is text document that contains data (text) formatted using YAML ([YAML Ain't Markup Language](https://fileinfo.com/extension/yml)). In our case, our YML file will contain a list of the Python version and packages and their specific versions that we will install into a newly created conda environment. See the contents of the antarctic_southernocean.yml that I have created below to see how the file is structured.
```
(base) bc-d0-74-20-2d-f3:antarctic_atmosphere tuq41374$ vi antarctic_southernocean.yml
# Conda environment descriptor
# To install, type the following in a terminal window in the
# directory that contains this .yml file
# conda env create -f antarctic_southernocean.yml
# Sets the name of the environment
name: antarctic_southernocean
# This block of text identifies the "channels" from which python packages are
# hosted and installed from. By default, the conda packae manager installs packages
# from the defaults channel, but Conda-forge is a community led channel that maintains
# up to date packages with the help of thousands of contributors.
channels:
- defaults
- conda-forge
## the Python packages you want to install and their versions. If version is not
## specified, it will dowbload the latest version available from the default or
## conda-forge channel
dependencies:
- python=3.9 # Python version 3.9
- cmocean # Oceanography colormaps
- cartopy
- dask # Parallel processing library
- dask-jobqueue # Deploy dask on job queue systems
- dask-labextension
- datashader
- gsw # TEOS-10 seawater library
- holoviews
- ipykernel
- ipython # IPython interpreter and tools
- jupyter # Jupyter federation architecture
- jupyterlab
- jupyterlab-git
- jupyter-server-proxy
- matplotlib # 2D plotting library
- nc-time-axis
- netcdf4 # Wrapper for netcdf4
- nodejs
- numpy # N-d array and numerics
- ocetrac
- pandas # Labeled array library
- pytest
- scipy # Common math/stats/science functions
- s3fs
- xarray # N-d labeled array library
- xhistogram
- zarr
- pip
- pip:
- momlevel
- xgcm==0.6.0
```
To create the environment I excute the following in my terminal window that contains this .yml file and I will see the following process taking place as the envorment is created by gathering and installing all the necessary packages I indicated and their dependencies (other packages ***they depend on***.)
```
(base) bc-d0-74-20-2d-f3:antarctic_atmosphere tuq41374$ conda env create -f antarctic_southernocean.yml
Collecting package metadata (repodata.json): done
Solving environment: done
Downloading and Extracting Packages
nbdime-3.1.1 | 4.4 MB | ############################################################################################################################ | 100%
aiosignal-1.2.0 | 12 KB | ############################################################################################################################ | 100%
jupyter-server-mathj | 2.3 MB | ############################################################################################################################ | 100%
nc-time-axis-1.4.1 | 18 KB | ############################################################################################################################ | 100%
hdf4-4.2.13 | 682 KB | ############################################################################################################################ | 100%
libuv-1.40.0 | 334 KB | ############################################################################################################################ | 100%
nodejs-16.13.1 | 9.2 MB | ############################################################################################################################ | 100%
executing-0.8.3 | 18 KB | ############################################################################################################################ | 100%
fsspec-2022.10.0 | 219 KB | ############################################################################################################################ | 100%
notebook-shim-0.2.2 | 23 KB | ############################################################################################################################ | 100%
cftime-1.5.1.1 | 182 KB | ############################################################################################################################ | 100%
python-3.9.15 | 12.7 MB | ############################################################################################################################ | 100%
colorspacious-1.1.2 | 30 KB | ############################################################################################################################ | 100%
botocore-1.27.59 | 5.6 MB | ############################################################################################################################ | 100%
gitdb-4.0.7 | 50 KB | ############################################################################################################################ | 100%
pyqt-5.12.3 | 5.2 MB | ############################################################################################################################ | 100%
ipython-8.6.0 | 1.0 MB | ############################################################################################################################ | 100%
matplotlib-base-3.5. | 6.4 MB | ############################################################################################################################ | 100%
jupyterlab_server-2. | 76 KB | ############################################################################################################################ | 100%
openssl-1.1.1s | 2.8 MB | ############################################################################################################################ | 100%
numba-0.53.0 | 3.3 MB | ############################################################################################################################ | 100%
cytoolz-0.12.0 | 331 KB | ############################################################################################################################ | 100%
dask-jobqueue-0.7.0 | 28 KB | ############################################################################################################################ | 100%
holoviews-1.15.2 | 4.3 MB | ############################################################################################################################ | 100%
notebook-6.5.2 | 507 KB | ############################################################################################################################ | 100%
libnetcdf-4.8.1 | 947 KB | ############################################################################################################################ | 100%
matplotlib-3.5.3 | 8 KB | ############################################################################################################################ | 100%
python_abi-3.9 | 4 KB | ############################################################################################################################ | 100%
mysql-common-8.0.25 | 1.5 MB | ############################################################################################################################ | 100%
mysql-libs-8.0.25 | 1.8 MB | ############################################################################################################################ | 100%
pure_eval-0.2.2 | 14 KB | ############################################################################################################################ | 100%
markupsafe-2.1.1 | 21 KB | ############################################################################################################################ | 100%
pyshp-2.1.3 | 37 KB | ############################################################################################################################ | 100%
glib-2.68.0 | 2.7 MB | ############################################################################################################################ | 100%
libllvm10-10.0.1 | 16.4 MB | ############################################################################################################################ | 100%
xhistogram-0.3.2 | 21 KB | ############################################################################################################################ | 100%
libtiff-4.4.0 | 504 KB | ############################################################################################################################ | 100%
numcodecs-0.9.1 | 709 KB | ############################################################################################################################ | 100%
libclang-11.1.0 | 14.4 MB | ############################################################################################################################ | 100%
dbus-1.13.18 | 445 KB | ############################################################################################################################ | 100%
aioitertools-0.7.1 | 20 KB | ############################################################################################################################ | 100%
gsw-3.6.16 | 2.2 MB | ############################################################################################################################ | 100%
s3fs-2022.10.0 | 55 KB | ############################################################################################################################ | 100%
nbclassic-0.4.8 | 5.8 MB | ############################################################################################################################ | 100%
ocetrac-0.1.4 | 10 KB | ############################################################################################################################ | 100%
libzip-1.8.0 | 115 KB | ############################################################################################################################ | 100%
icu-68.1 | 11.3 MB | ############################################################################################################################ | 100%
libgfortran5-11.3.0 | 1.4 MB | ############################################################################################################################ | 100%
cmocean-2.0 | 178 KB | ############################################################################################################################ | 100%
libwebp-1.2.4 | 75 KB | ############################################################################################################################ | 100%
fasteners-0.16.3 | 24 KB | ############################################################################################################################ | 100%
simpervisor-0.4 | 9 KB | ############################################################################################################################ | 100%
jupyter_core-4.11.2 | 82 KB | ############################################################################################################################ | 100%
asciitree-0.3.3 | 10 KB | ############################################################################################################################ | 100%
aiobotocore-2.4.0 | 106 KB | ############################################################################################################################ | 100%
shapely-1.8.4 | 325 KB | ############################################################################################################################ | 100%
ca-certificates-2022 | 125 KB | ############################################################################################################################ | 100%
scipy-1.9.3 | 20.6 MB | ############################################################################################################################ | 100%
libwebp-base-1.2.4 | 316 KB | ############################################################################################################################ | 100%
soupsieve-2.3.2.post | 66 KB | ############################################################################################################################ | 100%
stack_data-0.2.0 | 22 KB | ############################################################################################################################ | 100%
cartopy-0.18.0 | 1.7 MB | ############################################################################################################################ | 100%
libcurl-7.85.0 | 310 KB | ############################################################################################################################ | 100%
llvmlite-0.36.0 | 296 KB | ############################################################################################################################ | 100%
netcdf4-1.5.7 | 402 KB | ############################################################################################################################ | 100%
zlib-1.2.13 | 96 KB | ############################################################################################################################ | 100%
urllib3-1.26.12 | 183 KB | ############################################################################################################################ | 100%
asttokens-2.0.5 | 20 KB | ############################################################################################################################ | 100%
toolz-0.12.0 | 106 KB | ############################################################################################################################ | 100%
gitpython-3.1.18 | 125 KB | ############################################################################################################################ | 100%
dask-labextension-6. | 41 KB | ############################################################################################################################ | 100%
numpy-base-1.23.4 | 6.3 MB | ############################################################################################################################ | 100%
zarr-2.8.1 | 106 KB | ############################################################################################################################ | 100%
panel-0.14.1 | 12.7 MB | ############################################################################################################################ | 100%
numpy-1.23.4 | 11 KB | ############################################################################################################################ | 100%
freetype-2.12.1 | 592 KB | ############################################################################################################################ | 100%
jupyterlab-git-0.39. | 923 KB | ############################################################################################################################ | 100%
yarl-1.8.1 | 82 KB | ############################################################################################################################ | 100%
idna-3.4 | 96 KB | ############################################################################################################################ | 100%
datashader-0.14.2 | 16.8 MB | ############################################################################################################################ | 100%
aiohttp-3.8.1 | 500 KB | ############################################################################################################################ | 100%
expat-2.4.9 | 127 KB | ############################################################################################################################ | 100%
multidict-6.0.2 | 45 KB | ############################################################################################################################ | 100%
geos-3.8.0 | 815 KB | ############################################################################################################################ | 100%
readline-8.2 | 328 KB | ############################################################################################################################ | 100%
jupyter-server-proxy | 30 KB | ############################################################################################################################ | 100%
setuptools-65.5.0 | 1.1 MB | ############################################################################################################################ | 100%
frozenlist-1.2.0 | 72 KB | ############################################################################################################################ | 100%
jinja2-3.1.2 | 215 KB | ############################################################################################################################ | 100%
async-timeout-4.0.2 | 13 KB | ############################################################################################################################ | 100%
cryptography-38.0.1 | 1.1 MB | ############################################################################################################################ | 100%
colorcet-3.0.1 | 1.9 MB | ############################################################################################################################ | 100%
gettext-0.19.8.1 | 2.7 MB | ############################################################################################################################ | 100%
libgfortran-5.0.0 | 142 KB | ############################################################################################################################ | 100%
smmap-4.0.0 | 23 KB | ############################################################################################################################ | 100%
curl-7.85.0 | 74 KB | ############################################################################################################################ | 100%
libllvm11-11.1.0 | 17.7 MB | ############################################################################################################################ | 100%
proj-7.0.1 | 2.6 MB | ############################################################################################################################ | 100%
tzdata-2022f | 115 KB | ############################################################################################################################ | 100%
qt-5.12.9 | 87.8 MB | ############################################################################################################################ | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Installing pip dependencies: / Ran pip subprocess with arguments:
['/Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/bin/python', '-m', 'pip', 'install', '-U', '-r', '/Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt']
Pip subprocess output:
Collecting momlevel
Downloading momlevel-0.0.5.post1-py3-none-any.whl (8.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.9/8.9 MB 9.2 MB/s eta 0:00:00
Collecting xgcm==0.6.0
Downloading xgcm-0.6.0-py3-none-any.whl (59 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.9/59.9 kB 1.8 MB/s eta 0:00:00
Collecting future
Downloading future-0.18.2.tar.gz (829 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 829.2/829.2 kB 8.1 MB/s eta 0:00:00
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'done'
Requirement already satisfied: numpy in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (1.23.4)
Requirement already satisfied: xarray>=0.17.0 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (0.20.1)
Requirement already satisfied: dask in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (2022.7.0)
Requirement already satisfied: nc-time-axis in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (1.4.1)
Requirement already satisfied: importlib-metadata<5.0.0 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (4.11.3)
Collecting scikit-learn>=1.0.1
Downloading scikit_learn-1.1.3-cp39-cp39-macosx_10_9_x86_64.whl (8.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.7/8.7 MB 11.1 MB/s eta 0:00:00
Requirement already satisfied: netcdf4 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (1.5.7)
Requirement already satisfied: zipp>=0.5 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from importlib-metadata<5.0.0->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (3.8.0)
Requirement already satisfied: scipy>=1.3.2 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from scikit-learn>=1.0.1->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (1.9.3)
Collecting joblib>=1.0.0
Downloading joblib-1.2.0-py3-none-any.whl (297 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 298.0/298.0 kB 5.4 MB/s eta 0:00:00
Collecting threadpoolctl>=2.0.0
Downloading threadpoolctl-3.1.0-py3-none-any.whl (14 kB)
Requirement already satisfied: pandas>=1.1 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from xarray>=0.17.0->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (1.4.4)
Requirement already satisfied: partd>=0.3.10 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (1.2.0)
Requirement already satisfied: pyyaml>=5.3.1 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (6.0)
Requirement already satisfied: toolz>=0.8.2 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (0.12.0)
Requirement already satisfied: fsspec>=0.6.0 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (2022.10.0)
Requirement already satisfied: cloudpickle>=1.1.1 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (2.0.0)
Requirement already satisfied: packaging>=20.0 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (21.3)
Requirement already satisfied: matplotlib in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from nc-time-axis->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (3.5.3)
Requirement already satisfied: cftime>=1.5 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from nc-time-axis->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (1.5.1.1)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from packaging>=20.0->dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (3.0.9)
Requirement already satisfied: python-dateutil>=2.8.1 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from pandas>=1.1->xarray>=0.17.0->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from pandas>=1.1->xarray>=0.17.0->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (2022.1)
Requirement already satisfied: locket in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from partd>=0.3.10->dask->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (1.0.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from matplotlib->nc-time-axis->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (1.4.2)
Requirement already satisfied: pillow>=6.2.0 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from matplotlib->nc-time-axis->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (9.2.0)
Requirement already satisfied: cycler>=0.10 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from matplotlib->nc-time-axis->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from matplotlib->nc-time-axis->momlevel->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 1)) (4.25.0)
Requirement already satisfied: six>=1.5 in /Users/tuq41374/opt/anaconda3/envs/antarctic_southernocean/lib/python3.9/site-packages (from python-dateutil>=2.8.1->pandas>=1.1->xarray>=0.17.0->xgcm==0.6.0->-r /Users/tuq41374/Desktop/Projects/antarctic_atmosphere/antarctic_atmosphere/condaenv.vb579idj.requirements.txt (line 2)) (1.16.0)
Building wheels for collected packages: future
Building wheel for future (setup.py): started
Building wheel for future (setup.py): finished with status 'done'
Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=0906b91f7f12f3bbe38701ec968370a7531291556bfa9c8ffec5c5df7cf481ce
Stored in directory: /Users/tuq41374/Library/Caches/pip/wheels/2f/a0/d3/4030d9f80e6b3be787f19fc911b8e7aa462986a40ab1e4bb94
Successfully built future
Installing collected packages: threadpoolctl, joblib, future, scikit-learn, xgcm, momlevel
Successfully installed future-0.18.2 joblib-1.2.0 momlevel-0.0.5.post1 scikit-learn-1.1.3 threadpoolctl-3.1.0 xgcm-0.6.0
done
#
# To activate this environment, use
#
# $ conda activate antarctic_southernocean
#
# To deactivate an active environment, use
#
# $ conda deactivate
Retrieving notices: ...working... done
```
Once the process has successfully completed, you will need to activate the environment - notice the instructions for activating and deactivating the environment were given after the environment was created. Go ahead and enter the following into your terminal window:
```
conda activate antarctic_southernocean
```
Great! Now lets launch JupyterLab: