C++14 (or later) is required to build the library, C++17 (or later) to build Python bindings.
Expect breaking changes, especially in Python bindings.
The lists below are not complete, but should cover most of the changes.
Library
* Added unified logging of warnings/errors from various gemmi functions (class Logger)
* replaced string `Model::name` with int `Model::num`
* mmcif: better handling of null auth_comp_id
* fixes for mmJSON
* Removed deprecated functions:
- UnitCell.fractionalization_matrix and orthogonalization_matrix – use frac.mat and orth.mat
- count_hydrogen_sites() – use has_hydrogen() or count_atom_sites(gemmi.Selection('[H,D]')
- Grid::resample_to() – use interpolate_grid()
* unified API of Grid interpolation functions. They now have parameter `order` that can be 0 (nearest value), 1 (linear interpolation), or 3 (cubic). In C++ there are also functions such as trilinear_interpolation() to ensure no overhead.
* to_pdb: write HET records
* Extended selection syntax with: `[metals]` and `[nonmetals]`.
* Added function set_is_metal() intended for debatable metalloids
* improved interoperability with MMDB (a CCP4 library)
* MonLib: removed `read_cif` args
* mtz: fixed writing BATCH records
* hydrogen placement: fixes needed for new files with metals in CCP4 Monomer Library
* pdb: fixed reading TLS S tensor
* Structure metadata: expanded RefinementInfo
Python
* Python bindings **migrated from pybind11 to nanobind**.
- Much lower runtime overhead, faster build times, better error diagnostics.
- Built-in typing stubs.
- Only Python 3.8+.
- Sadly, no support for Buffer Protocol. It was replaced with NumPy `__array__` methods.
For NumPy, you can also use `.array` properties that were available also in the previous releases.
- No implicit conversions from list to ndarray, and from bytes to string (let me know where it causes problems)
- gemmi.ValueSigmaAsuData.value_array has now shape (N,2)
* Added pickling support for Structure, Model, Chain, Residue, Atom, cif.Document, cif.Block.
* Added function interpolate_position_array (323).
* Python extension module is now installed into `site-packages/gemmi/` (this change should be invisible to the user)
Program
* gemmi convert --sifts-num is now more customizable
* gemmi sf2map: added option --check (see docs)
* gemmi cif2mtz: add a rule to spec to convert `pdbx_F_calc_with_solvent` to `F-model` (+phase)
* gemmi xds2mtz: handles merged files from XSCALE
* gemmi mtz2cif and merge: recognize extension .ahkl as XDS file