diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e95524960..d235ce52c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -32,7 +32,7 @@ jobs: - name: Build wheels uses: pypa/cibuildwheel@v2.21.2 env: - CIBW_SKIP: pp37-* pp38-* pp39-* pp31*-macosx* + CIBW_SKIP: pp37-* pp38-* pp39-* pp31*-macosx* *-manylinux_i686 - uses: actions/upload-artifact@v4 with: name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} @@ -56,4 +56,4 @@ jobs: path: dist merge-multiple: true - name: Publish package distributions to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 \ No newline at end of file + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/phoebe/backend/universe.py b/phoebe/backend/universe.py index 20a10e12e..5760561c0 100644 --- a/phoebe/backend/universe.py +++ b/phoebe/backend/universe.py @@ -2955,8 +2955,8 @@ def split_mesh(mesh, q, pot): # a bit of array reshaping magic, but it works triangind_primsec_f = mesh['triangles'][triangind_primsec].flatten().copy() triangind_secprim_f = mesh['triangles'][triangind_secprim].flatten().copy() - indices_prim = np.where(np.in1d(triangind_primsec_f, vertind_primsec))[0] - indices_sec = np.where(np.in1d(triangind_secprim_f, vertind_secprim))[0] + indices_prim = np.where(np.isin(triangind_primsec_f, vertind_primsec))[0] + indices_sec = np.where(np.isin(triangind_secprim_f, vertind_secprim))[0] triangind_primsec_f[indices_prim] = new_triangle_indices_prim triangind_secprim_f[indices_sec] = new_triangle_indices_sec diff --git a/phoebe/dependencies/distl/distl.py b/phoebe/dependencies/distl/distl.py index 1281efd76..ad65bcba7 100644 --- a/phoebe/dependencies/distl/distl.py +++ b/phoebe/dependencies/distl/distl.py @@ -4714,7 +4714,7 @@ def dist_constructor_args(self): # TODO: do we need to remove duplicates? x.sort() if self.math == '__and__': - pdf = _np.product([d.pdf(x) for d in self.dists], axis=0) + pdf = _np.prod([d.pdf(x) for d in self.dists], axis=0) # unfortunately we'll need to integrate to get the cdf... we'll do that later cdf = None elif self.math == '__or__': diff --git a/phoebe/dependencies/ligeor/models/polyfit.py b/phoebe/dependencies/ligeor/models/polyfit.py index 25e32ee80..0cf214c9a 100644 --- a/phoebe/dependencies/ligeor/models/polyfit.py +++ b/phoebe/dependencies/ligeor/models/polyfit.py @@ -1,7 +1,7 @@ import numpy as np from operator import itemgetter from itertools import groupby -from numpy.core.fromnumeric import mean +from numpy import mean from scipy.optimize import minimize from phoebe.dependencies.ligeor.utils.lcutils import * from phoebe.dependencies.ligeor.models import Model diff --git a/phoebe/frontend/io.py b/phoebe/frontend/io.py index 06da8d0a9..72d45eb4a 100644 --- a/phoebe/frontend/io.py +++ b/phoebe/frontend/io.py @@ -465,8 +465,14 @@ def load_legacy(filename, add_compute_legacy=True, add_compute_phoebe=True, raise TypeError("filename must be string or file object, got {}".format(type(filename))) # load the phoebe file - params = np.loadtxt(filename, dtype='str', delimiter='=', - converters={0: lambda s: s.strip(), 1: lambda s: s.strip()}) + params = np.genfromtxt( + filename, + dtype='str', + delimiter='=', + comments='#', + filling_values='', + autostrip=True + ) morphology = params[:,1][list(params[:,0]).index('phoebe_model')] diff --git a/phoebe/parameters/parameters.py b/phoebe/parameters/parameters.py index dfb195dc3..c9970d89a 100644 --- a/phoebe/parameters/parameters.py +++ b/phoebe/parameters/parameters.py @@ -11948,9 +11948,17 @@ def get_values(vars, safe_label=True, string_safe_arrays=False, use_distribution def _single_value(quantity, string_safe_arrays=False): if isinstance(quantity, u.Quantity): if self.in_solar_units: - v = np.float64(u.to_solar(quantity).value) + v = u.to_solar(quantity).value else: - v = np.float64(quantity.si.value) + v = quantity.si.value + + if isinstance(v, np.ndarray): + if v.size == 1: + v = np.float64(v[0]) # Convert single-element arrays to scalar avoid DeprecationWarning: Conversion of an array with ndim > 0 to a scalar + else: + v = np.float64(v) + else: + v = np.float64(v) if isinstance(v, np.ndarray) and string_safe_arrays: v = v.tolist() diff --git a/pyproject.toml b/pyproject.toml index 80a7d2fae..1f47c4c2e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,7 +58,7 @@ classifiers = [ "Topic :: Software Development :: User Interfaces" ] dependencies = [ - "numpy < 2.0.0", + "numpy", "scipy", "astropy", "pytest", @@ -79,7 +79,7 @@ repository = "https://github.com/phoebe-project/phoebe2" documentation = "http://phoebe-project.org/docs" [build-system] -requires = ["setuptools", "numpy < 2.0.0", "wheel"] +requires = ["setuptools", "numpy", "wheel"] build-backend = "setuptools.build_meta" [tool.setuptools] diff --git a/tests/tests/test_legacy_parser/test_legacy_parser.py b/tests/tests/test_legacy_parser/test_legacy_parser.py index 30cf5b4cf..f7c66dce5 100644 --- a/tests/tests/test_legacy_parser/test_legacy_parser.py +++ b/tests/tests/test_legacy_parser/test_legacy_parser.py @@ -20,9 +20,15 @@ def _legacy_test(filename='default.phoebe', verbose=True): # locate file dir = os.path.dirname(os.path.realpath(__file__)) # load in phoebe parameter file - params = np.loadtxt( - os.path.join(dir, filename), dtype='str', delimiter='=', - converters={0: lambda s: s.strip(), 1: lambda s: s.strip()}) + params = np.genfromtxt( + os.path.join(dir, filename), + dtype='str', + delimiter='=', + comments='#', + filling_values='', + autostrip=True + ) + lcno = int(params[:,1][list(params[:,0]).index('phoebe_lcno')]) rvno = int(params[:,1][list(params[:,0]).index('phoebe_rvno')])