27#ifndef _H_GRB_BLAS2_BASE 
   28#define _H_GRB_BLAS2_BASE 
   33#include <graphblas/blas1.hpp> 
  238        typename IOType, 
typename InputType1, 
typename InputType2,
 
  239        typename InputType3, 
typename InputType4,
 
  240        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  251        const typename std::enable_if<
 
  258        void >::type * 
const = 
nullptr 
  261        std::cerr << 
"Selected backend does not implement mxv " 
  262            << 
"(doubly-masked, semiring)\n";
 
  265        const bool selected_backed_does_not_support_doubly_masked_mxv_sr = 
false;
 
  266        assert( selected_backed_does_not_support_doubly_masked_mxv_sr );
 
  302        typename IOType, 
typename InputType1, 
typename InputType2,
 
  303        typename InputType3, 
typename InputType4,
 
  304        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  315        typename std::enable_if<
 
  322        void >::type * = 
nullptr 
  325        std::cerr << 
"Selected backend does not implement doubly-masked grb::vxm\n";
 
  328        const bool selected_backend_does_not_support_doubly_masked_vxm_sr = 
false;
 
  329        assert( selected_backend_does_not_support_doubly_masked_vxm_sr );
 
  435        typename Func, 
typename DataType,
 
  436        typename RIT, 
typename CIT, 
typename NIT,
 
  437        Backend implementation = config::default_backend,
 
  446        std::cerr << 
"Selected backend does not implement grb::eWiseLambda (matrices)\n";
 
  449        const bool selected_backend_does_not_support_matrix_eWiseLamba = 
false;
 
  450        assert( selected_backend_does_not_support_matrix_eWiseLamba );
 
  474        typename IOType, 
typename InputType1, 
typename InputType2,
 
  476        typename RIT, 
typename CIT, 
typename NIT,
 
  478        enum Backend implementation = config::default_backend
 
  485        const Ring &ring = Ring(),
 
  487        typename std::enable_if<
 
  489        void >::type * = 
nullptr 
  492        std::cerr << 
"Selected backend does not implement grb::mxv (output-masked)\n";
 
  495        const bool backend_does_not_support_output_masked_mxv = 
false;
 
  496        assert( backend_does_not_support_output_masked_mxv );
 
  521        typename IOType, 
typename InputType1, 
typename InputType2,
 
  522        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  523        Backend implementation = config::default_backend
 
  530        typename std::enable_if<
 
  535        std::cerr << 
"Selected backend does not implement grb::mxv\n";
 
  538        const bool backend_does_not_support_mxv = 
false;
 
  539        assert( backend_does_not_support_mxv );
 
  563        typename IOType, 
typename InputType1, 
typename InputType2,
 
  565        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  566        enum Backend implementation = config::default_backend
 
  573        const Ring &ring = Ring(),
 
  575        typename std::enable_if<
 
  580        std::cerr << 
"Selected backend does not implement grb::vxm (output-masked)\n";
 
  583        const bool selected_backend_does_not_support_output_masked_vxm = 
false;
 
  584        assert( selected_backend_does_not_support_output_masked_vxm );
 
  610        typename IOType, 
typename InputType1, 
typename InputType2,
 
  611        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  612        enum Backend implementation = config::default_backend
 
  618        const Ring &ring = Ring(),
 
  620        typename std::enable_if<
 
  625        std::cerr << 
"Selected backend does not implement grb::vxm\n";
 
  628        const bool selected_backend_does_not_support_vxm = 
false;
 
  629        assert( selected_backend_does_not_support_vxm );
 
  653        class AdditiveMonoid, 
class MultiplicativeOperator,
 
  654        typename IOType, 
typename InputType1, 
typename InputType2,
 
  655        typename InputType3, 
typename InputType4,
 
  656        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  665        const AdditiveMonoid &add = AdditiveMonoid(),
 
  666        const MultiplicativeOperator &mul = MultiplicativeOperator(),
 
  668        const typename std::enable_if<
 
  676            !std::is_same< InputType2, void >::value,
 
  677        void >::type * 
