validation.cpp serif/solver/normalization/detail/validation.hpp cmath vector serif/utils/error/errors.hpp serif serif::solver serif::solver::normalization serif::solver::normalization::detail #include"serif/solver/normalization/detail/validation.hpp" #include<cmath> #include<vector> #include"serif/utils/error/errors.hpp" namespaceserif::solver::normalization::detail { std::expected<void,std::string>validate_factors(std::span<constdouble>factors) { usingnamespaceutils::errors; for(std::size_tindex=0;index<factors.size();++index) { if(!std::isfinite(factors[index])||factors[index]<=0.0) { returnstd::unexpected(format_error_message<SERiFErrorCode::NORMALIZATION_ERROR>("Normalizationfactor{}isnotfiniteandpositive(received{}).Supplyfinitepositivefactorsforthedeclaredcoordinate.",index,factors[index])); } } return{}; } std::expected<std::size_t,std::string>validate_coordinate_size(std::size_tsize,boolglobal_scalar) { usingnamespaceutils::errors; if(size>std::vector<double>{}.max_size()) { returnstd::unexpected(format_error_message<SERiFErrorCode::NORMALIZATION_VECTOR_SIZE_MISMATCH>("Anormalizationcoordinaterequests{}entries,exceedingsupportedvectorstorage.Reduceitsstateorresiduallayoutcount.",size)); } if(global_scalar&&size!=1) { returnstd::unexpected(format_error_message<SERiFErrorCode::NORMALIZATION_VECTOR_SIZE_MISMATCH>("Aglobalscalarnormalizationcoordinaterequiresoneentry,butitslayoutdeclares{}.Correctitsstateorresiduallayout.",size)); } returnsize; } std::expected<void,std::string>check_coordinate_size(std::size_texpected,std::size_treceived) { usingnamespaceutils::errors; if(expected!=received) { returnstd::unexpected(format_error_message<SERiFErrorCode::NORMALIZATION_VECTOR_SIZE_MISMATCH>("Normalizationreceived{}entriesforacoordinatewith{}entries.Usethemetricandorderingofitsreferencerepresentation.",received,expected)); } return{}; } }