/usr/local/lib64/python3.6/site-packages/torch/include/caffe2/utils
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/caffe2/utils/eigen_utils.h (6706B)
// Copyright 2004-present Facebook. All Rights Reserved.
#ifndef CAFFE2_OPERATORS_UTILS_EIGEN_H_
#define CAFFE2_OPERATORS_UTILS_EIGEN_H_
#include "Eigen/Core"
#include "Eigen/Dense"
#include
#include
namespace caffe2 {
// Common Eigen types that we will often use
template
using EigenMatrixMap =
Eigen::Map>;
template
using EigenArrayMap =
Eigen::Map>;
template
using EigenVectorMap = Eigen::Map>;
template
using EigenVectorArrayMap = Eigen::Map>;
template
using ConstEigenMatrixMap =
Eigen::Map>;
template
using ConstEigenArrayMap =
Eigen::Map>;
template
using ConstEigenVectorMap =
Eigen::Map>;
template
using ConstEigenVectorArrayMap =
Eigen::Map>;
using EigenOuterStride = Eigen::OuterStride;
using EigenInnerStride = Eigen::InnerStride;
using EigenStride = Eigen::Stride;
template
using EigenOuterStridedMatrixMap = Eigen::
Map, 0, EigenOuterStride>;
template
using EigenOuterStridedArrayMap = Eigen::
Map, 0, EigenOuterStride>;
template
using ConstEigenOuterStridedMatrixMap = Eigen::Map<
const Eigen::Matrix,
0,
EigenOuterStride>;
template
using ConstEigenOuterStridedArrayMap = Eigen::Map<
const Eigen::Array,
0,
EigenOuterStride>;
template
using EigenStridedMatrixMap = Eigen::
Map, 0, EigenStride>;
template
using EigenStridedArrayMap =
Eigen::Map, 0, EigenStride>;
template
using ConstEigenStridedMatrixMap = Eigen::
Map, 0, EigenStride>;
template
using ConstEigenStridedArrayMap = Eigen::
Map, 0, EigenStride>;
// 1-d array
template
using EArrXt = Eigen::Array;
using EArrXf = Eigen::ArrayXf;
using EArrXd = Eigen::ArrayXd;
using EArrXi = Eigen::ArrayXi;
using EArrXb = EArrXt;
using EArrXI32 = EArrXt;
using EArrXU16 = EArrXt;
using EArrXU8 = EArrXt;
using EArr3U8 = Eigen::Array;
// 2-d array, column major
template
using EArrXXt = Eigen::Array;
using EArrXXf = Eigen::ArrayXXf;
using EArrXXI32 = EArrXXt;
using EArrXXU16 = EArrXXt;
using EArrXXU8 = EArrXXt;
using EArrXXi = EArrXXt;
// 2-d array, row major
template
using ERArrXXt =
Eigen::Array;
using ERArrXXf = ERArrXXt;
using ERArrXXI32t = ERArrXXt;
using ERArrXXU16t = ERArrXXt;
using ERArrXXU8t = ERArrXXt;
using ERArrXXi = ERArrXXt;
using ERArrXXi64t = ERArrXXt;
using ERArrXXi32t = ERArrXXt;
// 1-d vector
template
using EVecXt = Eigen::Matrix;
using EVecXd = Eigen::VectorXd;
using EVecXf = Eigen::VectorXf;
// 1-d row vector
using ERVecXd = Eigen::RowVectorXd;
using ERVecXf = Eigen::RowVectorXf;
// 2-d matrix, column major
template
using EMatXt = Eigen::Matrix;
using EMatXd = Eigen::MatrixXd;
using EMatXf = Eigen::MatrixXf;
using EMatXU8 = EMatXt;
using EMatXU16 = EMatXt;
// 2-d matrix, row major
template
using ERMatXt =
Eigen::Matrix;
using ERMatXd = ERMatXt;
using ERMatXf = ERMatXt;
using ERMatXU8 = ERMatXt;
namespace utils {
template
Eigen::Map> AsEArrXt(const std::vector& arr) {
return {arr.data(), static_cast(arr.size())};
}
template
Eigen::Map> AsEArrXt(std::vector& arr) {
return {arr.data(), static_cast(arr.size())};
}
// return a sub array of 'array' based on indices 'indices'
template
void GetSubArray(
const Eigen::ArrayBase& array,
const Eigen::ArrayBase& indices,
Eigen::ArrayBase* out_array) {
CAFFE_ENFORCE_EQ(array.cols(), 1);
// using T = typename Derived::Scalar;
out_array->derived().resize(indices.size());
for (const auto i : c10::irange(indices.size())) {
DCHECK_LT(indices[i], array.size());
(*out_array)[i] = array[indices[i]];
}
}
// return a sub array of 'array' based on indices 'indices'
template
EArrXt GetSubArray(
const Eigen::ArrayBase& array,
const Eigen::ArrayBase& indices) {
using T = typename Derived::Scalar;
EArrXt ret(indices.size());
GetSubArray(array, indices, &ret);
return ret;
}
// return a sub array of 'array' based on indices 'indices'
template
EArrXt GetSubArray(
const Eigen::ArrayBase& array,
const std::vector& indices) {
return GetSubArray(array, AsEArrXt(indices));
}
// return 2d sub array of 'array' based on row indices 'row_indices'
template
void GetSubArrayRows(
const Eigen::ArrayBase& array2d,
const Eigen::ArrayBase& row_indices,
Eigen::ArrayBase* out_array) {
out_array->derived().resize(row_indices.size(), array2d.cols());
for (const auto i : c10::irange(row_indices.size())) {
DCHECK_LT(row_indices[i], array2d.size());
out_array->row(i) =
array2d.row(row_indices[i]).template cast();
}
}
// return indices of 1d array for elements evaluated to true
template
std::vector GetArrayIndices(const Eigen::ArrayBase& array) {
std::vector ret;
for (const auto i : c10::irange(array.size())) {
if (array[i]) {
ret.push_back(i);
}
}
return ret;
}
} // namespace utils
} // namespace caffe2
#endif