Update inequality in get_linear_interpolated_value
#4299
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a small but important fix for the
get_linear_interpolated_value
function inpymatgen.util.coord
, used in various places within the codebase.This function works by finding the first index in
x_values
that is greater than / equal tox
, and then uses this index and the previous (idx-1
) withx_values
andy_values
to interpolate:https://github.com/materialsproject/pymatgen/blob/v2025.2.18/src/pymatgen/util/coord.py#L136-L147
The issue is that if the first index in
x_values
is equal tox
, this causes the ValueError to be thrown (asindices[0]==0
); where it thinks that the inputx
to interpolate is outside the interpolable range. Changing the inequality to>
rather than>=
resolves this issue.MWE:
Current

pymatgen
master
:Where we can see "
x=0.0001 is out of range of provided x_values (0.0001, 0.0002)
" does not make sense.This branch:

And confirming the error is still correctly thrown with an

x
value that is actually outside the range: