 idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]
 ```
 
-_inputArg
- x:: .T 
-_outputArg
-
-_outputArg
- y::T  idx::out_idx 
-
-*/
-
-
-
-// TODO - in the return parameters use an index Output(0) // output(1) etc
-// TODO - work out a way to skip extroneous , eg. param,param, )
-// TODO - Not all return types are output eg.
-// func ResourceSparseApplyRMSProp(scope *Scope, var_ tf.Output, ms tf.Output, mom tf.Output, lr tf.Output, rho tf.Output, momentum tf.Output, epsilon tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyRMSPropAttr) (o *tf.Operation)
-
-
-
-
-
-
-func unique(scope:Scope,x: tf.Output)  -> (y: tf.Output, idx: tf.Output){
-    if scope.error() != nil {
-        return
-    }
-
-
+*/
+
+
+
+
+
+func unique(scope:Scope,x: tf.OutputT :type, out_idx :type)  ->(y: tf.Output, idx: tf.Output){
+    if scope.error() != nil {
+        return
+    }
     let opspec = tf.OpSpec(
         Type: "Unique",
-        Input: [  x, )]
-        Attrs: attrs
-    )
-
-
-
-        let op = scope.AddOperation(opspec)
-        return (op.Output(1),op.Output(2))
-
+        Input: [ x]
+        Attrs: attrs
+    )
+    let op = scope.AddOperation(opspec)
+    return (op.Output(1 -1),op.Output(2 -1))
 }
 
 /*

<img style="width:100%" src="https://www.tensorflow.org/images/ScatterSub.png" alt>
</div>

_inputArg
 ref:: .T  indices:: .Tindices  updates:: .T 
_outputArg

_outputArg
 output_ref::T 

*/



// TODO - in the return parameters use an index Output(0) // output(1) etc
// TODO - work out a way to skip extroneous , eg. param,param, )
// TODO - Not all return types are output eg.
// func ResourceSparseApplyRMSProp(scope *Scope, var_ tf.Output, ms tf.Output, mom tf.Output, lr tf.Output, rho tf.Output, momentum tf.Output, epsilon tf.Output, grad tf.Output, indices tf.Output, optional ...ResourceSparseApplyRMSPropAttr) (o *tf.Operation)






func scatterSub(scope:Scope,ref: tf.Output, indices: tf.Output, updates: tf.Output)  -> (output_ref: tf.Output){
    if scope.error() != nil {
        return
    }


    let opspec = tf.OpSpec(
        Type: "ScatterSub",
        Input: [  ref,  indices,  updates, )]
        Attrs: attrs
    )



        let op = scope.AddOperation(opspec)
        return (op.Output(1))

}

/*

`reduction_indices`. If `keep_dims` is true, the reduced dimensions are
retained with length 1.

*/





func sum(scope:Scope,input: tf.Output, reductionIndices: tf.Outputkeep_dims :bool, T :type, Tidx :type)  ->(output: tf.Output){
    if scope.error() != nil {
        return
    }
    let opspec = tf.OpSpec(
        Type: "Sum",
        Input: [ input, reductionIndices]
        Attrs: attrs
    )
    let op = scope.AddOperation(opspec)
    return (op.Output(1 -1))
}

/*
