1#ifndef CHIHAYA_MATRIX_PRODUCT_HPP
2#define CHIHAYA_MATRIX_PRODUCT_HPP
5#include "ritsuko/ritsuko.hpp"
11#include "utils_misc.hpp"
12#include "utils_nary.hpp"
24inline std::pair<ArrayDetails, bool> fetch_matprod_seed(
25 const H5::Group& group,
26 const std::string& target,
27 const std::string& orientation,
28 const ritsuko::Version& version,
29 const Options& options
31 auto seed_details = fetch_numeric_seed(group, target, version, options);
32 if (seed_details.dimensions.size() != 2) {
33 throw std::runtime_error(
"expected '" + target +
"' to be a 2-dimensional array for a matrix product");
36 auto oristr = load_scalar_string_dataset(group, orientation);
37 if (oristr !=
"N" && oristr !=
"T") {
38 throw std::runtime_error(
"'" + orientation +
"' should be either 'N' or 'T' for a matrix product");
41 return std::pair<ArrayDetails, bool>(seed_details, oristr ==
"T");
56 auto left_details = fetch_matprod_seed(group,
"left_seed",
"left_orientation", version, options);
57 auto right_details = fetch_matprod_seed(group,
"right_seed",
"right_orientation", version, options);
63 I<
decltype(nrow)> common, common2;
65 if (left_details.second) {
66 nrow = left_details.first.dimensions[1];
67 common = left_details.first.dimensions[0];
69 nrow = left_details.first.dimensions[0];
70 common = left_details.first.dimensions[1];
73 if (right_details.second) {
74 ncol = right_details.first.dimensions[0];
75 common2 = right_details.first.dimensions[1];
77 ncol = right_details.first.dimensions[1];
78 common2 = right_details.first.dimensions[0];
82 if (common != common2) {
83 throw std::runtime_error(
"inconsistent common dimensions (" + std::to_string(common) +
" vs " + std::to_string(common2) +
")");
87 if (left_details.first.type == FLOAT || right_details.first.type == FLOAT) {
90 output.
type = INTEGER;
Namespace for all chihaya functions.
Definition binary_arithmetic.hpp:20
ArrayDetails validate_matrix_product(const H5::Group &group, const ritsuko::Version &version, const Options &options)
Definition matrix_product.hpp:55
Details about an array.
Definition utils_public.hpp:37
std::vector< std::size_t > dimensions
Definition utils_public.hpp:57
ArrayType type
Definition utils_public.hpp:51
Validation options.
Definition utils_public.hpp:67
bool details_only
Definition utils_public.hpp:72
Various public utilities.