class_docstr: Test that SoftmaxCrossEntropyWithLogits operates reproducibly.
  
  Inheriting from xent_op_test_base.XentTestBase ensures that regular op
  functionality is correct when the deterministic code-path is selected.
  
  Note that because nn_ops.softmax_cross_entropy_with_logits calls
  nn_ops.cross_entropy_with_logits_v2, the focus of testing is on the
  former in order to test both.
docstr: Modify testing of gradient for single-class case.
  
  The deterministic implementation does not produce the gradients expected by
  the original test (for the nondeterministic functionality) when the labels
  vector is not a valid probability distribution.
  
  labels: [[-1.], [0.], [1.], [1.]]
  logits: [[1.], [-1.], [0.], [1.]]
  
                 nondeterministic               deterministic
  dloss/dlogits: [[2.0], [1.0], [0.0], [0.0]]   [[0.0], [0.0], [0.0], [0.0]]
  
  Note that only the second two label vectors are valid probability
  distributions (as required by the API) and that the gradient matches for
  those cases.
  
  TODO(duncanriach): Further investigate the source of the difference in
                     the gradients for this case.
docstr_tok: ["Modify","testing","of","gradient","for","single-class","case",".","The","deterministic","implementation","does","not","produce","the","gradients","expected","by","the","original","test","(","for","the","nondeterministic","functionality",")","when","the","labels","vector","is","not","a","valid","probability","distribution",".","labels",":","[","[","-1",".","]",",","[","0",".","]",",","[","1",".","]",",","[","1",".","]","]","logits",":","[","[","1",".","]",",","[","-1",".","]",",","[","0",".","]",",","[","1",".","]","]","nondeterministic","deterministic","dloss\/dlogits",":","[","[","2.0","]",",","[","1.0","]",",","[","0.0","]",",","[","0.0","]","]","[","[","0.0","]",",","[","0.0","]",",","[","0.0","]",",","[","0.0","]","]","Note","that","only","the","second","two","label","vectors","are","valid","probability","distributions","(","as","required","by","the","API",")","and","that","the","gradient","matches","for","those","cases",".","TODO","(","duncanriach",")",":","Further","investigate","the","source","of","the","difference","in","the","gradients","for","this","case","."]
code: def testSingleClass(self):
      """Modify testing of gradient for single-class case.
  
      The deterministic implementation does not produce the gradients expected by
      the original test (for the nondeterministic functionality) when the labels
      vector is not a valid probability distribution.
  
      labels: [[-1.], [0.], [1.], [1.]]
      logits: [[1.], [-1.], [0.], [1.]]
  
                     nondeterministic               deterministic
      dloss/dlogits: [[2.0], [1.0], [0.0], [0.0]]   [[0.0], [0.0], [0.0], [0.0]]
  
      Note that only the second two label vectors are valid probability
      distributions (as required by the API) and that the gradient matches for
      those cases.
  
      TODO(duncanriach): Further investigate the source of the difference in
                         the gradients for this case.
      """
      self._testSingleClass(
          expected_gradient=[[0.0], [0.0], [0.0], [0.0]]
      )
  
imports: import numpy
  from tensorflow.python.eager import backprop
  from tensorflow.python.framework import config
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import errors_impl
  from tensorflow.python.framework import test_util
  from tensorflow.python.kernel_tests.nn_ops import xent_op_test_base
  from tensorflow.python.ops import gen_nn_ops
  from tensorflow.python.ops import nn_ops
  from tensorflow.python.ops.nn_grad import _SoftmaxCrossEntropyWithLogitsGrad
  from tensorflow.python.platform import test
label_desc: Use image node_id 5 for calling the XentOpDeterministicTest obj's underlying member method code with example usage: obj.testSingleClass() without return types