(sec:prerequisites)= Prerequisites and Resources =========================== There are no formal prerequisites for the course, but I will expect you to be comfortable with the material discussed here, which contains links to additional resources should you need to refresh your knowledge. Please work with your classmates to try to share knowledge as needed. Generally, I will expect familiarity with the following: Domain Specific Preparation: : The most important prerequisite is the ability to communicate about and formulate complex problems in your field of study that would benefit from the techniques covered in this course. Students will expected to actively engage with the techniques taught in this course, apply them to relevant problems in their domain of expertise, and to communicate about the efficacy to the class. Linear Algebra : Properties of Linear Operators (Self-Adjoint, Hermitian, Unitary, etc.), Matrix Factorization including the Singular Value Decomposition, Bases and Orthogonalization via [Gram-Schmidt](https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process). Real and Complex Analysis : Topology (notions of continuity), Calculus, [Banach spaces](https://en.wikipedia.org/wiki/Banach_space) (e.g. conditions for the existence of extrema), Fourier Analysis, Contour Integration, Conformal Maps. Differential Equations : Formulation of differential equations, existence of solutions and boundary value requirements, [Sturm-Liouville Theory](https://en.wikipedia.org/wiki/Sturm%E2%80%93Liouville_theory). Programming Skills : There are some specific skills you will need for this course, including basic programming skills, distributed version control, how to connect remotely to computers etc. with [SSH]. We will use the [CoCalc] platform so you do not need to install any of the software on your computer. (sec:version-control)= ## Version Control You should know how to use a distributed version control system such as [Git] or [Mercurial]. This project assumes you can use [Git], but I actually prefer [Mercurial] which I find has a much more intuitive interface. [Git] is much more popular due to [GitHub] and [GitLab] (but keep an eye on [Heptapod] -- a fork of [GitLab] for [Mercurial]), and you are likely to find more resources about [Git] online. Also, [Heptapod] is not yet ready for prime time, so [GitLab] or [GitHub] are to be preferred. :::{note} If you install the [hg-git] plugin, then you can use [Mercurial] to work with [Git] repos. This is what I generally do, but it adds some potential complications, so I do not recommend it unless you are comfortable with [Mercurial]: ```bash hg clone https://gitlab.com/wsu-courses/physics-581-physics-inspired-computation.git ``` To enable [Mercurial] with a useful set of tools, you can do the following: ```bash python3 -m pip install --upgrade --user pip mercurial hg-evolve hg-git jupytext black ``` This allows you to use the [Heptapod workflow](https://octobus.net/blog/2019-09-04-heptapod-workflow.html) ::: If you are not familiare with a distributed version control system like [Mercurial] or [Git], the [Software Carpentry] program has two relevant courses you should work through completely: * [Software Carpentry: The Unix Shell](http://swcarpentry.github.io/shell-novice/). Please work-though the course (about 4.5h) if you are not familiar with the Unix command line. * [Software Carpentry: Version Control with Git](http://swcarpentry.github.io/git-novice/). Please work-though the course (about 3h) if you are not familiar with [Git]. (sec:python)= ## Python, [SciPy], [NumPy], etc. While not absolutely required, a good working knowledge of [Python] is needed. You will also need to develop an understanding of the [SciPy] ecosystem, especially [NumPy], [Matplotlib], and the [SciPy library] itself. The following are a good place to start learning about these: * [Official Python Tutorial](https://docs.python.org/3/tutorial/index.html): A good starting point is to read this tutorial. It goes into quite a few details, but will give you a good idea of what is possible with python and the standard library. * [Software Carpentry: Programming with Python](https://swcarpentry.github.io/python-novice-inflammation/): The [Software Carpentry] course provides a pretty good gentle introduction (~7.5h) although it is quite data focused. * {cite:p}`Gezerlis:2020`, ["Numerical Methods in Physics with Python" (2020)]( https://ntserver1.wsulibs.wsu.edu:2532/core/books/numerical-methods-in-physics-with-python/563DF013576DCC535668A100B8F7D2F9): The course textbook has a fairly gentle introduction to basic python and then quickly gets into some of the more important points about array processing with [NumPy] which will be central to this course. * {cite:p}`VanderPlas:2016`, [J. VanderPlas: "Python Data Science Handbook" (2016)]( https://ntserver1.wsulibs.wsu.edu:2171/lib/wsu/detail.action?docID=4746657&pq-origsite=primo): Jake's book assumes you know Python, then dives into some of the more interesting features for data analysis, including [NumPy], [Pandas], etc. Definitely read Chapter 2 about [NumPy] and Chapter 4 about visualizing with [Matplotlib] ## CoCalc You should be familiar with [CoCalc]; specifically: * Creating an account. * Creating projects. * Using [Jupyter Notebooks](https://jupyter.org). * Adding [SSH] keys to your project so you can use [SSH] to connect. ### References * [CoCalc: Getting Started](https://doc.cocalc.com/getting-started.html) ## SSH You should know how to use [SSH] to connect to remote servers (in particular [CoCalc]) with password-less login using `ssh-keygen` to generate a key, `ssh-agent` to add this key, and the forwarding this key so you can use this to authenticate to [GitLab] etc. * [Adding SSH keys to your CoCalc account](https://doc.cocalc.com/account/ssh.html) * [Adding SSH keys to your GitLab account](https://docs.gitlab.com/ee/ssh/) [SciPy]: "SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering." [NumPy]: "The fundamental package for scientific computing with Python" [Matplotlib]: "Matplotlib: Visualization with Python" [SciPy library]: "The SciPy library is one of the core packages that make up the SciPy stack." [CoCalc]: "CoCalc: Collaborative Calculation and Data Science" [Conda]: "Conda: Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN, and more." [GitHub]: "GitHub" [GitLab]: "GitLab" [Git]: "Git" [Heptapod]: "Heptapod: is a community driven effort to bring Mercurial SCM support to GitLab" [Jupyter]: "Jupyter" [Jupytext]: "Jupyter Notebooks as Markdown Documents, Julia, Python or R Scripts" [Mercurial]: "Mercurial" [Official Course Repository]: "Official Physics 581 Repository hosted on GitLab" [Resources project]: "Private course resources repository." [SSH]: "SSH on Wikipedia" [Shared CoCalc Project]: "581-2021 Shared CoCalc Project" [WSU Courses CoCalc project]: [WSU Physics]: "WSU Physics Department" [file an issue]: "Issues on the class GitLab project." [hg-git]: "The Hg-Git mercurial plugin" [Software Carpentry]: "Software Carpentry: Teaching basic lab skills for research computing"