Requires pymatgen-core>=2026.9.23. See the (pymatgen-core) entries below for changes to the core data structures and IO.
- PR #4684
XRDCalculator.get_pattern: compute atomic form factors once per unique element instead of once per atom, replacing the(M, N_atoms, n_coeff)broadcast with per-element(M, n_coeff)work and occupancy-weighted phase sums; cuts both runtime and peak memory on large structures. (by @mkphuthi) - PR #4678 Vectorize the neutron
get_patternpath and expand its test coverage. (by @Bud-Macaulay) - PR #4661 Vectorize
get_patternin the xrd module; fix a hang at high tolerance. (by @Bud-Macaulay) - PR #4655 Genericise
AflowPrototypeMatcherso it is no longer tied to AFLOW-specific prototype data. (by @CompRhys) - PR #4699
MagneticStructureEnumeratorgains whole-motif flip orderings (originferri_by_motif_{symbols}_flip) under theferrimagnetic_by_motifstrategy: each magnetic Wyckoff motif stays internally ferromagnetic and one or more motifs are flipped as rigid blocks, e.g. the Néel ground state of a spinel ferrimagnet such as Fe3O4, which the existing order-parameter constraints could only reach incidentally. The orderings are built directly (no enumeration), n motifs give 2^(n-1) - 1 of them, and all retain full crystal symmetry. Magnetic Wyckoff symbols are now iterated in a sorted order, so recorded origins no longer vary withPYTHONHASHSEED. (by @Luguza) - PR #4704
MaterialsProjectDFTMixingScheme.process_entriesis now reproducible. Entries were ordered vialist(EntrySet(...)), i.e.setiteration order, so the result varied withPYTHONHASHSEED, and the greedy, directionalStructureMatcher.group_structuresthen paired GGA and r²SCAN entries differently from run to run (a different Si–Se hull on 3 of 8 hash seeds). Entries are now sorted with a total order and grouped withsymmetric=True(pymatgen-core #133). Primitive and conventional cells of one material are no longer split beforeStructureMatchersees them, which had silently discarded r²SCAN entries. Fixes #3113 and #4261. (by @kavanase) - PR #4702
MagneticStructureEnumeratorduplicate-ordering pruning now runs: the guard was inverted (if len(structures_to_remove) == 0), so detected duplicates were logged and then kept. Behavior change: inputs that produce symmetry-equivalent orderings now return fewer structures, and the O(N²)matches_orderingpass has a real cost. Fixes #4697. (by @fronzi) - PR #4682
MagneticStructureEnumerator._generate_ordered_structures: honor the configuredtruncate_by_symmetrycount instead of the hardcoded[:5]slice. (by @steps-re) - PR #4685
TEMCalculator.get_interplanar_anglereturned wrong angles (off by several degrees) for monoclinic and triclinic cells: thek·lreciprocal cross term usedcos γ*instead ofcos α*, and theh·lterm had an index typo. Cubic, tetragonal and hexagonal results are unchanged. (by @steps-re) MPRester.get_entriesnormalizesentry_idvalues that newer Materials Project API responses serialize as a dict (identifier/suffix/separator) back to the canonical string form (e.g.mp-1234-GGA+U), so entry IDs stay hashable and comparable. (by @shyuep)- PR #4693 Fix
pmg analyze --mag All. Fixes #4691. (by @DanielYang59) - PR #4666 Fix
HeisenbergModelMSON round-trip:from_dictnow accepts thejsanitized dict form ofex_mat(previouslyliteral_evalraisedValueError), tolerates the legacy string form, and falls back to an empty matrix. (by @vasa-develop) - PR #4658 Strip H/O from the
PourbaixDiagramcomposition dict. (by @SAY-5) - PR #4687 Document that
CoherentInterfaceBuilder'slabel_indexcontrols termination deduplication: without it, terminations sharing the same space-group symmetry are merged, which can silently drop physically inequivalent terminations. Fixes #4572. (by @khanaiml) - PR #4672 Fix typo and docstring in
polarization.py. (by @mminotaki)