Computes the dot product between a matrix and a vector.
    TODO: Make this more generic

    Args:
        matrix (TYPE): Description
        vector (TYPE): Description

def dot(matrix, vector):
    """
    Computes the dot product between a matrix and a vector.
    TODO: Make this more generic

    Args:
        matrix (TYPE): Description
        vector (TYPE): Description
    """
    matrix_weld_type = None
    vector_weld_type = None

    if isinstance(matrix, LazyOpResult):
        matrix_weld_type = matrix.weld_type
        matrix = matrix.expr
    elif isinstance(matrix, np.ndarray):
        matrix_weld_type = numpy_weld_impl.numpy_to_weld_type_mapping[
            str(matrix.dtype)]

    if isinstance(vector, LazyOpResult):
        vector_weld_type = vector.weld_type
        vector = vector.expr
    elif isinstance(vector, np.ndarray):
        vector_weld_type = numpy_weld_impl.numpy_to_weld_type_mapping[
            str(vector.dtype)]

    return NumpyArrayWeld(
        numpy_weld_impl.dot(
            matrix,
            vector,
            matrix_weld_type,
            vector_weld_type),
        WeldDouble())