Infer structure from Eigen matrix/vector.
63{
64 std::vector<Kakshya::DataDimension> dimensions;
66
67 using Scalar = typename EigenType::Scalar;
68
69 if constexpr (EigenType::IsVectorAtCompileTime) {
70 if constexpr (MayaFlux::ComplexData<Scalar>) {
71 dimensions.emplace_back(Kakshya::DataDimension::frequency(eigen_data.size()));
72 modality = Kakshya::DataModality::SPECTRAL_2D;
73 } else if constexpr (MayaFlux::DecimalData<Scalar>) {
74 dimensions.emplace_back(Kakshya::DataDimension::time(eigen_data.size()));
75 modality = Kakshya::DataModality::AUDIO_1D;
76 } else {
77 dimensions.emplace_back(Kakshya::DataDimension("vector_data", eigen_data.size(), 1,
78 Kakshya::DataDimension::Role::CUSTOM));
79 modality = Kakshya::DataModality::TENSOR_ND;
80 }
81 } else {
82 auto rows = eigen_data.rows();
83 auto cols = eigen_data.cols();
84
85 if constexpr (MayaFlux::ComplexData<Scalar>) {
86 dimensions.emplace_back(Kakshya::DataDimension::time(
rows,
"time_frames"));
87 dimensions.emplace_back(Kakshya::DataDimension::frequency(cols, "frequency_bins"));
88 modality = Kakshya::DataModality::SPECTRAL_2D;
89 } else if constexpr (MayaFlux::DecimalData<Scalar>) {
90 dimensions.emplace_back(Kakshya::DataDimension::time(
rows,
"samples"));
91 if (cols == 1) {
92 modality = Kakshya::DataModality::AUDIO_1D;
93 } else if (cols <= 16) {
94 dimensions.emplace_back(Kakshya::DataDimension::channel(cols));
95 modality = Kakshya::DataModality::AUDIO_MULTICHANNEL;
96 } else {
97 dimensions.emplace_back(Kakshya::DataDimension::frequency(cols, "features"));
98 modality = Kakshya::DataModality::SPECTRAL_2D;
99 }
100 } else if constexpr (MayaFlux::IntegerData<Scalar>) {
101 dimensions.emplace_back(Kakshya::DataDimension::spatial(
rows,
'y'));
102 dimensions.emplace_back(Kakshya::DataDimension::spatial(cols, 'x'));
103 modality = Kakshya::DataModality::IMAGE_2D;
104 } else {
105 dimensions.emplace_back(Kakshya::DataDimension(
"matrix_rows",
rows, 1,
106 Kakshya::DataDimension::Role::CUSTOM));
107 dimensions.emplace_back(Kakshya::DataDimension("matrix_cols", cols, 1,
108 Kakshya::DataDimension::Role::CUSTOM));
109 modality = Kakshya::DataModality::TENSOR_ND;
110 }
111 }
112
113 return std::make_pair(std::move(dimensions), modality);
114}
DataModality
Data modality types for cross-modal analysis.