# New features ## Generalized MPI parallelization * The `Mpi` class now supports any number of MPI ranks, a single rank can own several bunches. Previously, parallelization required exactly one core per bunch. * All tracking elements (`WakePotential`, `CavityResonator`, monitors, etc.) updated to support the generalized mapping. * Add MPI consistency tests (`tests/mpi/`) to validate that serial and parallel runs produce identical results. ## CSR wakefield tracking * Extend `FreeSpaceCSR` and `ParallelPlatesCSR` to provide the longitudinal wake antiderivative, enabling CSR kick tracking via `WakePotential`. * `WakePotential` detects CSR components and uses the antiderivative–derivative convolution to avoid the singularity. * Add a `coherent_synchrotron_radiation.ipynb` example notebook illustrating CSR tracking. ## LongitudinalExponentialDamper * Add `LongitudinalExponentialDamper` element in `tracking/feedback.py` for longitudinal bunch-by-bunch feedback tracking. ## ResistiveWallModel * Add `ResistiveWallModel` class in `impedance/resistive_wall_model.py` to store aperture, resistivity and Yokoya factors along the longitudinal position for global resistive wall computation using the effective radius formalism. * Includes `resistive_wall_effective_radius_yokoya` method and visualization tools. ## Quadrupolar wakes in LongRangeResistiveWall * `LongRangeResistiveWall` now supports quadrupolar wake types (`Wxquad`, `Wyquad`) in addition to the previous dipolar and longitudinal wakes. ## Resonator properties * Add properties to `Resonator`: resonant frequency, quality factor, shunt impedance, and derived quantities accessible as attributes. * Fix `PureResistive` impedance model. ## WakePotential convenience methods * Add `wakefunction_max_frequency`, `binning_max_frequency`, and `wakepotential_max_frequency` methods to `WakePotential`. * `WakePotentialMonitor` now saves the `max_frequency` attribute. # Other improvements and modifications * Move `Synchrotron` class from `tracking/synchrotron.py` to `utilities/synchrotron.py`. Old import paths remain valid via `__init__.py` re-exports. * Add `__repr__` and `__str__` methods to `Synchrotron`, `Optics`, and `Particle` classes. * Vectorize `transverse_gaussian_space_charge_tune_shift`: `bunch_current` now accepts an array. * Add type hints across the codebase. * All plotting functions now accept an optional `ax` argument and return axes instead of figures. * `plot_profiledata` and `plot_wakedata` now default to a profile plot, with an option to produce a streak plot. * `BunchSpectrumMonitor` and `BeamSpectrumMonitor`: `buffer_size` is now optional; fix a longstanding issue where `save_every` did not reliably flush data. * Add `merge_files` utility function in `tracking/monitors/tools.py`. * Refactor `IntrabeamScattering` for improved clarity and performance. ## Project management * Restructure documentation: switch to the Awesome Sphinx theme, add per-module RST pages, include example notebooks. * Add `pylintrc` configuration file. * Add merge request template. * Update `poetry.lock` and `pyproject.toml`. * Update `.gitlab-ci.yml`. * Unify version management # Bugfix * Fix `TransverseExponentialDamper` kick calculation in the Y direction. * Fix `CavityResonator` phase calculation (replace manual angle with `arctan2`). * Fix `ImpedanceModel.group_attributes` (issue #11). * Fix `WakePotential.get_gaussian_wakepotential`. * Fix impedance-file reading (`delim_whitespace` deprecation replaced with `sep=r'\s+'`). * Fix h5py file opens to use context managers, preventing file handle leaks. * Remove leftover `PhysicalModel` class from `optics.py` (was renamed to `ResistiveWallModel` in a prior release but not removed). # Authors who took part in this release Alexis Gamelin, Vadim Gubaidulin, Elene Kravishvili, Lee Carver