const = 
nullptr 
  680        std::cerr << 
"Selected backend does not implement vxm (doubly-masked)\n";
 
  683        const bool selected_backed_does_not_support_doubly_masked_vxm = 
false;
 
  684        assert( selected_backed_does_not_support_doubly_masked_vxm );
 
  711        class AdditiveMonoid, 
class MultiplicativeOperator,
 
  712        typename IOType, 
typename InputType1, 
typename InputType2,
 
  713        typename InputType3, 
typename InputType4,
 
  714        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  723        const AdditiveMonoid &add = AdditiveMonoid(),
 
  724        const MultiplicativeOperator &mul = MultiplicativeOperator(),
 
  726        const typename std::enable_if<
 
  734            !std::is_same< InputType2,
 
  735        void >::value, 
void >::type * 
const = 
nullptr 
  738        std::cerr << 
"Selected backend does not implement mxv (doubly-masked)\n";
 
  741        const bool selected_backed_does_not_support_doubly_masked_mxv = 
false;
 
  742        assert( selected_backed_does_not_support_doubly_masked_mxv );
 
  769        class AdditiveMonoid, 
class MultiplicativeOperator,
 
  770        typename IOType, 
typename InputType1, 
typename InputType2,
 
  772        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  780        const AdditiveMonoid & add = AdditiveMonoid(),
 
  781        const MultiplicativeOperator & mul = MultiplicativeOperator(),
 
  783        const typename std::enable_if<
 
  790            !std::is_same< InputType2, void >::value,
 
  791        void >::type * 
const = 
nullptr 
  794        std::cerr << 
"Selected backend does not implement " 
  795            << 
"singly-masked monoid-op mxv\n";
 
  798        const bool selected_backed_does_not_support_masked_monop_mxv = 
false;
 
  799        assert( selected_backed_does_not_support_masked_monop_mxv );
 
  825        class AdditiveMonoid, 
class MultiplicativeOperator,
 
  826        typename IOType, 
typename InputType1, 
typename InputType2,
 
  827        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  834        const AdditiveMonoid &add = AdditiveMonoid(),
 
  835        const MultiplicativeOperator &mul = MultiplicativeOperator(),
 
  837        const typename std::enable_if<
 
  843            !std::is_same< InputType2, void >::value,
 
  844        void >::type * 
const = 
nullptr 
  847        std::cerr << 
"Selected backend does not implement vxm " 
  848            << 
"(unmasked, monoid-op version )\n";
 
  851        const bool selected_backed_does_not_support_monop_vxm = 
false;
 
  852        assert( selected_backed_does_not_support_monop_vxm );
 
  877        class AdditiveMonoid, 
class MultiplicativeOperator,
 
  878        typename IOType, 
typename InputType1, 
typename InputType2,
 
  880        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  888        const AdditiveMonoid &add = AdditiveMonoid(),
 
  889        const MultiplicativeOperator &mul = MultiplicativeOperator(),
 
  891        typename std::enable_if<
 
  897            !std::is_same< InputType2, void >::value,
 
  898        void >::type * = 
nullptr 
  901        std::cerr << 
"Selected backend does not implement grb::vxm (output-masked)\n";
 
  904        const bool selected_backed_does_not_support_masked_monop_vxm = 
false;
 
  905        assert( selected_backed_does_not_support_masked_monop_vxm );
 
  931        class AdditiveMonoid, 
class MultiplicativeOperator,
 
  932        typename IOType, 
typename InputType1, 
typename InputType2,
 
  933        typename Coords, 
typename RIT, 
typename CIT, 
typename NIT,
 
  940        const AdditiveMonoid &add = AdditiveMonoid(),
 
  941        const MultiplicativeOperator &mul = MultiplicativeOperator(),
 
  943        const typename std::enable_if<
 
  949            !std::is_same< InputType2, void >::value,
 
  950        void >::type * 
const = 
nullptr 
  953        std::cerr << 
