Skip to content

Commit

Permalink
More memory efficient biot_savart_2d (#107)
Browse files Browse the repository at this point in the history
* More memory efficient biot_savart_2d
  • Loading branch information
loganbvh committed Oct 4, 2023
1 parent 9454774 commit 9661fb0
Show file tree
Hide file tree
Showing 10 changed files with 157 additions and 98 deletions.
10 changes: 5 additions & 5 deletions docs/notebooks/field-sources.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@
{
"data": {
"text/html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.2</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Tue Sep 19 16:13:07 2023 PDT</td></tr></table>"
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.3</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Wed Oct 04 10:31:44 2023 PDT</td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
Expand Down Expand Up @@ -142,9 +142,9 @@
"name": "stdout",
"output_type": "stream",
"text": [
"x = 0.7650684631746568\n",
"y = 0.7478751704881408\n",
"z = 0.18189859902136085\n",
"x = 0.3396785462775239\n",
"y = 0.5560346157741703\n",
"z = 0.47978056547366055\n",
"field(x, y, z) = 5.0\n"
]
}
Expand Down
6 changes: 3 additions & 3 deletions docs/notebooks/logo.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"\n",
"import superscreen as sc\n",
"\n",
"SAVE = False"
"SAVE = True"
]
},
{
Expand All @@ -59,8 +59,8 @@
{
"data": {
"text/html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.2</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Tue Sep 19 16:13:38 2023 PDT</td></tr></table>"
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.3</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Wed Oct 04 10:32:27 2023 PDT</td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
Expand Down
20 changes: 10 additions & 10 deletions docs/notebooks/polygons.ipynb

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions docs/notebooks/quickstart.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@
{
"data": {
"text/html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.2</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Tue Sep 19 16:13:03 2023 PDT</td></tr></table>"
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.3</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Wed Oct 04 10:28:14 2023 PDT</td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
Expand Down Expand Up @@ -1105,7 +1105,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"Holes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:01<00:00, 1.92it/s]"
"Holes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 2.55it/s]"
]
},
{
Expand Down Expand Up @@ -1193,7 +1193,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"Holes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 2.14it/s]\n"
"Holes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 2.77it/s]\n"
]
}
],
Expand Down Expand Up @@ -1430,7 +1430,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"Solver iterations: 100%|█████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.72it/s]\n"
"Solver iterations: 100%|█████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.06it/s]\n"
]
}
],
Expand Down
12 changes: 6 additions & 6 deletions docs/notebooks/scanning-squid.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@
{
"data": {
"text/html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.2</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Tue Sep 19 16:14:27 2023 PDT</td></tr></table>"
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.3</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Wed Oct 04 10:29:53 2023 PDT</td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
Expand Down Expand Up @@ -160,10 +160,10 @@
"name": "stderr",
"output_type": "stream",
"text": [
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:01<00:00, 2.77it/s]\n",
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:01<00:00, 2.82it/s]\n",
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:03<00:00, 1.36it/s]\n",
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:03<00:00, 1.52it/s]\n"
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:01<00:00, 2.65it/s]\n",
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:01<00:00, 2.81it/s]\n",
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:03<00:00, 1.41it/s]\n",
"Solver iterations: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:03<00:00, 1.61it/s]\n"
]
}
],
Expand Down
6 changes: 3 additions & 3 deletions docs/notebooks/terminal-currents.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,8 @@
{
"data": {
"text/html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.2</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Tue Sep 19 16:14:52 2023 PDT</td></tr></table>"
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>SuperScreen</td><td>0.10.3</td></tr><tr><td>Numpy</td><td>1.23.3</td></tr><tr><td>Numba</td><td>0.57.0</td></tr><tr><td>SciPy</td><td>1.9.1</td></tr><tr><td>matplotlib</td><td>3.6.0</td></tr><tr><td>IPython</td><td>8.5.0</td></tr><tr><td>Python</td><td>3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00) \n",
"[Clang 13.0.1 ]</td></tr><tr><td>OS</td><td>posix [darwin]</td></tr><tr><td>Number of CPUs</td><td>Physical: 10, Logical: 10</td></tr><tr><td>BLAS Info</td><td>OPENBLAS</td></tr><tr><td colspan='2'>Wed Oct 04 10:29:14 2023 PDT</td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
Expand Down Expand Up @@ -480,7 +480,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"Holes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 2.91it/s]\n"
"Holes: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 3.01it/s]\n"
]
}
],
Expand Down
46 changes: 14 additions & 32 deletions superscreen/distance.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,15 @@
import numpy as np


