Blob Blame History Raw
From 1ab5e72a95f2e05e3075d0dc5b6ba80531358988 Mon Sep 17 00:00:00 2001
From: David Bold <dave@ipp.mpg.de>
Date: Thu, 23 Mar 2023 15:09:38 +0100
Subject: [PATCH 1/4] Add basic xarray support

Allows to write DataArrays and preserve their dimensions
---
 boututils/datafile.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/boututils/datafile.py b/boututils/datafile.py
index b14cf1e..0072c88 100644
--- a/boututils/datafile.py
+++ b/boututils/datafile.py
@@ -511,6 +511,8 @@ def _bout_dimensions_from_var(self, data):
         try:
             bout_type = data.attributes["bout_type"]
         except AttributeError:
+            if hasattr(data, "dims"):
+                return data.dims
             defdims_list = [
                 (),
                 ("t",),
@@ -542,6 +544,9 @@ def write(self, name, data, info=False):
         # Get the variable type
         t = type(data).__name__
 
+        if t == "DataArray":
+            t = data.dtype.str
+
         if t == "NoneType":
             print("DataFile: None passed as data to write. Ignoring")
             return

From 0a34513731c38ac7e934abc174d75e7602f3a1f6 Mon Sep 17 00:00:00 2001
From: David Bold <dave@ipp.mpg.de>
Date: Thu, 23 Mar 2023 15:15:53 +0100
Subject: [PATCH 2/4] CI: Update flake8 to github repo

---
 .pre-commit-config.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 0b37abe..157d346 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,7 +6,7 @@ repos:
     hooks:
       - id: black
 
-  - repo: https://gitlab.com/pycqa/flake8
+  - repo: https://github.com/pycqa/flake8
     rev: 3.9.2
     hooks:
       - id: flake8

From bf2335d80c66df19c7c43492a0a2fd7b8bfac4c7 Mon Sep 17 00:00:00 2001
From: David Bold <dave@ipp.mpg.de>
Date: Thu, 23 Mar 2023 15:19:59 +0100
Subject: [PATCH 3/4] Auto update pre-commit-config

---
 .pre-commit-config.yaml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 157d346..96c0be0 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,17 +2,17 @@
 #        pre-commit autoupdate
 repos:
   - repo: https://github.com/psf/black
-    rev: 22.3.0
+    rev: 23.1.0
     hooks:
       - id: black
 
   - repo: https://github.com/pycqa/flake8
-    rev: 3.9.2
+    rev: 6.0.0
     hooks:
       - id: flake8
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.1.0
+    rev: v4.4.0
     hooks:
       - id: trailing-whitespace
       - id: end-of-file-fixer
@@ -24,6 +24,6 @@ repos:
         args: [--prose-wrap=always, --print-width=88]
 
   - repo: https://github.com/PyCQA/isort
-    rev: 5.10.1
+    rev: 5.12.0
     hooks:
       - id: isort

From 7ba5147b6256a5c021f2a3b1fc6be8270d69ff99 Mon Sep 17 00:00:00 2001
From: David Bold <dave@ipp.mpg.de>
Date: Thu, 23 Mar 2023 15:20:08 +0100
Subject: [PATCH 4/4] black format

---
 boututils/View3D.py          | 3 ---
 boututils/analyse_equil_2.py | 2 --
 boututils/anim.py            | 1 -
 boututils/boutgrid.py        | 1 -
 boututils/closest_line.py    | 1 -
 boututils/crosslines.py      | 1 -
 boututils/datafile.py        | 3 ---
 boututils/efit_analyzer.py   | 4 ----
 boututils/fft_integrate.py   | 1 -
 boututils/int_func.py        | 1 -
 boututils/mode_structure.py  | 3 ---
 boututils/options.py         | 1 -
 boututils/plotpolslice.py    | 1 -
 boututils/radial_grid.py     | 1 -
 boututils/read_geqdsk.py     | 1 -
 boututils/showdata.py        | 1 -
 16 files changed, 26 deletions(-)

diff --git a/boututils/View3D.py b/boututils/View3D.py
index 4028da6..f9aa417 100644
--- a/boututils/View3D.py
+++ b/boututils/View3D.py
@@ -213,7 +213,6 @@ def View3D(g, path=None, gb=None):
     #  q=i surfaces
 
     for i in range(np.shape(x)[0]):
-
         s = mlab.pipeline.streamline(field)
         s.streamline_type = "line"
         # s.seed.widget = s.seed.widget_list[0]
@@ -328,7 +327,6 @@ def View3D(g, path=None, gb=None):
 
 
 def magnetic_field(g, X, Y, Z, rmin, rmax, zmin, zmax, Br, Bz, Btrz):
-
     rho = np.sqrt(X**2 + Y**2)
     phi = np.arctan2(Y, X)
 
@@ -371,7 +369,6 @@ def magnetic_field(g, X, Y, Z, rmin, rmax, zmin, zmax, Br, Bz, Btrz):
 
 
 def psi_field(g, X, Y, Z, rmin, rmax, zmin, zmax):
-
     rho = np.sqrt(X**2 + Y**2)
 
     psi = np.zeros(np.shape(X))
diff --git a/boututils/analyse_equil_2.py b/boututils/analyse_equil_2.py
index 4014679..5e43d03 100644
--- a/boututils/analyse_equil_2.py
+++ b/boututils/analyse_equil_2.py
@@ -209,7 +209,6 @@ def analyse_equil(F, R, Z):
     print("")
 
     if n_xpoint > 0:
-
         # Find the primary separatrix
 
         # First remove non-monotonic separatrices
@@ -265,7 +264,6 @@ def analyse_equil(F, R, Z):
         inner_sep = 0
 
     else:
-
         # No x-points. Pick mid-point in f
 
         xpt_f = 0.5 * (numpy.max(F) + numpy.min(F))
diff --git a/boututils/anim.py b/boututils/anim.py
index 88244f0..679c2d4 100644
--- a/boututils/anim.py
+++ b/boututils/anim.py
@@ -65,7 +65,6 @@ def anim(s, d, *args, **kwargs):
 
 
 if __name__ == "__main__":
-
     path = "../../../examples/elm-pb/data"
 
     data = collect("P", path=path)
diff --git a/boututils/boutgrid.py b/boututils/boutgrid.py
index 1dcb6ca..6e62ad9 100644
--- a/boututils/boutgrid.py
+++ b/boututils/boutgrid.py
@@ -28,7 +28,6 @@ def aligned_points(grid, nz=1, period=1.0, maxshift=0.4):
 
     start = 0
     for y in range(ny):
-
         end = start + nx * nz
 
         phi = zshift[:, y] + phi0[:, None]
diff --git a/boututils/closest_line.py b/boututils/closest_line.py
index 5d6f136..7f627d5 100644
--- a/boututils/closest_line.py
+++ b/boututils/closest_line.py
@@ -5,7 +5,6 @@
 
 # Find the closest contour line to a given point
 def closest_line(n, x, y, ri, zi, mind=None):
-
     mind = numpy.min((x[0] - ri) ** 2 + (y[0] - zi) ** 2)
     ind = 0
 
diff --git a/boututils/crosslines.py b/boututils/crosslines.py
index aed6186..ae32251 100644
--- a/boututils/crosslines.py
+++ b/boututils/crosslines.py
@@ -133,7 +133,6 @@ def meshgrid_as_strided(x, y, mask=None):
     nans_[:, :] = np.isnan(ua)
 
     if not np.ma.any(nans):
-
         # remove duplicate cases where intersection happens on an endpoint
         #        ignore[np.ma.where((ua[:, :-1] == 1) & (ua[:, 1:] == 0))] = True
         #        ignore[np.ma.where((ub[:-1, :] == 1) & (ub[1:, :] == 0))] = True
diff --git a/boututils/datafile.py b/boututils/datafile.py
index 0072c88..2e3d783 100644
--- a/boututils/datafile.py
+++ b/boututils/datafile.py
@@ -535,7 +535,6 @@ def _bout_dimensions_from_var(self, data):
         return BoutArray.dims_from_type(bout_type)
 
     def write(self, name, data, info=False):
-
         if not self.writeable:
             raise Exception("File not writeable. Open with write=True keyword")
 
@@ -914,7 +913,6 @@ def size(self, varname):
         return var.shape
 
     def write(self, name, data, info=False):
-
         if not self.writeable:
             raise Exception("File not writeable. Open with write=True keyword")
 
@@ -977,7 +975,6 @@ def list_file_attributes(self):
         return self.handle.attrs.keys()
 
     def attributes(self, varname):
-
         try:
             return self._attributes_cache[varname]
         except KeyError:
diff --git a/boututils/efit_analyzer.py b/boututils/efit_analyzer.py
index 19a4b58..6433653 100644
--- a/boututils/efit_analyzer.py
+++ b/boututils/efit_analyzer.py
@@ -31,7 +31,6 @@
 
 
 def View2D(g, option=0):
-
     # plot and check the field
     fig = figure(num=2, figsize=(16, 6))
     # fig.suptitle('Efit Analysis', fontsize=20)
@@ -350,7 +349,6 @@ def View2D(g, option=0):
 
 
 def surface(cs, i, f, opt_ri, opt_zi, style, iplot=0):
-
     #  contour_lines( F, np.arange(nx).astype(float), np.arange(ny).astype(float),
     #  levels=[start_f])
     #    cs=contour( g.r, g.z, g.psi,  levels=[f])
@@ -400,7 +398,6 @@ def surface(cs, i, f, opt_ri, opt_zi, style, iplot=0):
     #    y=yy
     #
     if iplot == 0:
-
         # plot the start_f line
         zc = cs.collections[i]
         setp(zc, linewidth=4, linestyle=style[i])
@@ -417,7 +414,6 @@ def surface(cs, i, f, opt_ri, opt_zi, style, iplot=0):
 
 
 if __name__ == "__main__":
-
     path = "../../tokamak_grids/pyGridGen/"
 
     g = read_geqdsk(path + "g118898.03400")
diff --git a/boututils/fft_integrate.py b/boututils/fft_integrate.py
index 2b53f29..d693891 100644
--- a/boututils/fft_integrate.py
+++ b/boututils/fft_integrate.py
@@ -39,7 +39,6 @@ def fft_integrate(y, loop=None):
 
 
 def test_integrate():
-
     n = 10
     dx = 2.0 * np.pi / np.float(n)
     x = dx * np.arange(n)
diff --git a/boututils/int_func.py b/boututils/int_func.py
index 8eb75c9..6c0e436 100644
--- a/boututils/int_func.py
+++ b/boututils/int_func.py
@@ -37,7 +37,6 @@ def int_func(xin, fin=None, simple=None):
             g[i] = g[i - 1] + 0.5 * (x[i] - x[i - 1]) * (f[i] + f[i - 1])
 
     else:
-
         n2 = numpy.int(old_div(n, 2))
 
         g[0] = 0.0
diff --git a/boututils/mode_structure.py b/boututils/mode_structure.py
index 19dd69e..e2d50dc 100644
--- a/boututils/mode_structure.py
+++ b/boututils/mode_structure.py
@@ -19,7 +19,6 @@
 
 # interpolates a 1D periodic function
 def zinterp(v, zind):
-
     v = numpy.ravel(v)
 
     nz = numpy.size(v)
@@ -70,7 +69,6 @@ def mode_structure(
     pmodes=None,
     _extra=None,
 ):
-
     # ON_ERROR, 2
     #
     # period = 1 ; default = full torus
@@ -362,7 +360,6 @@ def mode_structure(
         #
         #
         if subset is not None:
-
             # get number of modes larger than 5% of the maximum
             count = numpy.size(numpy.where(fmax > 0.10 * numpy.max(fmax)))
 
diff --git a/boututils/options.py b/boututils/options.py
index b3bbc8c..2487315 100644
--- a/boututils/options.py
+++ b/boututils/options.py
@@ -57,7 +57,6 @@ class BOUTOptions(object):
     """
 
     def __init__(self, inp_path=None):
-
         self._sections = ["root"]
 
         for section in self._sections:
diff --git a/boututils/plotpolslice.py b/boututils/plotpolslice.py
index 4e96a69..cfd9750 100644
--- a/boututils/plotpolslice.py
+++ b/boututils/plotpolslice.py
@@ -126,7 +126,6 @@ def plotpolslice(var3d, gridfile, period=1, zangle=0.0, rz=1, fig=0):
         z[x, ypos] = zxy[x, ny - 1]
 
     if fig == 1:
-
         f = mlab.figure(size=(600, 600))
         # Tell visual to use this as the viewer.
         visual.set_viewer(f)
diff --git a/boututils/radial_grid.py b/boututils/radial_grid.py
index db96f54..6dbeb3d 100644
--- a/boututils/radial_grid.py
+++ b/boututils/radial_grid.py
@@ -16,7 +16,6 @@
 def radial_grid(
     n, pin, pout, include_in, include_out, seps, sep_factor, in_dp=None, out_dp=None
 ):
-
     if n == 1:
         return [0.5 * (pin + pout)]
 
diff --git a/boututils/read_geqdsk.py b/boututils/read_geqdsk.py
index 2172cb6..95f7c7a 100644
--- a/boututils/read_geqdsk.py
+++ b/boututils/read_geqdsk.py
@@ -7,7 +7,6 @@
 
 
 def read_geqdsk(file):
-
     data = Geqdsk()
 
     data.openFile(file)
diff --git a/boututils/showdata.py b/boututils/showdata.py
index 6163bc1..350cb65 100644
--- a/boututils/showdata.py
+++ b/boututils/showdata.py
@@ -486,7 +486,6 @@ def showdata(
     clevels = []
 
     for i in range(0, Nvar):
-
         dummymax.append([])
         dummymin.append([])
         for j in range(0, Nlines[i]):