
v0.5
v0.5  20221022 This is the last version with python 2 support. Changes in setuptools (see for example python [PEP 517](https://peps.python.org/pep0517/) and [PEP 660](https://peps.python.org/pep0660/) ) require changes in the setup. Backward compatibility will therefore be dropped. Current tests already do not inlcude python2 anymore. **Highlights** * Parallelized implementation of `Field.map_coordinates` * Added support for reading files written by the fbpic v0.13.0 code ( https://github.com/fbpic ). The fields can be accessed by `Er` and `Etheta`, which have been introduced to the fbpic data reader. Particles are saved in Cartesian coordinates, hence the interface does not change there. * Reimplementation of `Field.fft`, see below. **Incompatible adjustments to previous version** * Reimplementation of `Field.fft`. This changes the phases of Fourier transforms in a way to make it more consistent. However, if your code depends on the phases, `Field.fft()` now has a parameter `old_behaviour` that can be used to switch back to the old behaviour. * Indexing a field by a number (integer or float) will now remove the according axis altogether, instead of leaving behind a length1 axis. A new class `KeepDim` was introduced through which the old behaviour can still be used. Behaviour of PostPic before this change: ``` field.shape == (x,y,z) field[:, 0.0, :].shape == (x,1,z) ``` Using the new class `KeepDim`, it is possible to retain that behaviour in the new version: ``` field.shape == (x,y,z) field[:, 0.0, :].shape == (x, z) field[:, KeepDim(0.0), :].shape == (x,1,z) ``` **Other improvements and new features** * New convenience method `Field.copy`

v0.4
**Highlights** * Improved interoperability with numpy: * `Field` now understands most of numpy's broadcasting * `Field` can be used as an argument to numpy's ufuncs. * Import and export routines for `Field` incuding vtk, compatible with [paraview](https://www.paraview.org/). * Coordinate mapping and transform for `Field`. * Brand new `Multispecies.__call__` interface: This takes an expression, which is evaluated by `numexr`, increasing the speed of perparticle scalar computations strongly. It's also really userfriendly. **Incompatible adjustments to previous version** * `postpic.Field` method `exporttocsv` is removed. Use `export` instead. * `postpic.Field` method `transform` is renamed to `map_coordinates`, matching the underlying scipyfunction. * `postpic.Field` method `mean` has now an interface matching `ndarray.mean`. This means that, if the `axis` argument is not given, it averages across all axes instead the last axis. * `postpic.Field.map_coordinates` applies now the Jacobian determinant of the transformation, in order to preserve the definite integral. In your code you will need to turn calls to `Field.transform` into calls to `Field.map_coordinates` and set the keyword argument `preserve_integral=False` to get the old behaviour. * `postpic.MultiSpecies.createField` has now keyword arguments (`bins`, `shape`), which replace the corresponding entries from the `optargsh` dictionary. The use of the`optargsh` keyword argument has been deprecated. * The functions `MultiSpecies.compress`, `MultiSpecies.filter`, `MultiSpecies.uncompress` and `ParticleHistory.skip` return a new object now. Before this release, they modified the current object. Assuming `ms` is a `MultiSpecies` object, the corresponding adjustemens read:<br> old: `ms.filter('gamma > 2')`<br> new: `ms = ms.filter('gamma > 2')` * `plotter_matplotlib` has a new default symmetric colormap **Other improvements and new features** * Overload of the `~` (invert) operator on `postpic.MultiSpecies`. If `ms` is a MultiSpecies object with filtered particles (created by the use of `compress` or `filter`), then `~ms` inverts the selection of particles. * `postpic.Field` has methods `.loadfrom` and `.saveto`. These can be used to save a Field to a ` .npz` file for later use. Use `.loadfrom` to load a Field object from such a file. All attributes of the Field are restored. * `postpic.Field` has methods `.export` and `.import`. These are used to export fields to and import fields from foreign file formats such as `.csv`, `.vtk`, `.png`, `.tif`, `.jpg`. It is not guaranteed to get all attributes back after `.export`ing and than `.import`ing a Field. Some formats are not available for both methods. * `postpic` has a new function `time_profile_at_plane` that 'measures' the temporal profile of a pulse while passing through a plane * `postpic` has a new function `unstagger_fields` that will take a set of staggered fields and returns the fields after removing the stagger * `postpic` has a new function `export_vector_vtk` that takes up to three fields and exports them as a vector field in the `.vtk` format * `postpic` has a new function `export_scalars_vtk` that takes up to four fields and exports them as multiple scalar fields on the same grid in the `.vtk` format * `postpic.Field` works now with all numpy ufuncs, also with `ufunc.reduce`, `ufunc.outer`, `ufunc.accumulate` and `ufunc.at` * `postpic.Field` now supports broadcasting like numpy arrays, for binary operators as well as binary ufunc operations * `postpic.Field` has methods `.swapaxes`, `.transpose` and properties `.T` and `ndim` compatible to numpy.ndarray * `postpic.Field` has methods `all`, `any`, `max`, `min`, `prod`, `sum`, `ptp`, `std`, `var`, `mean`, `clip` compatible to numpy.ndarray * `postpic.Field` has a new method `map_axis_grid` for transforming the coordinates only along one axis which is simpler than `map_coordinates`, but also takes care of the Jacobian * `postpic.Field` has a new method `autocutout` used to slice away closetozero regions from the borders * `postpic.Field` has a new method `fft_autopad` used to pad a small number of grid points to each axis such that the dimensions of the Field are favourable to FFTW * `postpic.Field` has a new method `adjust_stagger_to` to adjust the grid origin to match the grid origin of another field * `postpic.Field` has a new method `phase` to get the unwrapped phase of the field * `postpic.Field` has a new method `derivative` to calculate the derivative of a field * `postpic.Field` has new methods `flip` and `rot90` similar to `np.flip()` and `np.rot90()` * `postpic.Field.topolar` has new defaults for extent and shape * `postpic.Field.integrate` now uses the simpson method by default * `postpic.Field.integrate` now has a new 'fast' method that uses numexpr, suitable for large datasets * New module `postpic.experimental` to contain experimental algorithms for your reference. These algorithms are not meant to be useable asis, but may serve as recipes to write your own algorithms. * kspace reconstruction from EPOCH dumps has greatly improved accuracy due to a new algorithm correctly incorporating the frequency response of the implicit linear interpolation performed by EPOCH's halfsteps * `plotter_matplotlib.plotField` allows to override `aspect` option to `imshow`

v0.2.0
postpic v0.2.0 release. CHANGELOG: * add support for OpenPMD * remove simdimensions property from dumpreader * EPOCH reader can now read charge and mass of particles * python3 support * multiple grids are supported