Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Numpy2 #532

Merged
merged 4 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions discretisedfield/field.py
Original file line number Diff line number Diff line change
Expand Up @@ -331,24 +331,24 @@ def update_field_values(self, value):
>>> mesh = df.Mesh(p1=p1, p2=p2, cell=cell,\
subregions={'s1': sub1, 's2': sub2})
>>> field = df.Field(mesh, nvdim=1, value={'s1': 1, 's2': 1})
>>> (field.array == 1).all()
>>> (field.array == 1).all().item()
True
>>> field = df.Field(mesh, nvdim=1, value={'s1': 1})
Traceback (most recent call last):
...
KeyError: ...
>>> field = df.Field(mesh, nvdim=1, value={'s1': 2, 'default': 1})
>>> (field.array == 1).all()
>>> (field.array == 1).all().item()
False
>>> (field.array == 0).any()
>>> (field.array == 0).any().item()
False
>>> mesh = df.Mesh(p1=p1, p2=p2, cell=cell, subregions={'s': sub1})
>>> field = df.Field(mesh, nvdim=1, value={'s': 1})
Traceback (most recent call last):
...
KeyError: ...
>>> field = df.Field(mesh, nvdim=1, value={'default': 1})
>>> (field.array == 1).all()
>>> (field.array == 1).all().item()
True

.. seealso:: :py:func:`~discretisedfield.Field.array`
Expand Down
2 changes: 1 addition & 1 deletion discretisedfield/html/templates/mesh.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<ul>
{%- set region = mesh.region %}
<li>{% include 'region.jinja2' %}</li>
<li>n = {{ mesh.n|list }}</li>
<li>n = {{ mesh.n.tolist() }}</li>
{%- if mesh.bc %}
<li>bc = {{ mesh.bc }}</li>
{%- endif %}
Expand Down
4 changes: 2 additions & 2 deletions discretisedfield/html/templates/region.jinja2
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<strong>Region</strong>{%if region_name is defined %} <i>{{ region_name }}</i>{% endif %}
<ul>
<li>pmin = {{ region.pmin|list }}</li>
<li>pmax = {{ region.pmax|list }}</li>
<li>pmin = {{ region.pmin.tolist() }}</li>
<li>pmax = {{ region.pmax.tolist() }}</li>
<li>dims = {{ region.dims|list }}</li>
<li>units = {{ region.units|list }}</li>
</ul>
4 changes: 3 additions & 1 deletion discretisedfield/io/hdf5.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ class _FieldIO_HDF5:

def _to_hdf5(self, filename):
"""Save a single field in a new hdf5 file."""
utc_now = datetime.datetime.utcnow().isoformat(timespec="seconds")
utc_now = datetime.datetime.now(datetime.timezone.utc).isoformat(
timespec="seconds"
)
with h5py.File(filename, "w") as f:
f.attrs["ubermag-hdf5-file-version"] = "0.1"
f.attrs["discretisedfield.__version__"] = df.__version__
Expand Down
2 changes: 1 addition & 1 deletion discretisedfield/line.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ def length(self):
4.0

"""
return self.data["r"].iloc[-1]
return self.data["r"].iloc[-1].item()

def __repr__(self):
"""Representation string.
Expand Down
10 changes: 6 additions & 4 deletions discretisedfield/mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,8 @@ def point2index(self, point, /):
# If index is rounded to the out-of-range values.
index = np.clip(index, 0, self.n - 1)

return tuple(index)
# conversion to list is required to convert the datatypes to Python builtins
return tuple(index.tolist())

def region2slices(self, region):
"""Slices of indices that correspond to cells contained in the region.
Expand Down Expand Up @@ -1501,7 +1502,7 @@ def __getattr__(self, attr):
)
if len(attr) > 1 and attr[0] == "d":
with contextlib.suppress(ValueError):
return self.cell[self.region._dim2index(attr[1:])]
return self.cell.tolist()[self.region._dim2index(attr[1:])]
raise AttributeError(f"Object has no attribute {attr}.")

def __dir__(self):
Expand Down Expand Up @@ -1544,7 +1545,7 @@ def dV(self):
8.0

"""
return np.prod(self.cell)
return np.prod(self.cell).item()

