Skip to content

Commit

Permalink
Merge pull request #62 from tum-pbs/develop
Browse files Browse the repository at this point in the history
2.1.3
  • Loading branch information
holl- authored May 20, 2022
2 parents 89a6c9b + a5b8b7f commit 5f88cf3
Show file tree
Hide file tree
Showing 17 changed files with 2,507 additions and 309 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
python-version: ['3.6', '3.8', '3.10']

steps:
- name: Checkout 🛎️
Expand Down
712 changes: 712 additions & 0 deletions demos/Learn_to_Throw_Tutorial.ipynb

Large diffs are not rendered by default.

720 changes: 720 additions & 0 deletions demos/Planets_Tutorial.ipynb

Large diffs are not rendered by default.

172 changes: 154 additions & 18 deletions docs/Cookbook.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
"This notebook lists useful code snippets."
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand All @@ -17,13 +20,35 @@
"## Import for NumPy, TensorFlow, Jax, PyTorch"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 1,
"outputs": [],
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'jaxlib'",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mModuleNotFoundError\u001B[0m Traceback (most recent call last)",
"\u001B[1;32m<ipython-input-1-6b564b932e71>\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 1\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mphi\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mflow\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[1;33m*\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 2\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mphi\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtf\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mflow\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[1;33m*\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 3\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mphi\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mjax\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mstax\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mflow\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[1;33m*\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 4\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mphi\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtorch\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mflow\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[1;33m*\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\PhD\\phiflow2.1\\phi\\jax\\__init__.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 9\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mphi\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mmath\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0m_math\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 10\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 11\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0m_jax_backend\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mJaxBackend\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0m_JaxBackend\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 12\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 13\u001B[0m \u001B[0mJAX\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0m_JaxBackend\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\PhD\\phiflow2.1\\phi\\jax\\_jax_backend.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 4\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mtyping\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mList\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mCallable\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 5\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 6\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mjax\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 7\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mjax\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mnumpy\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mjnp\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 8\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mjax\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mscipy\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mscipy\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\ProgramData\\Anaconda3\\envs\\phiflow2\\lib\\site-packages\\jax\\__init__.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 20\u001B[0m \u001B[1;31m# flake8: noqa: F401\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 21\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0mconfig\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mconfig\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 22\u001B[1;33m from .api import (\n\u001B[0m\u001B[0;32m 23\u001B[0m \u001B[0mad\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;31m# TODO(phawkins): update users to avoid this.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 24\u001B[0m \u001B[0margnums_partial\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;31m# TODO(phawkins): update Haiku to not use this.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\ProgramData\\Anaconda3\\envs\\phiflow2\\lib\\site-packages\\jax\\api.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 37\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0mcontextlib\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mcontextmanager\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mExitStack\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 38\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 39\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mcore\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 40\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mlib\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 41\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mlinear_util\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mlu\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\ProgramData\\Anaconda3\\envs\\phiflow2\\lib\\site-packages\\jax\\core.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 29\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mnumpy\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mnp\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 30\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 31\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mdtypes\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 32\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0mconfig\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mFLAGS\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mconfig\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 33\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mlinear_util\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mlu\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\ProgramData\\Anaconda3\\envs\\phiflow2\\lib\\site-packages\\jax\\dtypes.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 30\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0m_src\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mutil\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 31\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0mconfig\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mflags\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 32\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0mlib\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mxla_client\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 33\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 34\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[1;33m.\u001B[0m\u001B[0m_src\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mtraceback_util\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;32mC:\\ProgramData\\Anaconda3\\envs\\phiflow2\\lib\\site-packages\\jax\\lib\\__init__.py\u001B[0m in \u001B[0;36m<module>\u001B[1;34m\u001B[0m\n\u001B[0;32m 21\u001B[0m ]\n\u001B[0;32m 22\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 23\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mjaxlib\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 24\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 25\u001B[0m \u001B[1;31m# Must be kept in sync with the jaxlib version in build/test-requirements.txt\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n",
"\u001B[1;31mModuleNotFoundError\u001B[0m: No module named 'jaxlib'"
]
}
],
"source": [
"from phi.flow import *\n",
"from phi.tf.flow import *\n",
Expand All @@ -43,7 +68,10 @@
"## Select GPU or CPU"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand All @@ -62,7 +90,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"outputs": [],
"source": [
"backend.default_backend().list_devices('CPU')"
Expand Down Expand Up @@ -94,12 +122,15 @@
"## Use 64 bit FP precision"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"outputs": [],
"source": [
"math.set_global_precision(32) # single precision is the default\n",
Expand All @@ -115,13 +146,88 @@
}
}
},
{
"cell_type": "markdown",
"source": [
"## Sample Random Values"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 5,
"outputs": [
{
"data": {
"text/plain": "\u001B[92m(examplesᵇ=10, vectorᶜ=x,y)\u001B[0m \u001B[93mfloat32\u001B[0m \u001B[94m0.491 ± 0.257\u001B[0m \u001B[37m(1e-01...9e-01)\u001B[0m"
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = math.random_normal(batch(examples=10)) * .1 # batch of scalar values\n",
"data = math.random_uniform(batch(examples=10), channel(vector='x,y')) # batch of vectors\n",
"data"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Slice a Tensor"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 6,
"outputs": [
{
"data": {
"text/plain": "(x=\u001B[94m0.14696788787841797\u001B[0m, y=\u001B[94m0.18162620067596436\u001B[0m)"
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.examples[0]"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Plot a `Tensor`"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand All @@ -146,7 +252,10 @@
"## Convert a `Tensor` to NumPy"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand Down Expand Up @@ -211,7 +320,10 @@
"## Construct a `CenteredGrid`"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand Down Expand Up @@ -264,7 +376,10 @@
"## Construct a `StaggeredGrid`"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand Down Expand Up @@ -330,7 +445,10 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
"collapsed": true,
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
Expand All @@ -353,7 +471,10 @@
"## BFGS Optimization"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand All @@ -380,7 +501,10 @@
"## Linear Solve"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand All @@ -407,7 +531,10 @@
"## Sparse Matrix Construction"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand All @@ -434,7 +561,10 @@
"## Sampling a Function"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand Down Expand Up @@ -514,7 +644,10 @@
"## Neural Network Training"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand Down Expand Up @@ -549,7 +682,10 @@
"## Parameter Count"
],
"metadata": {
"collapsed": false
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
Expand Down
2 changes: 1 addition & 1 deletion docs/Geometry.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The module [phi.geom](phi/geom) integrates geometric shapes and supports differe
The class [`Geometry`](phi/geom/#phi.geom.Geometry) serves as a base for all geometry objects, such as boxes or spheres.

All properties of `Geometry` support the use of batch, instance and spatial dimensions.
The corresponding values take the type of [Φ-tensors](./Math.md).
The corresponding values take the type of [Φ-tensors](./Math.html).
This allows a single `Geometry` object to describe a collection of shapes with varying properties.

Important properties:
Expand Down
Loading

0 comments on commit 5f88cf3

Please sign in to comment.