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