(op *Operation, cname *C.char, meta C.TF_AttrMetadata)
| 182 | } |
| 183 | |
| 184 | func scalarAttribute(op *Operation, cname *C.char, meta C.TF_AttrMetadata) (interface{}, error) { |
| 185 | status := newStatus() |
| 186 | |
| 187 | switch meta._type { |
| 188 | case C.TF_ATTR_STRING: |
| 189 | if meta.total_size == 0 { |
| 190 | return "", nil |
| 191 | } |
| 192 | v := make([]C.char, meta.total_size) |
| 193 | C.TF_OperationGetAttrString(op.c, cname, unsafe.Pointer(&v[0]), C.size_t(meta.total_size), status.c) |
| 194 | if err := status.Err(); err != nil { |
| 195 | return nil, err |
| 196 | } |
| 197 | return C.GoStringN(&v[0], C.int(meta.total_size)), nil |
| 198 | |
| 199 | case C.TF_ATTR_INT: |
| 200 | var v C.int64_t |
| 201 | C.TF_OperationGetAttrInt(op.c, cname, &v, status.c) |
| 202 | return int64(v), status.Err() |
| 203 | |
| 204 | case C.TF_ATTR_FLOAT: |
| 205 | var v C.float |
| 206 | C.TF_OperationGetAttrFloat(op.c, cname, &v, status.c) |
| 207 | return float32(v), status.Err() |
| 208 | |
| 209 | case C.TF_ATTR_BOOL: |
| 210 | var v C.uchar |
| 211 | C.TF_OperationGetAttrBool(op.c, cname, &v, status.c) |
| 212 | return v == 1, status.Err() |
| 213 | |
| 214 | case C.TF_ATTR_TYPE: |
| 215 | var v C.TF_DataType |
| 216 | C.TF_OperationGetAttrType(op.c, cname, &v, status.c) |
| 217 | return DataType(v), status.Err() |
| 218 | |
| 219 | case C.TF_ATTR_TENSOR: |
| 220 | var v *C.TF_Tensor |
| 221 | C.TF_OperationGetAttrTensor(op.c, cname, &v, status.c) |
| 222 | if err := status.Err(); err != nil { |
| 223 | return nil, err |
| 224 | } |
| 225 | return newTensorFromC(v), nil |
| 226 | |
| 227 | case C.TF_ATTR_SHAPE: |
| 228 | numDims := meta.total_size |
| 229 | // If number of dims is unknown return empty shape to indicate that. |
| 230 | if numDims < 0 { |
| 231 | return Shape{}, nil |
| 232 | } |
| 233 | if numDims == 0 { |
| 234 | return ScalarShape(), nil |
| 235 | } |
| 236 | dims := make([]C.int64_t, numDims) |
| 237 | C.TF_OperationGetAttrShape(op.c, cname, (*C.int64_t)(unsafe.Pointer(&dims[0])), C.int(numDims), status.c) |
| 238 | if err := status.Err(); err != nil { |
| 239 | return nil, err |
| 240 | } |
| 241 | return makeCShape(dims), nil |
no test coverage detected