Skip to content

Release 1.6.0 - #519

Open
jacklovell wants to merge 113 commits into
masterfrom
development
Open

Release 1.6.0#519
jacklovell wants to merge 113 commits into
masterfrom
development

Conversation

@jacklovell

@jacklovell jacklovell commented Sep 8, 2026

Copy link
Copy Markdown
Member

Release candidate rc1: https://pypi.org/project/cherab/1.6.0rc1/.

Closes #507

vsnever and others added 30 commits August 30, 2024 19:44
derived from Raysect's Function3D
Add e_field attribute to Plasma object for electric field vector
ubuntu-latest switched to 24.04, but 22.04 is the last version which
supports Python 3.7 that we continue to test against for now.
Run CI on ubuntu 22.04 runner
Reason for having Function6D in Cherab was removed
This should add the possibility to fully investigate what emission
models an observation was performed with.
munechika-koyo and others added 30 commits July 15, 2026 16:45
Added support for removing HTML build artifacts.
Renaming python-featured environments to avoid specific Python versions
Updated channels to use 'conda-forge' instead of the prefix's URL.
Removed sphinx-tabs from pypi-dependencies.
Fix import statement for netcdf_file in calcam.py
This enables single-sourcing constant values in both Cython code and
Python code (including tests).

Fixes #509.
Make constants in cherab.core.utility.constants accessible to Python
* Reorder parameters of Function6D to x,y,z,u,v,w
* Add generic distribution function

* Add tests to GenericDistribution, ZeroDistribution; move Maxwellian tests from test_maxwellian.py to test_distribution.py

* Add ZeroDistribution, GenericDistribution to docs

* Add demo for the generic distribution

---------

Co-authored-by: Jack Lovell <jack.lovell@ukaea.uk>
* Add 2D Gauss-Legendre quadrature integrator

* Add tests for GaussianQuadrature2D

* Add Integrator2D documentation

* Rename GaussianQuadrature to GaussianQuadrature1D

To keep consistent naming with function frameword and quadrature2D
integrator.

GaussianQuadrature class marked as deprecated.

* Add GaussianQuadrature rename to changelog

* Replace deprecated GausianQuadrature usage with GausianQuadrature1D
* Add a Regularisation section to the tomography documentation, describing the functionality inside the admt_utils module.
* Fixup the docstrings in admt_utils.
* Add calculation of "skewed" second derivative operators, which operate along the diagonals of the grid.
* Add a bolometer diagonstic system to Generomak.
* Add a new example using the Generomak bolometers and the regularisation operators to perform isotropic and ADMT inversions.
* Improve generate_derivative_operators function:
  * More thorough commenting of the function to make it easier to follow what is going on and why.
  * Exploit the sparsity of the derivative opreators but using a dictionary-of-keys representation instead of dense numpy arrays. A dictionary is faster to insert single elements into inside the loop than a numpy array too.
  * Remove the `np.isnan` checks which are slow for single elements, replace with a cheap check for `None`.
  * Support returning the operators as Scipy sparse arrays for use downstream. Default to returning as Numpy arrays for backwards compatibility.
* Support generating sparse ADMT operators.
* Add a regularised NNLS inversion using sparse matrices asn alternative to `invert_regularised_nnls` using sparse weight and penalty matrices. The numerical algorithm used is slightly different to `scipy.optimize.nnls`, as it uses the TRF variant of a bounded `scipy.optimize.lsq_linear` with the lower bound set to 0 to enforce positivity. Since the results differ due to floating point precision, the sparse variant is implemented as a separate function to maintain backwards compatibility.
* Enable generating derivative operators with only 1 mapping: The 1D-to-2D and 2D-to-1D maps are the inverse of one another, so one can be computed from the other. Depending on how the end user forms their inversion grid it may be simpler to calculate the 1D-to-2D or the 2D-to-1D, so allow the caller to pass either and compute any missing mapping. If the caller already has both mappings (machine packages like cherab-jet, cherab-mastu and
  cherab-aug already generate both) then accept both too.
* Add tests for auto-computing missing mappings.
* Tests uncovered a bug converting the Dyy sparse operator to dense when `sparse=False` was passed: fix that and complete test coverage for `admt_utils`.
* Update changelog.
✨ Introduce `pixi` for project management
* Add an action to build distributions on tagged releases

Use the CIbuildwheel Github action to build wheels for all
currently-supported Python versions, plus an SDist tarball.
Manylinux wheels are produced using the manylinux2014 
image where possible (to support JET/UKAEA computers which
 still run SL7), with manylinux_2_28 for Python 3.14 as that isn't
available in manylinux2014.

Only Linux wheels are built for now: MacOS (and Windows should Raysect
ever support it) builds are deferred. But the strategy matrix for the wheels
is written in such a way as to easily add other OS's or architectures
later as necessary.

To avoid wasting compute cycles, the workflow is configured to only
run on published releases. This includes stable and pre-release publications.

Automatic uploading to PyPI is not implemented: the distribution files
should be downloaded from the `gather_artifacts` job's artifacts and
checked locally before uploading to PyPI. This is to reduce the risk
of uploading broken distributions: if the process proves robust and
reliable then automatic uploading to PyPI can be revisited.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cherab 1.6.0 release

4 participants