def METHOD_NAME(self, *, token_uid: bytes, address: str, target_amount: int,
                         target_timestamp: Optional[int] = None) -> Iterator[UtxoIndexItem]:
    import math
    seek_timestamp: Union[int, float]
    if target_timestamp is None:
        seek_timestamp = math.inf
    else:
        seek_timestamp = target_timestamp
    subindex = self._index[_IndexKey(token_uid, address)].timelock
    # this will point to the next value that is equal or higher than target_amount
    idx_next_amount = subindex.bisect((seek_timestamp, target_amount)) + 1
    for i in subindex.islice(stop=idx_next_amount, reverse=True):
        # it might happen that the first one is out of the timestamp range
        if i.timelock > seek_timestamp:
            continue
        yield UtxoIndexItem(token_uid, i.tx_id, i.idx, address, i.amount, i.timelock, None)