hasktorch-ffi-th-0.0.1.0: cbits/expand_polyfill.c
#include "TH/THTensor.h"
#include "TH/THStorage.h"
THByteTensor* THByteTensor_newExpand(THByteTensor *tensor, THLongStorage *sizes) {
THByteTensor *result = THByteTensor_new();
THByteTensor_expand(result, tensor, sizes);
return result;
}
void THByteTensor_expand(THByteTensor *r, THByteTensor *tensor, THLongStorage *sizes) {
THArgCheck(THByteTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THByteTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THByteTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THByteTensor_setStorageNd(r, THByteTensor_storage(tensor), THByteTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THByteTensor_expandNd(THByteTensor **rets, THByteTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THByteTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THByteTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Byte:
THCharTensor* THCharTensor_newExpand(THCharTensor *tensor, THLongStorage *sizes) {
THCharTensor *result = THCharTensor_new();
THCharTensor_expand(result, tensor, sizes);
return result;
}
void THCharTensor_expand(THCharTensor *r, THCharTensor *tensor, THLongStorage *sizes) {
THArgCheck(THCharTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THCharTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THCharTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THCharTensor_setStorageNd(r, THCharTensor_storage(tensor), THCharTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THCharTensor_expandNd(THCharTensor **rets, THCharTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THCharTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THCharTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Char:
THShortTensor* THShortTensor_newExpand(THShortTensor *tensor, THLongStorage *sizes) {
THShortTensor *result = THShortTensor_new();
THShortTensor_expand(result, tensor, sizes);
return result;
}
void THShortTensor_expand(THShortTensor *r, THShortTensor *tensor, THLongStorage *sizes) {
THArgCheck(THShortTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THShortTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THShortTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THShortTensor_setStorageNd(r, THShortTensor_storage(tensor), THShortTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THShortTensor_expandNd(THShortTensor **rets, THShortTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THShortTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THShortTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Short:
THIntTensor* THIntTensor_newExpand(THIntTensor *tensor, THLongStorage *sizes) {
THIntTensor *result = THIntTensor_new();
THIntTensor_expand(result, tensor, sizes);
return result;
}
void THIntTensor_expand(THIntTensor *r, THIntTensor *tensor, THLongStorage *sizes) {
THArgCheck(THIntTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THIntTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THIntTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THIntTensor_setStorageNd(r, THIntTensor_storage(tensor), THIntTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THIntTensor_expandNd(THIntTensor **rets, THIntTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THIntTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THIntTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Int:
THLongTensor* THLongTensor_newExpand(THLongTensor *tensor, THLongStorage *sizes) {
THLongTensor *result = THLongTensor_new();
THLongTensor_expand(result, tensor, sizes);
return result;
}
void THLongTensor_expand(THLongTensor *r, THLongTensor *tensor, THLongStorage *sizes) {
THArgCheck(THLongTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THLongTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THLongTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THLongTensor_setStorageNd(r, THLongTensor_storage(tensor), THLongTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THLongTensor_expandNd(THLongTensor **rets, THLongTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THLongTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THLongTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Long:
THHalfTensor* THHalfTensor_newExpand(THHalfTensor *tensor, THLongStorage *sizes) {
THHalfTensor *result = THHalfTensor_new();
THHalfTensor_expand(result, tensor, sizes);
return result;
}
void THHalfTensor_expand(THHalfTensor *r, THHalfTensor *tensor, THLongStorage *sizes) {
THArgCheck(THHalfTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THHalfTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THHalfTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THHalfTensor_setStorageNd(r, THHalfTensor_storage(tensor), THHalfTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THHalfTensor_expandNd(THHalfTensor **rets, THHalfTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THHalfTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THHalfTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Half:
THFloatTensor* THFloatTensor_newExpand(THFloatTensor *tensor, THLongStorage *sizes) {
THFloatTensor *result = THFloatTensor_new();
THFloatTensor_expand(result, tensor, sizes);
return result;
}
void THFloatTensor_expand(THFloatTensor *r, THFloatTensor *tensor, THLongStorage *sizes) {
THArgCheck(THFloatTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THFloatTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THFloatTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THFloatTensor_setStorageNd(r, THFloatTensor_storage(tensor), THFloatTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THFloatTensor_expandNd(THFloatTensor **rets, THFloatTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THFloatTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THFloatTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Float:
THDoubleTensor* THDoubleTensor_newExpand(THDoubleTensor *tensor, THLongStorage *sizes) {
THDoubleTensor *result = THDoubleTensor_new();
THDoubleTensor_expand(result, tensor, sizes);
return result;
}
void THDoubleTensor_expand(THDoubleTensor *r, THDoubleTensor *tensor, THLongStorage *sizes) {
THArgCheck(THDoubleTensor_nDimension(tensor) > 0, 0, "can't expand an empty tensor");
THArgCheck(THLongStorage_size(sizes) >= THDoubleTensor_nDimension(tensor), 1,
"the number of sizes provided must be greater or equal to the "
"number of dimensions in the tensor");
long *expandedSizes;
long *expandedStrides;
char error_buffer[1024];
int ret =
THLongStorage_inferExpandGeometry(tensor->size, tensor->stride, THDoubleTensor_nDimension(tensor),
sizes, &expandedSizes, &expandedStrides, error_buffer, 1024);
if (ret != 0) {
THError(error_buffer);
return;
}
THDoubleTensor_setStorageNd(r, THDoubleTensor_storage(tensor), THDoubleTensor_storageOffset(tensor),
THLongStorage_size(sizes), expandedSizes, expandedStrides);
THFree(expandedSizes);
THFree(expandedStrides);
}
void THDoubleTensor_expandNd(THDoubleTensor **rets, THDoubleTensor **ops, int count) {
for (int i = 0; i < count; ++i) {
THArgCheck(THDoubleTensor_nDimension(ops[i]) > 0, i, "can't expand empty tensor %d", i);
}
long *op_sizes[count];
long op_dims[count];
for (int i = 0; i < count; ++i) {
op_sizes[i] = ops[i]->size;
op_dims[i] = ops[i]->nDimension;
}
THLongStorage *sizes = THLongStorage_new();
char error_buffer[1024];
int ret = THLongStorage_inferSizeN(sizes,
count,
op_sizes,
op_dims,
error_buffer,
1024);
if(ret != 0) {
THLongStorage_free(sizes);
THError(error_buffer);
return;
}
for (int i = 0; i < count; ++i) {
THDoubleTensor_expand(rets[i], ops[i], sizes);
}
THLongStorage_free(sizes);
}
// Polyfilling expand functions for Double: