diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bb5064c21..63181b2b05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,24 @@ -* XX.X +* 25.0.0 - New features: - Added `FunctionOfAbs` class (#1976) - Added `Cone3D_Flex` geometry as a CIL acquisition geometry type. This allows users to reconstruct non-circular trajectories. (#2039) - Added `ASTRA` backend support for `ProjectionOperator` and `FBP` to use `Cone3D_Flex` geometry. (#2039) - Added `show_system_positions` for visualisation of `Cone3D_Flex` geometries. (#2039) + - Added an Accelerated Proximal Gradient Descent Algorithm (APGD) with options for momentum (#2145) + - Enhancements: + - Added an accelerated version to the TransmissionAbsorption processor, controlled by the `accelerated` parameter (default is `True`) (#2036) + - Made the call to next() in algorithm iteration loop explicit (#2069) + - Added option for a random seed in the power method in the linear operator (#1585) + - Improved efficiency of `Normaliser` processor. Reduced memory use and increased speed (#2111) + - Extra functionality for sampler: `get_previous_samples()` and `get_current_sample()` (#2079) + - PDHG 'check_convergence' updated for new literature (#2084) + - Updated `create_local_env_for_cil_development.sh` script to work on Windows (#2144) + - Improved consistency of `step_size` property across GD, ISTA, FISTA and APGD algorithms (#2157) + - In PDHG algorithm, we now have options to initialise the dual variable, as well as the primal variable (#2169) + - Allow FluxNormaliser.preview_configuration() even if flux contains zeros (#2177) + - Check if kwargs are used in AcquisitionData and ImageData initialisation (#2178) + - Added a flag to `show_geometry` that allows for disabling the call to `plt.show()` (#2195) + - The random methods to populate a data container can now be accessed via `fill()` and `allocate()`, and will have a lower memory footprint on creation (#2037) - Bug fixes: - Fix deprecation warning for rtol and atol in GD (#2056) - Removed the deprecated usage of run method in test_SIRF.py (#2070) @@ -14,49 +29,49 @@ - Copy geometry in the creation of a DataContainer (#2108) - Fix order of operations for subtraction and division between a BlockDataContainer and DataContainer (#2133) - Update default compression for TIFFWriter setup (#2197) + - ProjectionOperator device input is no longer case-sensitive (#2065) + - Fix `pkg_resources` deprecation warning on `setuptools>=81 dxchange<=0.2.0` (#2207) + - Deprecated + - Positional arguments for `get_slice` on `AcquisitionGeometry` and `AcquisitionData` have been deprecated (#2039) + - Methods to allocate a `DataContainer` using the old numpy random number generator have been renamed and deprecated, `RANDOM`->`RANDOM_DEPRECATED` and `RANDOM_INT`->`RANDOM_INT_DEPRECATED`. See "Breaking Changes" for details of new behaviour (#2037) + - Sampler's `get_samples` has been deprecated, use `view_samples` (#2128) + - Removed code + - Removed the following code which has been deprecated since v23.0.0 or earlier (#2150): + - `dimension_labels` kwarg in `AcquisitionGeometry.allocate()` and in `ImageData`'s `__init__` + - `axpby` (alias of `sapyb`) + - `shape` setter in `DataContainer` and `ImageGeometry` + - use of integer compression in `NEXUSDataWriter` + - Removed unused kwargs passed to ImageData and AcquisitionData, including `suppress_warning` (#2206) - Documentation: - Updated documentation for the ChannelWiseOperator including new example (#2096) - Updated documentation for LADMM (#2015) - Updated Contributor's Guide to include an example of parametrized tests, using `unittest-parametrize` (#1990) - Tidied up documentation of `L1Norm` (#2186) - - Enhancements: - - Add accelerated version to TransmissionAbsorption processor, controlled by `accelerated` parameter, default is True (#2036) - - Made the call to next() in algorithm iteration loop explicit (#2069) - - Added option for a random seed in the power method in the linear operator (#1585) - - Improved efficiency of `Normaliser` processor. Reduced memory use and increased speed (#2111) - - Extra functionality for sampler: `get_previous_samples()` and `get_current_sample()` (#2079) - - Renamed Sampler's `get_samples` to `view_samples` (deprecating `get_samples`) (#2128) - - PDHG 'check_convergence' updated for new literature (#2084) - - Make install local env script work on windows (#2144) - - Added an Accelerated Proximal Gradient Descent Algorithm (APGD) with options for momentum (#2145) - - Improved consistency of `step_size` property across GD, ISTA, FISTA and APGD algorithms (#2157) - - In PDHG algorithm, we now have options to initialise the dual variable, as well as the primal variable (#2169) - - Allow FluxNormaliser.preview_configuration() even if flux contains zeros (#2177) - - Check if kwargs are used in AcquisitionData and ImageData initialisation (#2178) - - Added a flag to `show_geometry` that allows for disabling the call to `plt.show()` (#2195) + - Added callbacks to documentation (#2067) + - Added new tutorials to the "How-To" page in the docs (#1972) - Testing: - Developers can now run the full CI matrix [via the web UI](https://github.com/TomographicImaging/CIL/actions/workflows/build.yml) (#2160) - Added tests for ProjectionOperator inputs that use `unittest-parametrize` module (#1990) - Added tests for Normaliser processor - Update minimum cmake version to 3.5 - Added unit test for the `ZEISSDataReader` (#2098) + - Added `requirements-test-windows.yml` to create test environment (#2174) + - Automate Windows conda build & release (#1918) - Dependencies: - Move from CMake to `pip install` (#2145) + - Use conda native compilers (#2199) - matplotlib-base is an optional dependency, instead of required (#2093) - - `unittest-parametrize has been added as a dependency for tests (#1990) - - olefile and dxchange are an optional dependency, instead of required (#2149) + - `unittest-parametrize` has been added as a dependency for tests (#1990) + - Defer import of olefile and dxchange (#2149) - zenodo_get is an optional dependency, instead of required (#2146) - `FindIPP.cmake` fallback (#2148) - enable `find_package` using `*_ROOT` hints - simplified `cilacc` build logic for optional dependencies - - Removed the following code which has been deprecated since v23.0.0 or earlier (#2150): - - `dimension_labels` kwarg in `AcquisitionGeometry.allocate()` and in `ImageData`'s `__init__` - - `axpby` (alias of `sapyb`) - - `shape` setter in `DataContainer` and `ImageGeometry` - - use of integer compression in `NEXUSDataWriter` - - Removed unused kwargs passed to ImageData and AcquisitionData, including `suppress_warning` (#2206) - - Changes that break backwards compatibility: - - Updated `RANDOM` and `RANDOM_INT` `DataContainer.fill()` and `geometry.allocate()` methods to use numpy default random number generator, old methods can be accessed with `RANDOM_DEPRECATED` AND `RANDOM_INT_DEPRECATED`. Random methods can now be accessed from `fill()` and `allocate()` (#2037) + - Removed upper version constraints on optional plugins when resolving conda environment (#2204) + - Relaxed numpy runtime pinning of versions (#2156) + - Breaking changes: + - `RANDOM` and `RANDOM_INT` options in `DataContainer.fill()` and `geometry.allocate()` methods now use numpy default random number generator to populate the array. Values for a set seed will now change compared to previous versions. Previous methods can be accessed with `RANDOM_DEPRECATED` and `RANDOM_INT_DEPRECATED`. (#2037) + - `RANDOM` and `RANDOM_INT` options in `DataContainer.fill()` and `geometry.allocate()` methods will no longer use a random seed set externally using `numpy.random.seed()`, the seed should be provided as an argument. `RANDOM_DEPRECATED` and `RANDOM_INT_DEPRECATED` will still use an externally set seed (#2037) * 24.3.0 - New features: diff --git a/CITATION.cff b/CITATION.cff index bf5577c15b..edbff5a096 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -31,6 +31,8 @@ authors: given-names: Hannah - family-names: Sugic given-names: Danica +- family-names: Vidal + given-names: Franck title: Core Imaging Library (CIL) date-released: '2018-01-08' identifiers: diff --git a/README.md b/README.md index 38386ca373..48193f7096 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ We recommend using either [`miniconda`](https://docs.conda.io/projects/miniconda Install a new minimal environment with CIL using: ```sh -conda create --name cil -c https://software.repos.intel.com/python/conda -c conda-forge -c ccpi cil=24.3.0 +conda create --name cil -c https://software.repos.intel.com/python/conda -c conda-forge -c ccpi cil=25.0.0 ``` A number of additional dependencies are required for specific functionality in CIL, these should be added to your environment as necessary. See the dependency table below for details. @@ -41,6 +41,7 @@ While building the CIL package we test with specific versions of dependencies. T | [TomoPhantom](https://github.com/dkazanc/TomoPhantom) | [2.0.0](https://github.com/dkazanc/TomoPhantom/releases/tag/v2.0.0) | `ccpi::tomophantom=2.0.0` | Generates phantoms to use as test data. | [Apache-2.0](https://github.com/dkazanc/TomoPhantom/blob/master/LICENSE) | | [ipykernel](https://github.com/ipython/ipykernel) || `ipykernel` | Provides the IPython kernel to run Jupyter notebooks. | [BSD-3-Clause](https://github.com/ipython/ipykernel/blob/main/LICENSE) | | [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) || `ipywidgets` | Enables visualisation tools within jupyter noteboooks. | [BSD-3-Clause](https://github.com/jupyter-widgets/ipywidgets/blob/main/LICENSE) | +|[zenodo_get](https://github.com/dvolgyes/zenodo_get)|>= 1.6|`zenodo_get>=1.6`| Downloads datasets from Zenodo, is used by `dataexample` to get data used in CIL-Demos |[AGPL-3.0](https://github.com/dvolgyes/zenodo_get?tab=AGPL-3.0-1-ov-file)| We maintain an environment file with the required packages to run the [CIL demos](https://github.com/TomographicImaging/CIL-Demos) which you can use to create a new environment. This will have specific and tested versions of all dependencies that are outlined in the table above: diff --git a/Wrappers/Python/cil/framework/acquisition_geometry.py b/Wrappers/Python/cil/framework/acquisition_geometry.py index 8318331f5a..07e7388c13 100644 --- a/Wrappers/Python/cil/framework/acquisition_geometry.py +++ b/Wrappers/Python/cil/framework/acquisition_geometry.py @@ -2321,7 +2321,7 @@ def create_Cone2D(source_position, detector_position, detector_direction_x=[1,0] Creates the AcquisitionGeometry for a cone beam 2D tomographic system. After creating the AcquisitionGeometry object, the panel must be set using the `set_panel()` method and the angles must be set using the `set_angles()` method. - In addition,`set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. + In addition, `set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. See notes for default directions. @@ -2364,7 +2364,7 @@ def create_Parallel3D(ray_direction=[0,1,0], detector_position=[0,0,0], detector Creates the AcquisitionGeometry for a parallel beam 3D tomographic system. After creating the AcquisitionGeometry object, the panel must be set using the `set_panel()` method and the angles must be set using the `set_angles()` method. - In addition,`set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. + In addition, `set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. Parameters ---------- @@ -2413,7 +2413,7 @@ def create_Cone3D(source_position, detector_position, detector_direction_x=[1,0, Creates the AcquisitionGeometry for a cone beam 3D tomographic system. After creating the AcquisitionGeometry object, the panel must be set using the `set_panel()` method and the angles must be set using the `set_angles()` method. - In addition,`set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. + In addition, `set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. Parameters ---------- @@ -2460,7 +2460,7 @@ def create_Cone3D_Flex(source_position_set, detector_position_set, detector_dire Creates the AcquisitionGeometry for a per-projection cone beam 3D tomographic system. After creating the AcquisitionGeometry object, the panel must be set using the `set_panel()` method. - In addition,`set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. + In addition, `set_channels()` can be used to set the number of channels and their labels. `set_labels()` can be used to set the order of the dimensions describing the data. Parameters ---------- diff --git a/docs/source/utilities.rst b/docs/source/utilities.rst index 65b970ff68..4e58d3dbdc 100644 --- a/docs/source/utilities.rst +++ b/docs/source/utilities.rst @@ -37,9 +37,6 @@ A set of simulated volumes and CT data .. autoclass:: cil.utilities.dataexample.SIMULATED_PARALLEL_BEAM_DATA :members: -.. autoclass:: cil.utilities.dataexample.SIMULATED_CONE_BEAM_DATA - :members: - A CT dataset from the Diamond Light Source ------------------------------------------ diff --git a/pyproject.toml b/pyproject.toml index 2a1ee37665..499858c6d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,7 +68,6 @@ dependencies = [ "pywavelets", "scipy>=1.4.0", "tqdm", - "zenodo_get>=1.6", ] [project.optional-dependencies] plugins = [ @@ -83,11 +82,12 @@ gpu = [ test = [ #"ccpi-regulariser=24.0.1", # [not osx] # missing from PyPI "cvxpy", - "matplotlib>=3.3.0", + "matplotlib-base>=3.3", "packaging", "scikit-image", "unittest-parametrize", "wget", + "zenodo_get>=1.6", ] docs = [ "jinja2",