Get the indexer for the nearest index labels; requires an index with values that can be subtracted from each other (e.g., not strings or tuples).
(
self, target: Index, limit: int | None, tolerance
)
| 3969 | |
| 3970 | @final |
| 3971 | def _get_nearest_indexer( |
| 3972 | self, target: Index, limit: int | None, tolerance |
| 3973 | ) -> npt.NDArray[np.intp]: |
| 3974 | """ |
| 3975 | Get the indexer for the nearest index labels; requires an index with |
| 3976 | values that can be subtracted from each other (e.g., not strings or |
| 3977 | tuples). |
| 3978 | """ |
| 3979 | if not len(self): |
| 3980 | return self._get_fill_indexer(target, "pad") |
| 3981 | |
| 3982 | left_indexer = self.get_indexer(target, "pad", limit=limit) |
| 3983 | right_indexer = self.get_indexer(target, "backfill", limit=limit) |
| 3984 | |
| 3985 | left_distances = self._difference_compat(target, left_indexer) |
| 3986 | right_distances = self._difference_compat(target, right_indexer) |
| 3987 | |
| 3988 | op = operator.lt if self.is_monotonic_increasing else operator.le |
| 3989 | indexer = np.where( |
| 3990 | # error: Argument 1&2 has incompatible type "Union[ExtensionArray, |
| 3991 | # ndarray[Any, Any]]"; expected "Union[SupportsDunderLE, |
| 3992 | # SupportsDunderGE, SupportsDunderGT, SupportsDunderLT]" |
| 3993 | op(left_distances, right_distances) # type: ignore[arg-type] |
| 3994 | | (right_indexer == -1), |
| 3995 | left_indexer, |
| 3996 | right_indexer, |
| 3997 | ) |
| 3998 | if tolerance is not None: |
| 3999 | indexer = self._filter_indexer_tolerance(target, indexer, tolerance) |
| 4000 | return indexer |
| 4001 | |
| 4002 | @final |
| 4003 | def _filter_indexer_tolerance( |
no test coverage detected