@numba.njit(fastmath=True, parallel=True)
def pairwise_difference(xA: np.ndarray, xB: np.ndarray):
"""Pairwise different between two 1D arrays.
This is equivalent to ``numpy.subtract.outer(XA, XB)``.
Args:
xA: A shape (n,) array
xB: A shep (m,) array
Returns:
A shape (n, m) array of pairwise differences.
"""
out = np.empty((xA.shape[0], xB.shape[0]), dtype=xA.dtype)
for i in numba.prange(xA.shape[0]):
for j in range(xB.shape[0]):
out[i, j] = xA[i] - xB[j]
return out


@numba.njit(fastmath=True, parallel=True)
def sqeuclidean_distance_2d(XA: np.ndarray, XB: np.ndarray):
"""Squared Euclidean pointwise distance between two 2D arrays."""
out = np.empty((XA.shape[0], XB.shape[0]), dtype=XA.dtype)
for i in numba.prange(XA.shape[0]):
for j in range(XB.shape[0]):
out[i, j] = (XA[i, 0] - XB[j, 0]) ** 2 + (XA[i, 1] - XB[j, 1]) ** 2
dx = XA[i, 0] - XB[j, 0]
dy = XA[i, 1] - XB[j, 1]
out[i, j] = dx * dx + dy * dy
return out


Expand All @@ -38,11 +20,10 @@ def sqeuclidean_distance_3d(XA: np.ndarray, XB: np.ndarray):
out = np.empty((XA.shape[0], XB.shape[0]), dtype=XA.dtype)
for i in numba.prange(XA.shape[0]):
for j in range(XB.shape[0]):
out[i, j] = (
(XA[i, 0] - XB[j, 0]) ** 2
+ (XA[i, 1] - XB[j, 1]) ** 2
+ (XA[i, 2] - XB[j, 2]) ** 2
)
dx = XA[i, 0] - XB[j, 0]
dy = XA[i, 1] - XB[j, 1]
dz = XA[i, 2] - XB[j, 2]
out[i, j] = dx * dx + dy * dy + dz * dz
return out


Expand All @@ -52,7 +33,9 @@ def euclidean_distance_2d(XA: np.ndarray, XB: np.ndarray):
out = np.empty((XA.shape[0], XB.shape[0]), dtype=XA.dtype)
for i in numba.prange(XA.shape[0]):
for j in range(XB.shape[0]):
out[i, j] = np.sqrt((XA[i, 0] - XB[j, 0]) ** 2 + (XA[i, 1] - XB[j, 1]) ** 2)
dx = XA[i, 0] - XB[j, 0]
dy = XA[i, 1] - XB[j, 1]
out[i, j] = np.sqrt(dx * dx + dy * dy)
return out


Expand All @@ -62,11 +45,10 @@ def euclidean_distance_3d(XA: np.ndarray, XB: np.ndarray):
out = np.empty((XA.shape[0], XB.shape[0]), dtype=XA.dtype)
for i in numba.prange(XA.shape[0]):
for j in range(XB.shape[0]):
out[i, j] = np.sqrt(
(XA[i, 0] - XB[j, 0]) ** 2
+ (XA[i, 1] - XB[j, 1]) ** 2
+ (XA[i, 2] - XB[j, 2]) ** 2
)
dx = XA[i, 0] - XB[j, 0]
dy = XA[i, 1] - XB[j, 1]
dz = XA[i, 2] - XB[j, 2]
out[i, j] = np.sqrt(dx * dx + dy * dy + dz * dz)
return out


Expand Down

0 comments on commit 9661fb0

Please sign in to comment.