From ac76641b6d952aa509febaa4adc7e695e7a5dac9 Mon Sep 17 00:00:00 2001 From: Rory Conlin Date: Tue, 12 Nov 2024 12:46:19 -0500 Subject: [PATCH 01/10] Clean up TODOs and FIXMEs --- desc/backend.py | 2 +- desc/basis.py | 1 - desc/coils.py | 2 +- desc/compute/_geometry.py | 6 +++--- desc/equilibrium/equilibrium.py | 3 --- desc/equilibrium/initial_guess.py | 2 +- desc/equilibrium/utils.py | 2 +- desc/grid.py | 1 - desc/input_reader.py | 4 ++-- desc/magnetic_fields/_dommaschk.py | 2 +- desc/nestor.py | 10 ++++------ desc/objectives/linear_objectives.py | 4 ++-- desc/optimize/_scipy_wrappers.py | 6 +++--- desc/optimize/aug_lagrangian.py | 4 ++-- desc/optimize/aug_lagrangian_ls.py | 4 ++-- desc/optimize/fmin_scalar.py | 2 +- desc/optimize/least_squares.py | 2 +- desc/optimize/optimizer.py | 3 +-- desc/perturbations.py | 15 +++++++-------- desc/vmec.py | 4 +--- desc/vmec_utils.py | 2 +- tests/test_bootstrap.py | 2 +- 22 files changed, 36 insertions(+), 47 deletions(-) diff --git a/desc/backend.py b/desc/backend.py index 17f866871b..9ecb95460d 100644 --- a/desc/backend.py +++ b/desc/backend.py @@ -65,7 +65,7 @@ ) ) -if use_jax: # noqa: C901 - FIXME: simplify this, define globally and then assign? +if use_jax: # noqa: C901 from jax import custom_jvp, jit, vmap imap = jax.lax.map diff --git a/desc/basis.py b/desc/basis.py index 6dc88c5e66..ed551f6ebd 100644 --- a/desc/basis.py +++ b/desc/basis.py @@ -1364,7 +1364,6 @@ def polyval_vec(p, x, prec=None): def _polyval_exact(p, x, prec): p = np.atleast_2d(p) x = np.atleast_1d(x).flatten() - # TODO: possibly multithread this bit mpmath.mp.dps = prec y = np.array([np.asarray(mpmath.polyval(list(pi), x)) for pi in p]) return y.astype(float) diff --git a/desc/coils.py b/desc/coils.py index ea0da348a5..b25246facb 100644 --- a/desc/coils.py +++ b/desc/coils.py @@ -2697,7 +2697,7 @@ def insert(self, i, new_item): self._coils.insert(i, new_item) @classmethod - def from_makegrid_coilfile( # noqa: C901 - FIXME: simplify this + def from_makegrid_coilfile( # noqa: C901 cls, coil_file, method="cubic", ignore_groups=False, check_intersection=True ): """Create a MixedCoilSet of SplineXYZCoils from a MAKEGRID coil txtfile. diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 662413501b..59c07d5a75 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -194,7 +194,7 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): data=["Z", "n_rho", "e_theta|r,p", "rho"], parameterization=["desc.geometry.surface.FourierRZToroidalSurface"], resolution_requirement="rt", # just need max(rho) near 1 - # FIXME: Add source grid requirement once omega is nonzero. + # TODO: Add source grid requirement once omega is nonzero. ) def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): # Denote any vector v = [vᴿ, v^ϕ, vᶻ] with a tuple of its contravariant components. @@ -213,7 +213,7 @@ def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwarg line_integrals( transforms["grid"], data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), - # FIXME: Works currently for omega = zero, but for nonzero omega + # TODO: Works currently for omega = zero, but for nonzero omega # we need to integrate over theta at constant phi. # Should be simple once we have coordinate mapping and source grid # logic from GitHub pull request #1024. @@ -449,7 +449,7 @@ def _perimeter_of_z(params, transforms, profiles, data, **kwargs): line_integrals( transforms["grid"], safenorm(data["e_theta|r,p"], axis=-1), - # FIXME: Works currently for omega = zero, but for nonzero omega + # TODO: Works currently for omega = zero, but for nonzero omega # we need to integrate over theta at constant phi. # Should be simple once we have coordinate mapping and source grid # logic from GitHub pull request #1024. diff --git a/desc/equilibrium/equilibrium.py b/desc/equilibrium/equilibrium.py index db4d506607..4f5600dddf 100644 --- a/desc/equilibrium/equilibrium.py +++ b/desc/equilibrium/equilibrium.py @@ -1443,7 +1443,6 @@ def axis(self, new): @property def spectral_indexing(self): """str: Type of indexing used for the spectral basis.""" - # TODO: allow this to change? return self._spectral_indexing @property @@ -1972,8 +1971,6 @@ def from_near_axis( raise ValueError("Input must be a pyQSC or pyQIC solution.") from e rho, _ = special.js_roots(L, 2, 2) - # TODO: could make this an OCS grid to improve fitting, need to figure out - # how concentric grids work with QSC grid = LinearGrid(rho=rho, theta=ntheta, zeta=na_eq.phi, NFP=na_eq.nfp) basis_R = FourierZernikeBasis( L=L, diff --git a/desc/equilibrium/initial_guess.py b/desc/equilibrium/initial_guess.py index f2f39915f5..7d9a91404d 100644 --- a/desc/equilibrium/initial_guess.py +++ b/desc/equilibrium/initial_guess.py @@ -20,7 +20,7 @@ from desc.utils import copy_coeffs, warnif -def set_initial_guess(eq, *args, ensure_nested=True): # noqa: C901 - FIXME: simplify +def set_initial_guess(eq, *args, ensure_nested=True): # noqa: C901 """Set the initial guess for the flux surfaces, eg R_lmn, Z_lmn, L_lmn. Parameters diff --git a/desc/equilibrium/utils.py b/desc/equilibrium/utils.py index 19169cb5c0..fe4eb6b402 100644 --- a/desc/equilibrium/utils.py +++ b/desc/equilibrium/utils.py @@ -160,7 +160,7 @@ def parse_axis(axis, NFP=1, sym=True, surface=None): NFP=NFP, ) elif isinstance(surface, ZernikeRZToroidalSection): - # FIXME: include m=0 l!=0 modes + # TODO: include m=0 l!=0 modes axis = FourierRZCurve( R_n=surface.R_lmn[ np.where( diff --git a/desc/grid.py b/desc/grid.py index 2d71d861cb..ba0c8ec1a7 100644 --- a/desc/grid.py +++ b/desc/grid.py @@ -22,7 +22,6 @@ class _Grid(IOAble, ABC): """Base class for collocation grids.""" - # TODO: calculate weights automatically using voronoi / delaunay triangulation _io_attrs_ = [ "_L", "_M", diff --git a/desc/input_reader.py b/desc/input_reader.py index 784411b198..01f0b5b3f0 100644 --- a/desc/input_reader.py +++ b/desc/input_reader.py @@ -137,7 +137,7 @@ def _get_parser_(self): """ return get_parser() - def parse_inputs(self, fname=None): # noqa: C901 - FIXME: simplify this + def parse_inputs(self, fname=None): # noqa: C901 """Read input from DESC input file; converts from VMEC input if necessary. Parameters @@ -970,7 +970,7 @@ def vmec_to_desc_input(vmec_fname, desc_fname): InputReader.write_desc_input(desc_fname, inputs, header) @staticmethod - def parse_vmec_inputs(vmec_fname, threshold=0): # noqa: C901 - FIXME: simplify this + def parse_vmec_inputs(vmec_fname, threshold=0): # noqa: C901 """Parse a VMEC input file into a dictionary of DESC inputs. Parameters diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index e2f47e2fec..17eab8800a 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -80,7 +80,7 @@ def __init__( super().__init__(dommaschk_potential, params) @classmethod - def fit_magnetic_field( # noqa: C901 - FIXME - simplify + def fit_magnetic_field( # noqa: C901 cls, field, coords, max_m, max_l, sym=False, verbose=1, NFP=1 ): """Fit a vacuum magnetic field with a Dommaschk Potential field. diff --git a/desc/nestor.py b/desc/nestor.py index 72d7282e80..a0c723b64b 100644 --- a/desc/nestor.py +++ b/desc/nestor.py @@ -861,14 +861,14 @@ def compute_scalar_magnetic_potential( [g_mnmn[:, :, : mf + 1, : nf + 1].imag, g_mnmn[:, :, : mf + 1, -nf:].imag], axis=-1, ) - # scale amatrix by (2 pi)^2 (#TODO: why ?) copied from fortran + # scale amatrix by (2 pi)^2, copied from fortran amatrix_4d *= (2.0 * jnp.pi) ** 2 m, n = jnp.meshgrid(jnp.arange(mf + 1), jnp.arange(2 * nf + 1), indexing="ij") - # zero out (m=0, n<0, m', n') modes for all m', n' (#TODO: why ?) from fortran + # zero out (m=0, n<0, m', n') modes for all m', n', from fortran amatrix_4d = jnp.where( jnp.logical_and(m == 0, n > nf)[:, :, jnp.newaxis, jnp.newaxis], 0, amatrix_4d ) - # add diagonal terms (#TODO: why 4*pi^3 instead of 1 ?) copied from fortran + # add diagonal terms, copied from fortran amatrix_4d = put( amatrix_4d, Index[m, n, m, n], amatrix_4d[m, n, m, n] + 4.0 * jnp.pi**3 ) @@ -877,7 +877,7 @@ def compute_scalar_magnetic_potential( # combine with contribution from analytic integral; available here in I_mn bvec = h_mn + I_mn - # final fixup from fouri: zero out (m=0, n<0) components (#TODO: why ?) from fortran + # final fixup from fouri: zero out (m=0, n<0) components, from fortran bvec = put(bvec, Index[0, nf + 1 :], 0.0).flatten() phi_mn = jnp.linalg.solve(amatrix, bvec).reshape([mf + 1, 2 * nf + 1]) @@ -945,8 +945,6 @@ def compute_vacuum_magnetic_field( Btot["B_theta"] = Btot["Bpot_theta"] + Btot["Bex_theta"] Btot["B_zeta"] = Btot["Bpot_zeta"] + Btot["Bex_zeta"] - # TODO: for now, simply copied over from fortran code; have to understand what is - # actually done here! h_tz = NFP * jacobian["g_tz"] h_zz = jacobian["g_zz"] * NFP**2 det = 1.0 / (jacobian["g_tt"] * h_zz - h_tz**2) diff --git a/desc/objectives/linear_objectives.py b/desc/objectives/linear_objectives.py index 6f302f2df0..184b004ae5 100644 --- a/desc/objectives/linear_objectives.py +++ b/desc/objectives/linear_objectives.py @@ -45,8 +45,8 @@ def update_target(self, thing): def _parse_target_from_user( self, target_from_user, default_target, default_bounds, idx ): - # FIXME: add logic here to deal with `target_from_user` as a pytree? - # FIXME: does this actually need idx? + # TODO: add logic here to deal with `target_from_user` as a pytree? + # TODO: does this actually need idx? if target_from_user is None: target = default_target bounds = default_bounds diff --git a/desc/optimize/_scipy_wrappers.py b/desc/optimize/_scipy_wrappers.py index d62cca4ca0..c4060a6d08 100644 --- a/desc/optimize/_scipy_wrappers.py +++ b/desc/optimize/_scipy_wrappers.py @@ -52,7 +52,7 @@ hessian=[False, False, True, True, True, True, True], GPU=False, ) -def _optimize_scipy_minimize( # noqa: C901 - FIXME: simplify this +def _optimize_scipy_minimize( # noqa: C901 objective, constraint, x0, method, x_scale, verbose, stoptol, options=None ): """Wrapper for scipy.optimize.minimize. @@ -306,7 +306,7 @@ def callback(xs): hessian=False, GPU=False, ) -def _optimize_scipy_least_squares( # noqa: C901 - FIXME: simplify this +def _optimize_scipy_least_squares( # noqa: C901 objective, constraint, x0, method, x_scale, verbose, stoptol, options=None ): """Wrapper for scipy.optimize.least_squares. @@ -506,7 +506,7 @@ def callback(x1): hessian=[True, False], GPU=False, ) -def _optimize_scipy_constrained( # noqa: C901 - FIXME: simplify this +def _optimize_scipy_constrained( # noqa: C901 objective, constraint, x0, method, x_scale, verbose, stoptol, options=None ): """Wrapper for scipy.optimize.minimize. diff --git a/desc/optimize/aug_lagrangian.py b/desc/optimize/aug_lagrangian.py index a2601032ad..0adc90c27a 100644 --- a/desc/optimize/aug_lagrangian.py +++ b/desc/optimize/aug_lagrangian.py @@ -28,7 +28,7 @@ ) -def fmin_auglag( # noqa: C901 - FIXME: simplify this +def fmin_auglag( # noqa: C901 fun, x0, grad, @@ -539,7 +539,7 @@ def laghess(z, y, mu, *args): g_norm = jnp.linalg.norm(g * v, ord=jnp.inf) # updating augmented lagrangian params - if g_norm < gtolk: # TODO: maybe also add ftolk, xtolk? + if g_norm < gtolk: y = jnp.where(jnp.abs(c) < ctolk, y - mu * c, y) mu = jnp.where(jnp.abs(c) >= ctolk, tau * mu, mu) if constr_violation < ctolk: diff --git a/desc/optimize/aug_lagrangian_ls.py b/desc/optimize/aug_lagrangian_ls.py index 27a1d9f8ba..6b0952bf41 100644 --- a/desc/optimize/aug_lagrangian_ls.py +++ b/desc/optimize/aug_lagrangian_ls.py @@ -29,7 +29,7 @@ ) -def lsq_auglag( # noqa: C901 - FIXME: simplify this +def lsq_auglag( # noqa: C901 fun, x0, jac, @@ -495,7 +495,7 @@ def lagjac(z, y, mu, *args): g_norm = jnp.linalg.norm(g * v, ord=jnp.inf) # updating augmented lagrangian params - if g_norm < gtolk: # TODO: maybe also add ftolk, xtolk? + if g_norm < gtolk: y = jnp.where(jnp.abs(c) < ctolk, y - mu * c, y) mu = jnp.where(jnp.abs(c) >= ctolk, tau * mu, mu) if constr_violation < ctolk: diff --git a/desc/optimize/fmin_scalar.py b/desc/optimize/fmin_scalar.py index c3b6b8208b..cba5d7ef09 100644 --- a/desc/optimize/fmin_scalar.py +++ b/desc/optimize/fmin_scalar.py @@ -27,7 +27,7 @@ ) -def fmintr( # noqa: C901 - FIXME: simplify this +def fmintr( # noqa: C901 fun, x0, grad, diff --git a/desc/optimize/least_squares.py b/desc/optimize/least_squares.py index 227cd93f70..a95238b818 100644 --- a/desc/optimize/least_squares.py +++ b/desc/optimize/least_squares.py @@ -28,7 +28,7 @@ ) -def lsqtr( # noqa: C901 - FIXME: simplify this +def lsqtr( # noqa: C901 fun, x0, jac, diff --git a/desc/optimize/optimizer.py b/desc/optimize/optimizer.py index 99a57c926d..689446fa4e 100644 --- a/desc/optimize/optimizer.py +++ b/desc/optimize/optimizer.py @@ -77,7 +77,7 @@ def method(self, method): ) self._method = method - def optimize( # noqa: C901 - FIXME: simplify this + def optimize( # noqa: C901 self, things, objective, @@ -198,7 +198,6 @@ def optimize( # noqa: C901 - FIXME: simplify this eq_params_init = eq.params_dict.copy() options = {} if options is None else options - # TODO: document options timer = Timer() options = {} if options is None else options _, method = _parse_method(self.method) diff --git a/desc/perturbations.py b/desc/perturbations.py index 03529a1ed1..1e1e127d22 100644 --- a/desc/perturbations.py +++ b/desc/perturbations.py @@ -18,7 +18,7 @@ from desc.objectives.utils import factorize_linear_constraints from desc.optimize.tr_subproblems import trust_region_step_exact_svd from desc.optimize.utils import compute_jac_scale, evaluate_quadratic_form_jac -from desc.utils import Timer, get_instance +from desc.utils import Timer, get_instance, warnif __all__ = ["get_deltas", "perturb", "optimal_perturb"] @@ -91,7 +91,7 @@ def get_deltas(things1, things2): # noqa: C901 return deltas -def perturb( # noqa: C901 - FIXME: break this up into simpler pieces +def perturb( # noqa: C901 eq, objective, constraints, @@ -171,10 +171,10 @@ def perturb( # noqa: C901 - FIXME: break this up into simpler pieces constraint = ObjectiveFunction(constraints) constraint.build(verbose=verbose) - if objective.scalar: # FIXME: change to num objectives >= num parameters - raise AttributeError( - "Cannot perturb with a scalar objective: {}.".format(objective) - ) + warnif( + objective.dim_f < objective.dim_x, + "Perturbing an underdetermined system may give bad results", + ) if verbose > 0: print("Perturbing {}".format(", ".join(deltas.keys()))) @@ -412,7 +412,7 @@ def perturb( # noqa: C901 - FIXME: break this up into simpler pieces return eq_new -def optimal_perturb( # noqa: C901 - FIXME: break this up into simpler pieces +def optimal_perturb( # noqa: C901 eq, objective_f, objective_g, @@ -539,7 +539,6 @@ def optimal_perturb( # noqa: C901 - FIXME: break this up into simpler pieces print("Number of parameters: {}".format(dim_opt)) print("Number of objectives: {}".format(objective_g.dim_f)) - # FIXME: generalize to other constraints constraints = get_fixed_boundary_constraints(eq=eq) constraints = maybe_add_self_consistency(eq, constraints) constraint = ObjectiveFunction(constraints) diff --git a/desc/vmec.py b/desc/vmec.py index 904fd8f2dc..5c7cb00f10 100644 --- a/desc/vmec.py +++ b/desc/vmec.py @@ -208,9 +208,7 @@ def load( return eq @classmethod - def save( # noqa: C901 - FIXME - simplify - cls, eq, path, surfs=128, verbose=1, M_nyq=None, N_nyq=None - ): + def save(cls, eq, path, surfs=128, verbose=1, M_nyq=None, N_nyq=None): # noqa: C901 """Save an Equilibrium as a netCDF file in the VMEC format. Parameters diff --git a/desc/vmec_utils.py b/desc/vmec_utils.py index 9ea5bf7df9..0a1824ac50 100644 --- a/desc/vmec_utils.py +++ b/desc/vmec_utils.py @@ -334,7 +334,7 @@ def zernike_to_fourier(x_lmn, basis, rho): axis to the boundary. """ - # FIXME: this always returns the full double Fourier basis regardless of symmetry + # TODO: this always returns the full double Fourier basis regardless of symmetry M = basis.M N = basis.N diff --git a/tests/test_bootstrap.py b/tests/test_bootstrap.py index d4e49016a1..4c0b255b63 100644 --- a/tests/test_bootstrap.py +++ b/tests/test_bootstrap.py @@ -86,7 +86,7 @@ def test_trapped_fraction_analytic(self): modB = np.where( mask, 9.0 + 3.7 * np.sin(theta - NFP * zeta), 13.0 + 2.6 * np.cos(theta) ) - # todo: find value for sqrt_g_r value to test axis limit + # TODO: find value for sqrt_g_r value to test axis limit f_t_data = trapped_fraction(grid, modB, sqrt_g, sqrt_g_r=np.nan) # The average of (b0 + b1 cos(theta))^2 is b0^2 + (1/2) * b1^2 np.testing.assert_allclose( From 5bc0b99bb20f067db8be7ab6597adcf6f134ec8f Mon Sep 17 00:00:00 2001 From: Rory Conlin Date: Tue, 12 Nov 2024 12:51:50 -0500 Subject: [PATCH 02/10] Tag TODOs related to generalized toroidal angle --- desc/compute/_geometry.py | 6 +++--- desc/compute/_omnigenity.py | 2 +- desc/compute/_surface.py | 4 ++-- desc/equilibrium/coords.py | 4 ++-- desc/objectives/_geometry.py | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 59c07d5a75..1884f3e67b 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -194,7 +194,7 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): data=["Z", "n_rho", "e_theta|r,p", "rho"], parameterization=["desc.geometry.surface.FourierRZToroidalSurface"], resolution_requirement="rt", # just need max(rho) near 1 - # TODO: Add source grid requirement once omega is nonzero. + # TODO(#568): Add source grid requirement once omega is nonzero. ) def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): # Denote any vector v = [vᴿ, v^ϕ, vᶻ] with a tuple of its contravariant components. @@ -213,7 +213,7 @@ def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwarg line_integrals( transforms["grid"], data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), - # TODO: Works currently for omega = zero, but for nonzero omega + # TODO(#568): Works currently for omega = zero, but for nonzero omega # we need to integrate over theta at constant phi. # Should be simple once we have coordinate mapping and source grid # logic from GitHub pull request #1024. @@ -449,7 +449,7 @@ def _perimeter_of_z(params, transforms, profiles, data, **kwargs): line_integrals( transforms["grid"], safenorm(data["e_theta|r,p"], axis=-1), - # TODO: Works currently for omega = zero, but for nonzero omega + # TODO(#568): Works currently for omega = zero, but for nonzero omega # we need to integrate over theta at constant phi. # Should be simple once we have coordinate mapping and source grid # logic from GitHub pull request #1024. diff --git a/desc/compute/_omnigenity.py b/desc/compute/_omnigenity.py index db37766882..5f878bea2c 100644 --- a/desc/compute/_omnigenity.py +++ b/desc/compute/_omnigenity.py @@ -63,7 +63,7 @@ def fitfun(x): data=["B_phi|r,t"], resolution_requirement="tz", grid_requirement={"is_meshgrid": True}, - aliases="B_zeta_mn", # TODO: remove when phi != zeta + aliases="B_zeta_mn", # TODO(#568): remove when phi != zeta M_booz="int: Maximum poloidal mode number for Boozer harmonics. Default 2*eq.M", N_booz="int: Maximum toroidal mode number for Boozer harmonics. Default 2*eq.N", ) diff --git a/desc/compute/_surface.py b/desc/compute/_surface.py index d37f82337e..8ee685c2bd 100644 --- a/desc/compute/_surface.py +++ b/desc/compute/_surface.py @@ -3,7 +3,7 @@ from .data_index import register_compute_fun from .geom_utils import rpz2xyz -# TODO: review when zeta no longer equals phi +# TODO(#568): review when zeta no longer equals phi @register_compute_fun( @@ -27,7 +27,7 @@ def _x_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): R = transforms["R"].transform(params["R_lmn"]) Z = transforms["Z"].transform(params["Z_lmn"]) - # TODO: change when zeta no longer equals phi + # TODO(#568): change when zeta no longer equals phi phi = transforms["grid"].nodes[:, 2] coords = jnp.stack([R, phi, Z], axis=1) # default basis for "x" is rpz, the conversion will be done diff --git a/desc/equilibrium/coords.py b/desc/equilibrium/coords.py index d217a51f07..f5e318877a 100644 --- a/desc/equilibrium/coords.py +++ b/desc/equilibrium/coords.py @@ -286,7 +286,7 @@ def _distance_body(i, idx): return yg[idx] -# TODO: decide later whether to assume given phi instead of zeta. +# TODO(#568): decide later whether to assume given phi instead of zeta. def _map_PEST_coordinates( coords, L_lmn, @@ -395,7 +395,7 @@ def fixup(x, *args): return out -# TODO: decide later whether to assume given phi instead of zeta. +# TODO(#568): decide later whether to assume given phi instead of zeta. def _map_clebsch_coordinates( coords, iota, diff --git a/desc/objectives/_geometry.py b/desc/objectives/_geometry.py index 5aeee652af..38950d885c 100644 --- a/desc/objectives/_geometry.py +++ b/desc/objectives/_geometry.py @@ -615,7 +615,7 @@ def build(self, use_jit=True, verbose=1): "Plasma grid includes interior points, should be rho=1.", ) - # TODO: How to use with generalized toroidal angle? + # TODO(#568): How to use with generalized toroidal angle? # first check that the number of zeta nodes are the same, which # is a prerequisite to the zeta nodes themselves being the same errorif( From 4578e9cb4c4bca1ec8179954b0b04b287aa1a391 Mon Sep 17 00:00:00 2001 From: Rory Conlin Date: Tue, 12 Nov 2024 13:43:56 -0500 Subject: [PATCH 03/10] Add missing warning type to warnif --- desc/perturbations.py | 1 + 1 file changed, 1 insertion(+) diff --git a/desc/perturbations.py b/desc/perturbations.py index 1e1e127d22..a69e82f1a5 100644 --- a/desc/perturbations.py +++ b/desc/perturbations.py @@ -173,6 +173,7 @@ def perturb( # noqa: C901 warnif( objective.dim_f < objective.dim_x, + UserWarning, "Perturbing an underdetermined system may give bad results", ) From c538cdaeeef7634cd5ed376b26c7bb8bcc7bf74e Mon Sep 17 00:00:00 2001 From: Rory Conlin Date: Wed, 13 Nov 2024 00:02:50 -0500 Subject: [PATCH 04/10] Fix dimension of perturbed state --- desc/perturbations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desc/perturbations.py b/desc/perturbations.py index a69e82f1a5..5c35e8f6d1 100644 --- a/desc/perturbations.py +++ b/desc/perturbations.py @@ -172,7 +172,7 @@ def perturb( # noqa: C901 constraint.build(verbose=verbose) warnif( - objective.dim_f < objective.dim_x, + objective.dim_f < (objective.dim_x - constraint.dim_f), UserWarning, "Perturbing an underdetermined system may give bad results", ) From f8c64e6fa12d8372096ef61638a272927994dcc0 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 18 Nov 2024 16:01:48 -0500 Subject: [PATCH 05/10] add issues to TODOs or remove --- desc/basis.py | 4 ++-- desc/batching.py | 1 - desc/coils.py | 4 ++-- desc/compute/_omnigenity.py | 2 +- desc/compute/_profiles.py | 6 +++--- desc/compute/_stability.py | 2 +- desc/continuation.py | 1 - desc/equilibrium/coords.py | 4 ++-- desc/equilibrium/utils.py | 4 ++-- desc/geometry/surface.py | 2 +- desc/input_reader.py | 1 - desc/integrals/bounce_utils.py | 5 +++-- desc/integrals/interp_utils.py | 2 +- desc/integrals/surface_integral.py | 6 ++---- desc/magnetic_fields/_core.py | 2 +- desc/magnetic_fields/_dommaschk.py | 10 +++++----- desc/objectives/linear_objectives.py | 9 +++------ desc/objectives/nae_utils.py | 5 ++--- desc/objectives/objective_funs.py | 2 +- desc/optimize/_constraint_wrappers.py | 4 ++-- desc/optimize/_desc_wrappers.py | 2 +- desc/optimize/least_squares.py | 2 +- desc/plotting.py | 2 +- desc/vmec.py | 13 +++++++------ desc/vmec_utils.py | 3 ++- devtools/dev-requirements.txt | 2 +- devtools/dev-requirements_conda.yml | 2 +- tests/test_axis_limits.py | 3 ++- tests/test_bootstrap.py | 2 +- tests/test_compute_everything.py | 3 ++- tests/test_compute_funs.py | 6 +++--- tests/test_integrals.py | 6 +++--- tests/test_linear_objectives.py | 4 ++-- tests/test_objective_funs.py | 4 +--- 34 files changed, 62 insertions(+), 68 deletions(-) diff --git a/desc/basis.py b/desc/basis.py index 7303153e03..fac612c723 100644 --- a/desc/basis.py +++ b/desc/basis.py @@ -1098,13 +1098,13 @@ def evaluate( if not len(modes): return np.array([]).reshape((len(nodes), 0)) - # TODO: avoid duplicate calculations when mixing derivatives + # TODO(#1243): avoid duplicate calculations when mixing derivatives r, t, z = nodes.T l, m, n = modes.T lm = modes[:, :2] if unique: - # TODO: can avoid this here by using grid.unique_idx etc + # TODO(#1243): can avoid this here by using grid.unique_idx etc # and adding unique_modes attributes to basis _, ridx, routidx = np.unique( r, return_index=True, return_inverse=True, axis=0 diff --git a/desc/batching.py b/desc/batching.py index 129ef7ec38..ec45b29aa5 100644 --- a/desc/batching.py +++ b/desc/batching.py @@ -102,7 +102,6 @@ def f_(carry, x): return res_append -# TODO in_axes a la vmap? def _scanmap(fun, scan_fun, argnums=0): """A helper function to wrap f with a scan_fun.""" diff --git a/desc/coils.py b/desc/coils.py index b25246facb..64902d7be2 100644 --- a/desc/coils.py +++ b/desc/coils.py @@ -1901,8 +1901,8 @@ def save_in_makegrid_format(self, coilsFilename, NFP=None, grid=None): if None, will default to the coil compute functions's default grid """ - # TODO: name each group based off of CoilSet name? - # TODO: have CoilGroup be automatically assigned based off of + # TODO(#1376): name each group based off of CoilSet name? + # TODO(#1376): have CoilGroup be automatically assigned based off of # CoilSet if current coilset is a collection of coilsets? NFP = 1 if NFP is None else NFP diff --git a/desc/compute/_omnigenity.py b/desc/compute/_omnigenity.py index 5f878bea2c..2355a6fcb4 100644 --- a/desc/compute/_omnigenity.py +++ b/desc/compute/_omnigenity.py @@ -47,7 +47,7 @@ def fitfun(x): return data -# TODO: do math to change definition of nu so that we can just use B_zeta_mn here +# TODO (#568): do math to change definition of nu so that we can just use B_zeta_mn here @register_compute_fun( name="B_phi_mn", label="B_{\\phi, m, n}", diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 65bca54b59..f2fde0c158 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -1378,7 +1378,7 @@ def _iota_num_rrr(params, transforms, profiles, data, **kwargs): - beta * data["sqrt(g)_rrr"], data["sqrt(g)"], ), - # Todo: axis limit of beta_rrr + # TODO(#587): axis limit of beta_rrr # Computed with four applications of l’Hôpital’s rule. # Requires sqrt(g)_rrrr and fourth derivatives of basis vectors. jnp.nan, @@ -1656,7 +1656,7 @@ def _iota_den_rrr(params, transforms, profiles, data, **kwargs): - gamma * data["sqrt(g)_rrr"], data["sqrt(g)"], ), - # Todo: axis limit + # TODO(#587): axis limit # Computed with four applications of l’Hôpital’s rule. # Requires sqrt(g)_rrrr and fourth derivatives of basis vectors. jnp.nan, @@ -1713,7 +1713,7 @@ def _q(params, transforms, profiles, data, **kwargs): return data -# TODO: add K(rho,theta,zeta)*grad(rho) term +# TODO (#1381): add K(rho,theta,zeta)*grad(rho) term @register_compute_fun( name="I", label="I", diff --git a/desc/compute/_stability.py b/desc/compute/_stability.py index fc773674ec..5f7f4c60d1 100644 --- a/desc/compute/_stability.py +++ b/desc/compute/_stability.py @@ -76,7 +76,7 @@ def _D_current(params, transforms, profiles, data, **kwargs): / data["|grad(psi)|"] ** 3 * dot(Xi, data["B"]) ), - # Todo: implement equivalent of equation 4.3 in desc coordinates + # TODO(#671): implement equivalent of equation 4.3 in desc coordinates jnp.nan, ) ) diff --git a/desc/continuation.py b/desc/continuation.py index b5274171fe..b4f1ef0e4d 100644 --- a/desc/continuation.py +++ b/desc/continuation.py @@ -748,7 +748,6 @@ def solve_continuation( # noqa: C901 if len(deltas) > 0: if verbose > 0: print("Perturbing equilibrium") - # TODO: pass Jx if available eqp = eqfam[ii - 1].copy() objective_i = get_equilibrium_objective( eq=eqp, mode=objective, jac_chunk_size=jac_chunk_size diff --git a/desc/equilibrium/coords.py b/desc/equilibrium/coords.py index f5e318877a..186049a2f9 100644 --- a/desc/equilibrium/coords.py +++ b/desc/equilibrium/coords.py @@ -107,7 +107,7 @@ def map_coordinates( # noqa: C901 profiles = get_profiles(inbasis + basis_derivs, eq) - # TODO: make this work for permutations of in/out basis + # TODO (#1382): make this work for permutations of in/out basis if outbasis == ("rho", "theta", "zeta"): if inbasis == ("rho", "alpha", "zeta"): if "iota" in kwargs: @@ -766,7 +766,7 @@ def get_rtz_grid( return desc_grid -# TODO: deprecated, remove eventually +# TODO(#1383): deprecated, remove eventually def compute_theta_coords( eq, flux_coords, L_lmn=None, tol=1e-6, maxiter=20, full_output=False, **kwargs ): diff --git a/desc/equilibrium/utils.py b/desc/equilibrium/utils.py index fe4eb6b402..b597fd149e 100644 --- a/desc/equilibrium/utils.py +++ b/desc/equilibrium/utils.py @@ -146,7 +146,7 @@ def parse_axis(axis, NFP=1, sym=True, surface=None): name="axis", ) elif axis is None: # use the center of surface - # TODO: make this method of surface, surface.get_axis()? + # TODO (#1384): make this method of surface, surface.get_axis()? if isinstance(surface, FourierRZToroidalSurface): axis = FourierRZCurve( R_n=surface.R_lmn[np.where(surface.R_basis.modes[:, 1] == 0)], @@ -160,7 +160,7 @@ def parse_axis(axis, NFP=1, sym=True, surface=None): NFP=NFP, ) elif isinstance(surface, ZernikeRZToroidalSection): - # TODO: include m=0 l!=0 modes + # TODO (#782): include m=0 l!=0 modes axis = FourierRZCurve( R_n=surface.R_lmn[ np.where( diff --git a/desc/geometry/surface.py b/desc/geometry/surface.py index c96e9b8615..f6350ea210 100644 --- a/desc/geometry/surface.py +++ b/desc/geometry/surface.py @@ -339,7 +339,7 @@ def from_input_file(cls, path, **kwargs): ) return surf - # TODO: add k value for number of rotations per field period + # TODO (#1385): add k value for number of rotations per field period @classmethod def from_qp_model( cls, diff --git a/desc/input_reader.py b/desc/input_reader.py index 01f0b5b3f0..a6241c13ac 100644 --- a/desc/input_reader.py +++ b/desc/input_reader.py @@ -386,7 +386,6 @@ def parse_inputs(self, fname=None): # noqa: C901 if match: inputs["bdry_mode"] = words[0].lower() flag = True - # TODO: set bdry_mode automatically based on bdry coeffs # coefficient indices match = re.search(r"l\s*:\s*" + num_form, command, re.IGNORECASE) diff --git a/desc/integrals/bounce_utils.py b/desc/integrals/bounce_utils.py index 656c4e588c..03f6f924e8 100644 --- a/desc/integrals/bounce_utils.py +++ b/desc/integrals/bounce_utils.py @@ -83,7 +83,7 @@ def _check_spline_shape(knots, g, dg_dz, pitch_inv=None): to that field line. """ - errorif(knots.ndim != 1, msg=f"knots should be 1d; got shape {knots.shape}.") + errorif(knots.ndim != 1, msg=f"knots should be 1d, got shape {knots.shape}.") errorif( g.shape[-2] != (knots.size - 1), msg=( @@ -390,7 +390,8 @@ def loop(z): # over num well axis ) result = jnp.moveaxis( - # TODO: Use batch_size arg of imap after increasing JAX version requirement. + # TODO (#1386): Use batch_size arg of imap after + # increasing JAX version requirement. imap(loop, (jnp.moveaxis(z1, -1, 0), jnp.moveaxis(z2, -1, 0)))[1], source=0, destination=-1, diff --git a/desc/integrals/interp_utils.py b/desc/integrals/interp_utils.py index c00506fce8..db652df325 100644 --- a/desc/integrals/interp_utils.py +++ b/desc/integrals/interp_utils.py @@ -82,7 +82,7 @@ def polyval_vec(*, x, c): ) -# TODO: Eventually do a PR to move this stuff into interpax. +# TODO (#1388): Eventually do a PR to move this stuff into interpax. def _subtract_last(c, k): diff --git a/desc/integrals/surface_integral.py b/desc/integrals/surface_integral.py index 944a711904..54cfdabe1b 100644 --- a/desc/integrals/surface_integral.py +++ b/desc/integrals/surface_integral.py @@ -8,8 +8,8 @@ from desc.grid import ConcentricGrid, LinearGrid from desc.utils import errorif, warnif -# TODO: Make the surface integral stuff objects with a callable method instead of -# returning functions. Would make simpler, allow users to actually see the +# TODO (#1389): Make the surface integral stuff objects with a callable method instead +# of returning functions. Would make simpler, allow users to actually see the # docstrings of the methods, and less bookkeeping to default to more # efficient methods on tensor product grids. @@ -227,8 +227,6 @@ def surface_integrals_map(grid, surface_label="rho", expand_out=True, tol=1e-14) ) spacing = jnp.prod(spacing, axis=1) - # Todo: Define mask as a sparse matrix once sparse matrices are no longer - # experimental in jax. if has_idx: # The ith row of masks is True only at the indices which correspond to the # ith surface. The integral over the ith surface is the dot product of the diff --git a/desc/magnetic_fields/_core.py b/desc/magnetic_fields/_core.py index a8603351a0..507262d7fe 100644 --- a/desc/magnetic_fields/_core.py +++ b/desc/magnetic_fields/_core.py @@ -2401,7 +2401,7 @@ def __init__( assert len(x_lmn) == self.x_basis.num_modes self._x_lmn = x_lmn - # TODO: should we not allow some types of helicity? + # TODO (#1390): should we not allow some types of helicity? helicity_sign = sign(helicity[0]) * sign(helicity[1]) warnif( self.helicity != (0, self.NFP * helicity_sign) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 17eab8800a..009c7fb72a 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -117,7 +117,7 @@ def fit_magnetic_field( # noqa: C901 B = field(coords) else: # it must be the field evaluated at the passed-in coords B = field - # TODO: add basis argument for if passed-in field or callable + # TODO (#928): add basis argument for if passed-in field or callable # evaluates rpz or xyz basis magnetic field vector, # and what basis coords is @@ -132,7 +132,7 @@ def fit_magnetic_field( # noqa: C901 # b is made, now do A ##################### num_modes = 1 + (max_l) * (max_m + 1) * 4 - # TODO: if symmetric, technically only need half the modes + # TODO (#928): if symmetric, technically only need half the modes # however, the field and functions are setup to accept equal # length arrays for a,b,c,d, so we will just zero out the # modes that don't fit symmetry, but in future @@ -141,7 +141,7 @@ def fit_magnetic_field( # noqa: C901 # and the modes array can then be [m,l,x] where x is 0,1,2,3 # and we dont need to keep track of a,b,c,d separately - # TODO: technically we can drop some modes + # TODO (#928): technically we can drop some modes # since if max_l=0, there are only ever nonzero terms for a and b # and if max_m=0, there are only ever nonzero terms for a and c # but since we are only fitting in a least squares sense, @@ -247,7 +247,7 @@ def get_B_dom(coords, X, ms, ls): # now solve Ac=b for the coefficients c - # TODO: use min singular value to give sense of cond number? + # TODO (#928): use min singular value to give sense of cond number? c, res, _, _ = jnp.linalg.lstsq(A, rhs) if verbose > 0: @@ -258,7 +258,7 @@ def get_B_dom(coords, X, ms, ls): B0 = c[0] # we zero out the terms that should be zero due to symmetry here - # TODO: should also just not return any zeroed-out modes, but + # TODO (#928): should also just not return any zeroed-out modes, but # the way the modes are cataloged here with the ls and ms arrays, # it is not straightforward to do that a_arr = c[1 : n + 1] * abcd_zero_due_to_sym_inds[0] diff --git a/desc/objectives/linear_objectives.py b/desc/objectives/linear_objectives.py index 0c263bbd4e..1c8817a880 100644 --- a/desc/objectives/linear_objectives.py +++ b/desc/objectives/linear_objectives.py @@ -20,7 +20,7 @@ from .objective_funs import _Objective -# TODO: get rid of this class and inherit from FixParameters instead? +# TODO (#1391): get rid of this class and inherit from FixParameters instead? class _FixedObjective(_Objective): _fixed = True _linear = True @@ -45,8 +45,8 @@ def update_target(self, thing): def _parse_target_from_user( self, target_from_user, default_target, default_bounds, idx ): - # TODO: add logic here to deal with `target_from_user` as a pytree? - # TODO: does this actually need idx? + # TODO (#1391): add logic here to deal with `target_from_user` as a pytree? + # TODO (#1391: does this actually need idx? if target_from_user is None: target = default_target bounds = default_bounds @@ -2513,7 +2513,6 @@ def __init__( normalize_target=normalize_target, name=name, ) - # TODO: add normalization? class FixCurveRotation(FixParameters): @@ -2879,7 +2878,6 @@ def __init__( normalize_target=normalize_target, name=name, ) - # TODO: add normalization? class FixOmniMap(FixParameters): @@ -3094,7 +3092,6 @@ def __init__( normalize_target=normalize_target, name=name, ) - # TODO: add normalization? class FixNearAxisR(_FixedObjective): diff --git a/desc/objectives/nae_utils.py b/desc/objectives/nae_utils.py index 8a1e92e0ca..5a3ff26d2c 100644 --- a/desc/objectives/nae_utils.py +++ b/desc/objectives/nae_utils.py @@ -295,10 +295,10 @@ def _make_RZ_cons_order_rho( # noqa: C901 the O(rho) behavior of the equilibrium R coefficients to match the NAE. Zconstraints : tuple of Objective tuple of constraints of type FixSumModesZ, which enforce - the O(rho) behavior of the equilibrium Z coefficents to match the NAE. + the O(rho) behavior of the equilibrium Z coefficients to match the NAE. Lconstraints : tuple of Objective tuple of constraints of type FixSumModesLambda, which enforce - the O(rho) behavior of the equilibrium lambda coefficents to match the NAE. + the O(rho) behavior of the equilibrium lambda coefficients to match the NAE. Tuple is empty if fix_lambda=False. """ @@ -306,7 +306,6 @@ def _make_RZ_cons_order_rho( # noqa: C901 # r is the ratio r_NAE / rho_DESC r = np.sqrt(2 * abs(desc_eq.Psi / qsc.Bbar) / 2 / np.pi) else: - # TODO: is this true? r = 1 # using DESC equilibrium's behavior, no conversion is needed Rconstraints = () diff --git a/desc/objectives/objective_funs.py b/desc/objectives/objective_funs.py index 9f0ca3945f..c32dbb565c 100644 --- a/desc/objectives/objective_funs.py +++ b/desc/objectives/objective_funs.py @@ -613,7 +613,7 @@ def unpack_state(self, x, per_objective=True): def x(self, *things): """Return the full state vector from the Optimizable objects things.""" - # TODO: also check resolution etc? + # TODO (#1392): also check resolution of the things etc? things = things or self.things errorif( len(things) != len(self.things), diff --git a/desc/optimize/_constraint_wrappers.py b/desc/optimize/_constraint_wrappers.py index bbc5daf4ee..dc2e3033c7 100644 --- a/desc/optimize/_constraint_wrappers.py +++ b/desc/optimize/_constraint_wrappers.py @@ -704,7 +704,7 @@ def unpack_state(self, x, per_objective=True): def x(self, *things): """Return the full state vector from the Optimizable objects things.""" - # TODO: also check resolution etc? + # TODO (#1392): also check resolution etc? things = things or self.things assert [type(t1) is type(t2) for t1, t2 in zip(things, self.things)] xs = [] @@ -872,7 +872,7 @@ def grad(self, x, constants=None): gradient vector. """ - # TODO: figure out projected vjp to make this better + # TODO (#1393): figure out projected vjp to make this better f = jnp.atleast_1d(self.compute_scaled_error(x, constants)) J = self.jac_scaled_error(x, constants) return f.T @ J diff --git a/desc/optimize/_desc_wrappers.py b/desc/optimize/_desc_wrappers.py index cf5addc86b..ae466c4dd6 100644 --- a/desc/optimize/_desc_wrappers.py +++ b/desc/optimize/_desc_wrappers.py @@ -87,7 +87,7 @@ def _optimize_desc_aug_lagrangian( ub, lambda x, *c: constraint.jac_scaled(x, c[1]), ) - # TODO: can't pass constants dict into vjp for now + # TODO (#1394): can't pass constants dict into vjp for now constraint_wrapped.vjp = lambda v, x, *args: constraint.vjp_scaled(v, x) else: constraint_wrapped = None diff --git a/desc/optimize/least_squares.py b/desc/optimize/least_squares.py index a95238b818..ef19c346c9 100644 --- a/desc/optimize/least_squares.py +++ b/desc/optimize/least_squares.py @@ -344,7 +344,7 @@ def lsqtr( # noqa: C901 ) alltr.append(trust_radius) alpha *= tr_old / trust_radius - # TODO: does this need to move to the outer loop? + # TODO (#1395): does this need to move to the outer loop? success, message = check_termination( actual_reduction, cost, diff --git a/desc/plotting.py b/desc/plotting.py index def22fa14d..e29c8199f2 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -3340,7 +3340,7 @@ def plot_basis(basis, return_data=False, **kwargs): """ title_fontsize = kwargs.pop("title_fontsize", None) - # TODO: add all other Basis classes + # TODO(#1377): add all other Basis classes if basis.__class__.__name__ == "PowerSeries": grid = LinearGrid(rho=100, endpoint=True) r = grid.nodes[:, 0] diff --git a/desc/vmec.py b/desc/vmec.py index 5c7cb00f10..14c4cafff0 100644 --- a/desc/vmec.py +++ b/desc/vmec.py @@ -346,7 +346,8 @@ def save(cls, eq, path, surfs=128, verbose=1, M_nyq=None, N_nyq=None): # noqa: np.array([" " * 100], "S" + str(file.dimensions["dim_00100"].size)) ) # VMEC input filename: input.[input_extension] - # TODO: instead of hard-coding for fixed-boundary, also allow for free-boundary? + # TODO(#1378): instead of hard-coding for fixed-boundary, + # also allow for free-boundary? mgrid_mode = file.createVariable("mgrid_mode", "S1", ("dim_00001",)) mgrid_mode[:] = stringtochar( np.array([""], "S" + str(file.dimensions["dim_00001"].size)) @@ -440,7 +441,7 @@ def save(cls, eq, path, surfs=128, verbose=1, M_nyq=None, N_nyq=None): # noqa: nextcur.long_name = "number of coils (external currents)" nextcur[:] = 0 # hard-coded assuming fixed-boundary solve - # TODO: add option for saving spline profiles + # TODO(#183): add option for saving spline profiles power_series = stringtochar( np.array( ["power_series" + " " * 8], "S" + str(file.dimensions["dim_00020"].size) @@ -1083,7 +1084,7 @@ def fullfit(x): bsubsmns[0, :] = ( # linear extrapolation for coefficient at the magnetic axis s[1, :] - (s[2, :] - s[1, :]) / (s_full[2] - s_full[1]) * s_full[1] ) - # TODO: evaluate current at rho=0 nodes instead of extrapolation + # TODO (#1379): evaluate current at rho=0 nodes instead of extrapolation if not eq.sym: bsubsmnc[:, :] = c bsubsmnc[0, :] = ( @@ -1219,7 +1220,7 @@ def fullfit(x): currumnc[0, :] = ( # linear extrapolation for coefficient at the magnetic axis s[1, :] - (c[2, :] - c[1, :]) / (s_full[2] - s_full[1]) * s_full[1] ) - # TODO: evaluate current at rho=0 nodes instead of extrapolation + # TODO (#1379): evaluate current at rho=0 nodes instead of extrapolation if not eq.sym: currumns[:, :] = s currumns[0, :] = ( @@ -1269,7 +1270,7 @@ def fullfit(x): currvmnc[0, :] = -( # linear extrapolation for coefficient at the magnetic axis s[1, :] - (c[2, :] - c[1, :]) / (s_full[2] - s_full[1]) * s_full[1] ) - # TODO: evaluate current at rho=0 nodes instead of extrapolation + # TODO (#1379): evaluate current at rho=0 nodes instead of extrapolation if not eq.sym: currvmns[:, :] = -s currumns[0, :] = -( @@ -1279,7 +1280,7 @@ def fullfit(x): if verbose > 1: timer.disp("J^zeta*sqrt(g)") - # TODO: these output quantities need to be added + # TODO (#1380): these output quantities need to be added bdotgradv = file.createVariable("bdotgradv", np.float64, ("radius",)) bdotgradv[:] = np.zeros((file.dimensions["radius"].size,)) bdotgradv.long_name = "Not Implemented: This output is hard-coded to 0!" diff --git a/desc/vmec_utils.py b/desc/vmec_utils.py index 0a1824ac50..85710b12a9 100644 --- a/desc/vmec_utils.py +++ b/desc/vmec_utils.py @@ -334,7 +334,8 @@ def zernike_to_fourier(x_lmn, basis, rho): axis to the boundary. """ - # TODO: this always returns the full double Fourier basis regardless of symmetry + # TODO (PR #680): this always returns the full double Fourier basis + # regardless of symmetry M = basis.M N = basis.N diff --git a/devtools/dev-requirements.txt b/devtools/dev-requirements.txt index dd11240c8f..4ec9db9447 100644 --- a/devtools/dev-requirements.txt +++ b/devtools/dev-requirements.txt @@ -4,7 +4,7 @@ # building the docs nbsphinx == 0.8.12 sphinx > 3.0.0 -# TODO: Remove sphinx-argparse <0.5.0 pin once upstream build issue is fixed +# TODO (#1396): Remove sphinx-argparse <0.5.0 pin once upstream build issue is fixed # sphinx-argparse < 0.5.0 sphinx_copybutton diff --git a/devtools/dev-requirements_conda.yml b/devtools/dev-requirements_conda.yml index 45b1260c6a..aa9ce95de3 100644 --- a/devtools/dev-requirements_conda.yml +++ b/devtools/dev-requirements_conda.yml @@ -33,7 +33,7 @@ dependencies: - nbsphinx == 0.8.12 - pandoc - sphinx > 3.0.0 - # TODO: Remove sphinx-argparse <0.5.0 pin once upstream build issue is fixed + # TODO (#1396): Remove sphinx-argparse <0.5.0 pin once upstream build issue is fixed # - sphinx-argparse < 0.5.0 - sphinx-copybutton diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index b8d173f7e9..e456e84070 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -191,7 +191,8 @@ def assert_is_continuous( """ if kwargs is None: kwargs = {} - # TODO: remove when boozer transform works with multiple surfaces + # TODO ( #671, #1206):currently skip Boozer quants because it needs sym=False grid + # and also, Boozer axis limits are not yet implemented (#1206) names = [ name for name in names diff --git a/tests/test_bootstrap.py b/tests/test_bootstrap.py index 4c0b255b63..c314069605 100644 --- a/tests/test_bootstrap.py +++ b/tests/test_bootstrap.py @@ -86,7 +86,7 @@ def test_trapped_fraction_analytic(self): modB = np.where( mask, 9.0 + 3.7 * np.sin(theta - NFP * zeta), 13.0 + 2.6 * np.cos(theta) ) - # TODO: find value for sqrt_g_r value to test axis limit + # TODO (#671): find value for sqrt_g_r to test axis limit f_t_data = trapped_fraction(grid, modB, sqrt_g, sqrt_g_r=np.nan) # The average of (b0 + b1 cos(theta))^2 is b0^2 + (1/2) * b1^2 np.testing.assert_allclose( diff --git a/tests/test_compute_everything.py b/tests/test_compute_everything.py index ead54493e3..9619166042 100644 --- a/tests/test_compute_everything.py +++ b/tests/test_compute_everything.py @@ -244,7 +244,8 @@ def test_compute_everything(): if p in no_xyz_things: continue # remove quantities that are not implemented in the XYZ basis - # TODO: generalize this instead of hard-coding for "grad(B)" & dependencies + # TODO (#1110): generalize this instead of hard-coding for + # the quantities "grad(B)" & dependencies names_xyz = ( names - {"grad(B)", "|grad(B)|", "L_grad(B)"} if "grad(B)" in names diff --git a/tests/test_compute_funs.py b/tests/test_compute_funs.py index 9a9216cc8e..009e399410 100644 --- a/tests/test_compute_funs.py +++ b/tests/test_compute_funs.py @@ -1104,7 +1104,7 @@ def test_partial_derivative(name): @pytest.mark.solve def test_boozer_transform(): """Test that Boozer coordinate transform agrees with BOOZ_XFORM.""" - # TODO: add test with stellarator example + # TODO (#680): add test with stellarator example eq = get("DSHAPE_CURRENT") grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP) data = eq.compute("|B|_mn", grid=grid, M_booz=eq.M, N_booz=eq.N) @@ -1477,8 +1477,8 @@ def test_surface_equilibrium_geometry(): """Test that computing stuff from surface gives same result as equilibrium.""" names = ["HELIOTRON"] data = ["A", "V", "a", "R0", "R0/a", "a_major/a_minor"] - # TODO: expand this to include all angular derivatives once they are implemented - # for surfaces + # TODO (#1397): expand this to include all angular derivatives + # once they are implemented for surfaces data_basis_vecs_fourierRZ = [ "e_theta", "e_zeta", diff --git a/tests/test_integrals.py b/tests/test_integrals.py index e254269006..3c76ee66a7 100644 --- a/tests/test_integrals.py +++ b/tests/test_integrals.py @@ -997,8 +997,8 @@ def _fixed_elliptic(integrand, k, deg): quad = integrand(Z, k).dot(w) * grad_bijection_from_disc(a, b) return quad - # TODO: add the analytical test that converts incomplete elliptic integrals to - # complete ones using the Reciprocal Modulus transformation + # TODO (#1398): add the analytical test that converts incomplete elliptic integrals + # to complete ones using the Reciprocal Modulus transformation # https://dlmf.nist.gov/19.7#E4. @staticmethod def elliptic_incomplete(k2): @@ -1240,7 +1240,7 @@ def get_drift_analytic_data(): things = {"grid": grid, "eq": eq} return data, things - # TODO: stellarator geometry test with ripples + # TODO (#1398): stellarator geometry test with ripples @staticmethod def drift_analytic(data): """Compute analytic approximation for bounce-averaged binormal drift. diff --git a/tests/test_linear_objectives.py b/tests/test_linear_objectives.py index 83f9a32936..35df7f9937 100644 --- a/tests/test_linear_objectives.py +++ b/tests/test_linear_objectives.py @@ -56,7 +56,7 @@ from desc.objectives.utils import factorize_linear_constraints from desc.profiles import PowerSeriesProfile -# TODO: check for all bdryR things if work when False is passed in +# TODO (#1348): check for all bdryR things if work when False is passed in # bc empty array indexed will lead to an error @@ -781,7 +781,7 @@ def test_FixMode_passed_target_no_passed_modes_error(): @pytest.mark.unit def test_FixSumModes_passed_target_too_long(): """Test Fixing Modes with more than a size-1 target.""" - # TODO: remove this test if FixSumModes is generalized + # TODO (#1399): remove this test if FixSumModes is generalized # to accept multiple targets and sets of modes at a time eq = Equilibrium(L=3, M=4) with pytest.raises(ValueError): diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index a429358407..ff416eb5c2 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -981,7 +981,7 @@ def test(coils, mindist, grid=None, expect_intersect=False, tol=None): grid=LinearGrid(zeta=4), expect_intersect=True, ) - # TODO: move this coil set to conftest? + # TODO (#1400, 914): move this coil set to conftest? @pytest.mark.unit def test_plasma_coil_min_distance(self): @@ -1102,8 +1102,6 @@ def test( coils_fixed=True, ) - # TODO: add more complex test case with a stellarator and/or MixedCoilSet - @pytest.mark.unit def test_quadratic_flux(self): """Test calculation of quadratic flux on the boundary.""" From ef6fb9137146fd1f569e65fde8cffce300ec5733 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 18 Nov 2024 16:12:37 -0500 Subject: [PATCH 06/10] make poincare plot test quicker by not using mgrid --- tests/baseline/test_plot_poincare.png | Bin 60172 -> 63728 bytes tests/inputs/precise_QA_helical_coils.h5 | Bin 0 -> 601312 bytes tests/test_plotting.py | 17 +++-------------- 3 files changed, 3 insertions(+), 14 deletions(-) create mode 100644 tests/inputs/precise_QA_helical_coils.h5 diff --git a/tests/baseline/test_plot_poincare.png b/tests/baseline/test_plot_poincare.png index 66a5bad617fe56a3af996dce6b402d1dd18d4e50..a99c1951e22382e07ed54145f9ba8ea120aaa808 100644 GIT binary patch literal 63728 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°K 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 literal 60172 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 W68h9$*XLTQ-`Qo46KdP Date: Mon, 18 Nov 2024 16:27:23 -0500 Subject: [PATCH 07/10] let linspace_XXX take in check_intersection --- desc/coils.py | 31 +++++++++++--- tests/test_objective_funs.py | 78 ++++++++++++++++++++++++------------ 2 files changed, 78 insertions(+), 31 deletions(-) diff --git a/desc/coils.py b/desc/coils.py index ea0da348a5..2de3d3d825 100644 --- a/desc/coils.py +++ b/desc/coils.py @@ -1633,7 +1633,14 @@ def compute_magnetic_vector_potential( @classmethod def linspaced_angular( - cls, coil, current=None, axis=[0, 0, 1], angle=2 * np.pi, n=10, endpoint=False + cls, + coil, + current=None, + axis=[0, 0, 1], + angle=2 * np.pi, + n=10, + endpoint=False, + check_intersection=True, ): """Create a CoilSet by repeating a coil at equal spacing around the torus. @@ -1651,6 +1658,8 @@ def linspaced_angular( Number of copies of original coil. endpoint : bool Whether to include a coil at final rotation angle. Default = False. + check_intersection : bool + whether to check the resulting coilsets for intersecting coils. """ assert isinstance(coil, _Coil) and not isinstance(coil, CoilSet) @@ -1664,11 +1673,17 @@ def linspaced_angular( coili.rotate(axis=axis, angle=phi[i]) coili.current = currents[i] coils.append(coili) - return cls(*coils) + return cls(*coils, check_intersection=check_intersection) @classmethod def linspaced_linear( - cls, coil, current=None, displacement=[2, 0, 0], n=4, endpoint=False + cls, + coil, + current=None, + displacement=[2, 0, 0], + n=4, + endpoint=False, + check_intersection=True, ): """Create a CoilSet by repeating a coil at equal spacing in a straight line. @@ -1685,6 +1700,8 @@ def linspaced_linear( Number of copies of original coil. endpoint : bool Whether to include a coil at final displacement location. Default = False. + check_intersection : bool + whether to check the resulting coilsets for intersecting coils. """ assert isinstance(coil, _Coil) and not isinstance(coil, CoilSet) @@ -1699,10 +1716,10 @@ def linspaced_linear( coili.translate(a[i] * displacement) coili.current = currents[i] coils.append(coili) - return cls(*coils) + return cls(*coils, check_intersection=check_intersection) @classmethod - def from_symmetry(cls, coils, NFP=1, sym=False): + def from_symmetry(cls, coils, NFP=1, sym=False, check_intersection=True): """Create a coil group by reflection and symmetry. Given coils over one field period, repeat coils NFP times between @@ -1721,6 +1738,8 @@ def from_symmetry(cls, coils, NFP=1, sym=False): sym : bool (optional) Whether to enforce stellarator symmetry. If True, the coils will be duplicated 2*NFP times. Default = False. + check_intersection : bool + whether to check the resulting coilsets for intersecting coils. Returns ------- @@ -1763,7 +1782,7 @@ def from_symmetry(cls, coils, NFP=1, sym=False): rotated_coils.rotate(axis=[0, 0, 1], angle=2 * jnp.pi * k / NFP) coilset += rotated_coils - return cls(*coilset) + return cls(*coilset, check_intersection=check_intersection) @classmethod def from_makegrid_coilfile(cls, coil_file, method="cubic", check_intersection=True): diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index a429358407..40c204466b 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -526,7 +526,7 @@ def test(eq): def test_boundary_error_biestsc(self): """Test calculation of boundary error using BIEST w/ sheet current.""" coil = FourierXYZCoil(5e5) - coilset = CoilSet.linspaced_angular(coil, n=100) + coilset = CoilSet.linspaced_angular(coil, n=100, check_intersection=False) coil_grid = LinearGrid(N=20) eq = Equilibrium(L=3, M=3, N=3, Psi=np.pi) eq.surface = FourierCurrentPotentialField.from_surface( @@ -548,7 +548,7 @@ def test_boundary_error_biestsc(self): def test_boundary_error_biest(self): """Test calculation of boundary error using BIEST.""" coil = FourierXYZCoil(5e5) - coilset = CoilSet.linspaced_angular(coil, n=100) + coilset = CoilSet.linspaced_angular(coil, n=100, check_intersection=False) coil_grid = LinearGrid(N=20) eq = Equilibrium(L=3, M=3, N=3, Psi=np.pi) eq.solve() @@ -565,7 +565,7 @@ def test_boundary_error_biest(self): def test_boundary_error_vacuum(self): """Test calculation of vacuum boundary error.""" coil = FourierXYZCoil(5e5) - coilset = CoilSet.linspaced_angular(coil, n=100) + coilset = CoilSet.linspaced_angular(coil, n=100, check_intersection=False) coil_grid = LinearGrid(N=20) eq = Equilibrium(L=3, M=3, N=3, Psi=np.pi) eq.solve() @@ -582,7 +582,7 @@ def test_boundary_error_vacuum(self): def test_boundary_error_nestor(self): """Test calculation of boundary error using NESTOR.""" coil = FourierXYZCoil(5e5) - coilset = CoilSet.linspaced_angular(coil, n=100) + coilset = CoilSet.linspaced_angular(coil, n=100, check_intersection=False) coil_grid = LinearGrid(N=20) eq = Equilibrium(L=3, M=3, N=3, Psi=np.pi) eq.solve() @@ -833,8 +833,12 @@ def test(coil, grid=None): assert len(f) == obj.dim_f coil = FourierPlanarCoil(r_n=2, basis="rpz") - coils = CoilSet.linspaced_linear(coil, n=3, displacement=[0, 3, 0]) - mixed_coils = MixedCoilSet.linspaced_linear(coil, n=2, displacement=[0, 7, 0]) + coils = CoilSet.linspaced_linear( + coil, n=3, displacement=[0, 3, 0], check_intersection=False + ) + mixed_coils = MixedCoilSet.linspaced_linear( + coil, n=2, displacement=[0, 7, 0], check_intersection=False + ) nested_coils = MixedCoilSet(coils, mixed_coils, check_intersection=False) grid = None # default grid @@ -856,8 +860,12 @@ def test(coil, grid=None): assert f.shape == (obj.dim_f,) coil = FourierPlanarCoil(r_n=2, basis="rpz") - coils = CoilSet.linspaced_linear(coil, n=3, displacement=[0, 3, 0]) - mixed_coils = MixedCoilSet.linspaced_linear(coil, n=2, displacement=[0, 7, 0]) + coils = CoilSet.linspaced_linear( + coil, n=3, displacement=[0, 3, 0], check_intersection=False + ) + mixed_coils = MixedCoilSet.linspaced_linear( + coil, n=2, displacement=[0, 7, 0], check_intersection=False + ) nested_coils = MixedCoilSet(coils, mixed_coils, check_intersection=False) grid = LinearGrid(N=5) # single grid @@ -879,8 +887,12 @@ def test(coil, grid=None): assert len(f) == obj.dim_f coil = FourierPlanarCoil(r_n=2, basis="rpz") - coils = CoilSet.linspaced_linear(coil, n=3, displacement=[0, 3, 0]) - mixed_coils = MixedCoilSet.linspaced_linear(coil, n=2, displacement=[0, 7, 0]) + coils = CoilSet.linspaced_linear( + coil, n=3, displacement=[0, 3, 0], check_intersection=False + ) + mixed_coils = MixedCoilSet.linspaced_linear( + coil, n=2, displacement=[0, 7, 0], check_intersection=False + ) nested_coils = MixedCoilSet(coils, mixed_coils, check_intersection=False) grid = [LinearGrid(N=5)] * 5 # single list of grids @@ -902,8 +914,12 @@ def test(coil, grid=None): assert len(f) == obj.dim_f coil = FourierPlanarCoil(r_n=2, basis="rpz") - coils = CoilSet.linspaced_linear(coil, n=3, displacement=[0, 3, 0]) - mixed_coils = MixedCoilSet.linspaced_linear(coil, n=2, displacement=[0, 7, 0]) + coils = CoilSet.linspaced_linear( + coil, n=3, displacement=[0, 3, 0], check_intersection=False + ) + mixed_coils = MixedCoilSet.linspaced_linear( + coil, n=2, displacement=[0, 7, 0], check_intersection=False + ) nested_coils = MixedCoilSet(coils, mixed_coils, check_intersection=False) grid = [[LinearGrid(N=5)] * 3, [LinearGrid(N=5)] * 2] # nested list of grids @@ -937,7 +953,9 @@ def test(coils, mindist, grid=None, expect_intersect=False, tol=None): n = 3 disp = 5 coil = FourierPlanarCoil(r_n=1, normal=[0, 0, 1]) - coils_linear = CoilSet.linspaced_linear(coil, n=n, displacement=[0, 0, disp]) + coils_linear = CoilSet.linspaced_linear( + coil, n=n, displacement=[0, 0, disp], check_intersection=False + ) test(coils_linear, disp / n) # planar toroidal coils, without symmetry @@ -946,7 +964,7 @@ def test(coils, mindist, grid=None, expect_intersect=False, tol=None): center = 3 r = 1 coil = FourierPlanarCoil(center=[center, 0, 0], normal=[0, 1, 0], r_n=r) - coils_angular = CoilSet.linspaced_angular(coil, n=4) + coils_angular = CoilSet.linspaced_angular(coil, n=4, check_intersection=False) test( coils_angular, np.sqrt(2) * (center - r), grid=LinearGrid(zeta=4), tol=1e-5 ) @@ -957,7 +975,9 @@ def test(coils, mindist, grid=None, expect_intersect=False, tol=None): center = 3 r = 1 coil = FourierPlanarCoil(center=[center, 0, 0], normal=[0, 1, 0], r_n=r) - coils = CoilSet.linspaced_angular(coil, angle=np.pi / 2, n=5, endpoint=True) + coils = CoilSet.linspaced_angular( + coil, angle=np.pi / 2, n=5, endpoint=True, check_intersection=False + ) coils_sym = CoilSet(coils[1::2], NFP=2, sym=True) test(coils_sym, 2 * (center - r) * np.sin(np.pi / 8), grid=LinearGrid(zeta=4)) @@ -965,10 +985,14 @@ def test(coils, mindist, grid=None, expect_intersect=False, tol=None): # TF coils instersect with the middle VF coil # extra coil is 5 m from middle VF coil tf_coil = FourierPlanarCoil(center=[2, 0, 0], normal=[0, 1, 0], r_n=1) - tf_coilset = CoilSet.linspaced_angular(tf_coil, n=4) + tf_coilset = CoilSet.linspaced_angular(tf_coil, n=4, check_intersection=False) vf_coil = FourierRZCoil(R_n=3, Z_n=-1) vf_coilset = CoilSet.linspaced_linear( - vf_coil, displacement=[0, 0, 2], n=3, endpoint=True + vf_coil, + displacement=[0, 0, 2], + n=3, + endpoint=True, + check_intersection=False, ) xyz_coil = FourierXYZCoil(X_n=[0, 6, 1], Y_n=[0, 0, 0], Z_n=[-1, 0, 0]) coils_mixed = MixedCoilSet( @@ -1029,7 +1053,7 @@ def test( ) eq = Equilibrium(surface=surf, NFP=1, M=2, N=0, sym=True) coil = FourierPlanarCoil(center=[R0, 0, 0], normal=[0, 1, 0], r_n=[a + offset]) - coils = CoilSet.linspaced_angular(coil, n=8) + coils = CoilSet.linspaced_angular(coil, n=8, check_intersection=False) test( eq, coils, @@ -1059,7 +1083,9 @@ def test( ) eq = Equilibrium(surface=surf, NFP=1, M=2, N=0, sym=True) coil = FourierPlanarCoil(center=[R0, 0, 0], normal=[0, 1, 0], r_n=[a + offset]) - coils = CoilSet.linspaced_angular(coil, angle=np.pi / 2, n=5, endpoint=True) + coils = CoilSet.linspaced_angular( + coil, angle=np.pi / 2, n=5, endpoint=True, check_intersection=False + ) coils = CoilSet(coils[1::2], NFP=2, sym=True) test( eq, @@ -1090,7 +1116,9 @@ def test( ) eq = Equilibrium(surface=surf, NFP=1, M=2, N=0, sym=True) coil = FourierPlanarCoil(center=[R0, 0, 0], normal=[0, 1, 0], r_n=[a + offset]) - coils = CoilSet.linspaced_angular(coil, angle=np.pi / 2, n=5, endpoint=True) + coils = CoilSet.linspaced_angular( + coil, angle=np.pi / 2, n=5, endpoint=True, check_intersection=False + ) coils = CoilSet(coils[1::2], NFP=2, sym=True) test( eq, @@ -1204,10 +1232,10 @@ def test_coil_linking_number(self): coil = FourierPlanarCoil(center=[10, 1, 0]) # regular modular coilset from symmetry, so that there are 10 coils, half going # one way and half going the other way - coilset = CoilSet.from_symmetry(coil, NFP=5, sym=True) + coilset = CoilSet.from_symmetry(coil, NFP=5, sym=True, check_intersection=False) coil2 = FourierRZCoil() # add a coil along the axis that links all the other coils - coilset2 = MixedCoilSet(coilset, coil2) + coilset2 = MixedCoilSet(coilset, coil2, check_intersection=False) obj = CoilSetLinkingNumber(coilset2) obj.build() @@ -1788,7 +1816,7 @@ def test(obj, eq, surface, d, print_init=False): def test_boundary_error_print(capsys): """Test that the boundary error objectives print correctly.""" coil = FourierXYZCoil(5e5) - coilset = CoilSet.linspaced_angular(coil, n=100) + coilset = CoilSet.linspaced_angular(coil, n=100, check_intersection=False) coil_grid = LinearGrid(N=20) eq = Equilibrium(L=3, M=3, N=3, Psi=np.pi) @@ -2667,7 +2695,7 @@ def test_compute_scalar_resolution_others(self, objective): def test_compute_scalar_resolution_coils(self, objective): """Coil objectives.""" coil = FourierXYZCoil() - coilset = CoilSet.linspaced_angular(coil) + coilset = CoilSet.linspaced_angular(coil, check_intersection=False) f = np.zeros_like(self.res_array, dtype=float) for i, res in enumerate(self.res_array): obj = ObjectiveFunction( @@ -2904,7 +2932,7 @@ def test_objective_no_nangrad(self, objective): def test_objective_no_nangrad_coils(self, objective): """Coil objectives.""" coil = FourierXYZCoil() - coilset = CoilSet.linspaced_angular(coil, n=3) + coilset = CoilSet.linspaced_angular(coil, n=3, check_intersection=False) obj = ObjectiveFunction(objective(coilset), use_jit=False) obj.build(verbose=0) g = obj.grad(obj.x()) From b5974984201131932b23ffc4aa1354f132f8f331 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 18 Nov 2024 16:43:29 -0500 Subject: [PATCH 08/10] add link to docs in optimizer description --- desc/optimize/optimizer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/desc/optimize/optimizer.py b/desc/optimize/optimizer.py index 689446fa4e..09f25ed4ee 100644 --- a/desc/optimize/optimizer.py +++ b/desc/optimize/optimizer.py @@ -137,7 +137,9 @@ def optimize( # noqa: C901 Maximum number of iterations. Defaults to 100. options : dict, optional Dictionary of optional keyword arguments to override default solver - settings. See the code for more details. + settings. See the documentation page ``Optimizers Supported`` for + more details (https://desc-docs.readthedocs.io/en/stable/optimizers.html) + to check the options for each specific available optimizer. copy : bool Whether to return the current things or a copy (leaving the original unchanged). From 45373122a2c67bce6331294a064b583caad6cc36 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 18 Nov 2024 16:46:10 -0500 Subject: [PATCH 09/10] make comment prettier --- tests/test_axis_limits.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index e456e84070..27a2008136 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -191,8 +191,8 @@ def assert_is_continuous( """ if kwargs is None: kwargs = {} - # TODO ( #671, #1206):currently skip Boozer quants because it needs sym=False grid - # and also, Boozer axis limits are not yet implemented (#1206) + # TODO ( #671, #1206):currently skip Boozer quants because it need sym=False + # grid (#1206) and Boozer axis limits are not yet implemented (#671) names = [ name for name in names From bf0731bceb60e0169384de0ffe67ed86ffb97471 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 18 Nov 2024 16:52:43 -0500 Subject: [PATCH 10/10] remove unneeded TODOs --- tests/test_integrals.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/test_integrals.py b/tests/test_integrals.py index 3c76ee66a7..56168d64e7 100644 --- a/tests/test_integrals.py +++ b/tests/test_integrals.py @@ -997,9 +997,6 @@ def _fixed_elliptic(integrand, k, deg): quad = integrand(Z, k).dot(w) * grad_bijection_from_disc(a, b) return quad - # TODO (#1398): add the analytical test that converts incomplete elliptic integrals - # to complete ones using the Reciprocal Modulus transformation - # https://dlmf.nist.gov/19.7#E4. @staticmethod def elliptic_incomplete(k2): """Calculate elliptic integrals for bounce averaged binormal drift. @@ -1240,7 +1237,6 @@ def get_drift_analytic_data(): things = {"grid": grid, "eq": eq} return data, things - # TODO (#1398): stellarator geometry test with ripples @staticmethod def drift_analytic(data): """Compute analytic approximation for bounce-averaged binormal drift.