def METHOD_NAME(deltas, h_dist, v_sound):
    """
    deltas:
        numpy array of shape (4,) where data[i] = time delay from h_0 to h_i
    h_dist:
        the unit distance from any hydrophone_i(i!=0) to hydrophone_0 in meters
    v_sound:
        speed of sound in water (meters / sec)
    returns:
        numpy array of unit vector towards the pinger (in hydrophone frame) *NOTE: the hydrophone
            array has symmetry along the z axis, so we always assume the pinger is below us*
    assumes hydrophone arrangement:
        h_0 = (0, 0, 0)
        h_1 = (1, 0, 0) * h_dist
        h_2 = (-1,0, 0) * h_dist
        h_3 = (0, 1, 0) * h_dist
    Design:
                 x_hat * delta_i * v_sound
                  |
                  \\/
    (pressure |------>0  <-h_i
    wave)     |    __/
    x_hat---->| __/  <----h_dist
    (unit vec)|/
              0------->
             /     /\
        h_0 /      |
     (origin)    x_hat.h_i (dot product => scalar)
            x_hat.h_i = ||x_hat * delta_i * v_sound|| =>
            x_hat.h_i = delta_i * v_sound
    """
    if numpy.max(deltas) > h_dist / float(v_sound):
        raise Exception(
            "an impossible time delay was detected ( > %f)" % float(h_dist / v_sound),
        )
    x = numpy.zeros((3,))
    # average the values from h1 and h3 since on the same axis
    x[0] = -1 * (((deltas[1] * v_sound / h_dist) - (deltas[2] * v_sound / h_dist)) / 2)
    x[1] = deltas[3] * v_sound / h_dist
    x *= -1
    # since x is a unit vector and we know that the pinger is below us
    if x[0] ** 2 + x[1] ** 2 >= 1.0:
        x /= numpy.linalg.norm(x)
    else:
        x[2] = numpy.sqrt(1 - (x[0] ** 2 + x[1] ** 2))
    if True in numpy.isnan(x):
        raise Exception("nans: ", x)
    return -1 * x