import tensorflow as tf
import numpy
model = tf.keras.models.load_model('./model/trained_model.keras', safe_mode=False, compile=False)

# Show the model architecture
model.summary()

# GRADED FUNCTION: predict
def predict(question1, question2, threshold, verbose=False):
    """Function for predicting if two questions are duplicates.

    Args:
        question1 (str): First question.
        question2 (str): Second question.
        threshold (float): Desired threshold.
        verbose (bool, optional): If the results should be printed out. Defaults to False.

    Returns:
        bool: True if the questions are duplicates, False otherwise.
    """
    generator = tf.data.Dataset.from_tensor_slices((([question1], [question2]),None)).batch(batch_size=1)
    
    ### START CODE HERE ###
    
    # Call the predict method of your model and save the output into v1v2
    v1v2 = model.predict(generator)
    out_size = v1v2.shape[1]
    # Extract v1 and v2 from the model output
    v1 = v1v2[:,:int(out_size/2)]
    v2 = v1v2[:,int(out_size/2):]
    print(v1.shape)
    # Take the dot product to compute cos similarity of each pair of entries, v1, v2
    # Since v1 and v2 are both vectors, use the function tf.math.reduce_sum instead of tf.linalg.matmul
    d = tf.reduce_sum(v1 * v2)
    # Is d greater than the threshold?
    res = d > threshold

    ### END CODE HERE ###
    
    if(verbose):
        print("Q1  = ", question1, "\nQ2  = ", question2)
        print("d   = ", d.numpy())
        print("res = ", res.numpy())

    return d.numpy(), res.numpy()