import tensorflow as tf

    def get_symbolic_attribution(self):
        return [g * x for g, x in zip(
            tf.gradients(ys=self.T, xs=self.X),
            self.X if self.has_multiple_inputs else [self.X])]

    @classmethod
    def nonlinearity_grad_override(cls, op, grad):
        output = op.outputs[0]
        input = op.inputs[0]
        return grad * output / (input + eps *
                                tf.compat.v1.where(input >= 0, tf.ones_like(input), -1 * tf.ones_like(input)))


"""
Integrated Gradients
https://arxiv.org/pdf/1703.01365.pdf
"""
class IntegratedGradients(GradientBasedMethod):
    def __init__(self, T, X, session, keras_learning_phase, steps=100, baseline=None, Y_shape=None):
        self.steps = steps
