# Source code for quantecon.util.array

"""
Array Utilities
===============

Array
-----
searchsorted

"""

import numpy as np
from numba import jit

# ----------------- #
# -ARRAY UTILITIES- #
# ----------------- #

[docs]@jit(nopython=True)
def searchsorted(a, v):
"""
Custom version of np.searchsorted. Return the largest index i such
that a[i-1] <= v < a[i] (for i = 0, v < a[0]); if v[n-1] <=
v, return n, where n = len(a).

Parameters
----------
a : ndarray(float, ndim=1)
Input array. Must be sorted in ascending order.

v : scalar(float)
Value to be compared with elements of a.

Returns
-------
scalar(int)
Largest index i such that a[i-1] <= v < a[i], or len(a) if
no such index exists.

Notes
-----
This routine is jit-complied if the module Numba is vailable; if
not, it is an alias of np.searchsorted(a, v, side='right').

Examples
--------
>>> a = np.array([0.2, 0.4, 1.0])
>>> searchsorted(a, 0.1)
0
>>> searchsorted(a, 0.4)
2
>>> searchsorted(a, 2)
3

"""
lo = -1
hi = len(a)
while(lo < hi-1):
m = (lo + hi) // 2
if v < a[m]:
hi = m
else:
lo = m
return hi