code: def jacobian(sess, x, grads, target, X, nb_features, nb_classes, feed=None):
    
    warnings.warn(
        "This function is dead code and will be removed on or after 2019-07-18")
  
    # Prepare feeding dictionary for all gradient computations
    feed_dict = {x: X}
    if feed is not None:
      feed_dict.update(feed)
  
    # Initialize a numpy array to hold the Jacobian component values
    jacobian_val = np.zeros((nb_classes, nb_features), dtype=np_dtype)
  
    # Compute the gradients for all classes
    for class_ind, grad in enumerate(grads):
      run_grad = sess.run(grad, feed_dict)
      jacobian_val[class_ind] = np.reshape(run_grad, (1, nb_features))
  
    # Sum over all classes different from the target class to prepare for
    # saliency map computation in the next step of the attack
    other_classes = utils.other_classes(nb_classes, target)
    grad_others = np.sum(jacobian_val[other_classes, :], axis=0)
  
    return jacobian_val[target], grad_others
docs: TensorFlow implementation of the foward derivative / Jacobian
    :param x: the input placeholder
    :param grads: the list of TF gradients returned by jacobian_graph()
    :param target: the target misclassification class
    :param X: numpy array with sample input
    :param nb_features: the number of features in the input
    :return: matrix of forward derivatives flattened into vectors