from typing import List
import pandas as pd
from IPython.display import display
def search(nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
value = nums[mid]
if value == target:
return mid
elif value < target:
left = mid + 1
else:
right = mid - 1
return -1
checks = [([-1,0,3,5,9,12], 9, 4),([-1,0,3,5,9,12], 2, -1)]
for nums, target, expected in checks:
traced_search = trace_vars("left", "mid", "right", "value", "target")(search)
result, steps = traced_search(nums, target)
display(pd.DataFrame(steps))
assert result == expected