def scale(self, factor, reference_point=None, inplace=False):
"""Scale the underlying region and all subregions.
Expand Down Expand Up @@ -2051,7 +2052,8 @@ def slider(self, axis, /, *, multiplier=None, description=None, **kwargs):
)

values = np.arange(slider_min, slider_max + 1e-20, slider_step)
labels = np.around(values / multiplier, decimals=3)
labels = np.around(values / multiplier, decimals=3).tolist()
values = values.tolist()
options = list(zip(labels, values))

# Select middle element for slider value
Expand Down
5 changes: 4 additions & 1 deletion discretisedfield/plotting/hv.py
Original file line number Diff line number Diff line change
Expand Up @@ -733,8 +733,11 @@ def _resample(array, kdims, n):
if n is None:
return array

# .item() is required to convert xarray to Python built-in type;
# without this conversion linspace will fail because it would try to create a
# a new xarray but no dimensions are provided.
vals = {
dim: np.linspace(array[dim].min(), array[dim].max(), ni)
dim: np.linspace(array[dim].min().item(), array[dim].max().item(), ni)
for dim, ni in zip(kdims, n)
}
resampled = array.sel(**vals, method="nearest")
Expand Down
2 changes: 1 addition & 1 deletion discretisedfield/region.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ def volume(self):
100

"""
return np.prod(self.edges)
return np.prod(self.edges).item()

def __repr__(self):
r"""Representation string.
Expand Down
7 changes: 4 additions & 3 deletions discretisedfield/tools/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -657,10 +657,11 @@ def count_bps(field, /, direction):
bp_count = bp_number[1:] - bp_number[:-1]

results = {}
results["bp_number"] = abs(bp_count).sum()
results["bp_number_hh"] = abs(bp_count[bp_count < 0].sum())
results["bp_number_tt"] = bp_count[bp_count > 0].sum()
results["bp_number"] = abs(bp_count).sum().item()
results["bp_number_hh"] = abs(bp_count[bp_count < 0].sum()).item()
results["bp_number_tt"] = bp_count[bp_count > 0].sum().item()

bp_number = bp_number.tolist()
# pattern = list([<local BP_count>, <repetitions>])
pattern = [[bp_number[0], 1]]
for q_val in bp_number[1:]:
Expand Down
6 changes: 4 additions & 2 deletions docs/field-definition.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"import discretisedfield as df\n",
"\n",
"p1 = (-50, -50, -50)\n",
Expand Down Expand Up @@ -170,7 +172,7 @@
}
],
"source": [
"(field.array == 1.23).all()"
"np.array_equiv(field.array, 1.23)"
]
},
{
Expand Down Expand Up @@ -666,7 +668,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
"version": "3.12.4"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
Expand Down
20 changes: 10 additions & 10 deletions docs/mesh-basics.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@
{
"data": {
"text/plain": [
"<generator object Mesh.indices at 0x7f187843d3c0>"
"<generator object Mesh.indices at 0x7f466521ee30>"
]
},
"execution_count": 14,
Expand Down Expand Up @@ -555,7 +555,7 @@
{
"data": {
"text/plain": [
"[1e-08, 3.0000000000000004e-08, 5e-08, 7e-08, 9e-08]"
"array([1.e-08, 3.e-08, 5.e-08, 7.e-08, 9.e-08])"
]
},
"execution_count": 20,
Expand All @@ -564,7 +564,7 @@
}
],
"source": [
"list(mesh.cells.x)"
"mesh.cells.x"
]
},
{
Expand All @@ -575,7 +575,7 @@
{
"data": {
"text/plain": [
"[1.25e-08, 3.75e-08]"
"array([1.25e-08, 3.75e-08])"
]
},
"execution_count": 21,
Expand All @@ -584,7 +584,7 @@
}
],
"source": [
"list(mesh.cells.y)"
"mesh.cells.y"
]
},
{
Expand All @@ -602,7 +602,7 @@
{
"data": {
"text/plain": [
"[0.0, 2e-08, 4e-08, 6.000000000000001e-08, 8e-08, 1e-07]"
"array([0.e+00, 2.e-08, 4.e-08, 6.e-08, 8.e-08, 1.e-07])"
]
},
"execution_count": 22,
Expand All @@ -611,7 +611,7 @@
}
],
"source": [
"list(mesh.vertices.x)"
"mesh.vertices.x"
]
},
{
Expand All @@ -622,7 +622,7 @@
{
"data": {
"text/plain": [
"[0.0, 2.5e-08, 5e-08]"
"array([0.0e+00, 2.5e-08, 5.0e-08])"
]
},
"execution_count": 23,
Expand All @@ -631,7 +631,7 @@
}
],
"source": [
"list(mesh.vertices.y)"
"mesh.vertices.y"
]
},
{
Expand Down Expand Up @@ -1128,7 +1128,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.17"
"version": "3.12.4"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
Expand Down
Loading