code: func NewOp(op OpTensorOp, dt DataType, prop NanPropagation) (*Op, error) {
  	var internal C.cudnnOpTensorDescriptor_t
  	if err := result(C.cudnnCreateOpTensorDescriptor(&internal)); err != nil {
  		return nil, err
  	}
  
  	if err := result(C.cudnnSetOpTensorDescriptor(internal, op.C(), dt.C(), prop.C())); err != nil {
  		return nil, err
  	}
  	retVal := &Op{
  		internal:       internal,
  		op:             op,
  		dataType:       dt,
  		nanPropagation: prop,
  	}
  	runtime.SetFinalizer(retVal, destroyOp)
  	return retVal, nil
  }
docs: // NewOp creates a new Op with the provided settings