"Selected backend does not implement grb::mxv (unmasked)\n";
 
  956        const bool selected_backed_does_not_support_monop_mxv = 
false;
 
  957        assert( selected_backed_does_not_support_monop_mxv );
 
This file contains a register of all backends that are either implemented, under implementation,...
 
An ALP/GraphBLAS matrix.
Definition: matrix.hpp:71
 
A generalised semiring.
Definition: semiring.hpp:186
 
A GraphBLAS vector.
Definition: vector.hpp:64
 
Defines all ALP/GraphBLAS descriptors.
 
RC eWiseLambda(const Func f, const Vector< DataType, backend, Coords > &x, Args...)
Executes an arbitrary element-wise user-defined function f on any number of vectors of equal length.
Definition: blas1.hpp:3746
 
RC mxv(Vector< IOType, backend, Coords > &u, const Vector< InputType3, backend, Coords > &u_mask, const Matrix< InputType2, backend, RIT, CIT, NIT > &A, const Vector< InputType1, backend, Coords > &v, const Vector< InputType4, backend, Coords > &v_mask, const Semiring &semiring=Semiring(), const Phase &phase=EXECUTE, const typename std::enable_if< grb::is_semiring< Semiring >::value &&!grb::is_object< IOType >::value &&!grb::is_object< InputType1 >::value &&!grb::is_object< InputType2 >::value &&!grb::is_object< InputType3 >::value &&!grb::is_object< InputType4 >::value, void >::type *const =nullptr)
Right-handed in-place doubly-masked sparse matrix times vector multiplication, .
Definition: blas2.hpp:243
 
RC vxm(Vector< IOType, backend, Coords > &u, const Vector< InputType3, backend, Coords > &u_mask, const Vector< InputType1, backend, Coords > &v, const Vector< InputType4, backend, Coords > &v_mask, const Matrix< InputType2, backend, RIT, CIT, NIT > &A, const Semiring &semiring=Semiring(), const Phase &phase=EXECUTE, typename std::enable_if< grb::is_semiring< Semiring >::value &&!grb::is_object< InputType1 >::value &&!grb::is_object< InputType2 >::value &&!grb::is_object< InputType3 >::value &&!grb::is_object< InputType4 >::value &&!grb::is_object< IOType >::value, void >::type *=nullptr)
Left-handed in-place doubly-masked sparse matrix times vector multiplication, .
Definition: blas2.hpp:307
 
Backend
A collection of all backends.
Definition: backends.hpp:46
 
Specifies the ALP/GraphBLAS matrix container.
 
static constexpr Descriptor no_operation
Indicates no additional pre- or post-processing on any of the GraphBLAS function arguments.
Definition: descriptors.hpp:63
 
The ALP/GraphBLAS namespace.
Definition: graphblas.hpp:452
 
RC
Return codes of ALP primitives.
Definition: rc.hpp:47
 
@ UNSUPPORTED
Indicates that the execution of the requested primitive with the given arguments is not supported by ...
Definition: rc.hpp:129
 
unsigned int Descriptor
Descriptors indicate pre- or post-processing for some or all of the arguments to an ALP/GraphBLAS cal...
Definition: descriptors.hpp:54
 
Phase
Primitives with sparse ALP/GraphBLAS output containers may run into the issue where an appropriate gr...
Definition: phase.hpp:152
 
@ EXECUTE
Speculatively assumes that the output container of the requested operation has enough capacity to com...
Definition: phase.hpp:257
 
Defines the ALP error codes.
 
Contains the configuration parameters for the reference and reference_omp backends.
 
Provides an ALP semiring.
 
Used to inspect whether a given type is an ALP monoid.
Definition: type_traits.hpp:85
 
Used to inspect whether a given type is an ALP/GraphBLAS object.
Definition: type_traits.hpp:130
 
Used to inspect whether a given type is an ALP operator.
Definition: type_traits.hpp:104
 
Used to inspect whether a given type is an ALP semiring.
Definition: type_traits.hpp:66
 
Specifies the ALP/GraphBLAS vector container.