Monoid
In abstract algebra, a monoid is a set equipped with an associative binary operation and an identity element. For example, the nonnegative integers with addition form a monoid, the identity element being 0.
Monoid identity
select ident('plus_monoid_int8');
┌────────┐
│ ident │
├────────┤
│ int8:0 │
└────────┘
(1 row)
select ident('plus_monoid_int16');
┌─────────┐
│ ident │
├─────────┤
│ int16:0 │
└─────────┘
(1 row)
select ident('plus_monoid_fp32');
┌───────────────┐
│ ident │
├───────────────┤
│ fp32:0.000000 │
└───────────────┘
(1 row)
select ident('min_monoid_int8');
┌──────────┐
│ ident │
├──────────┤
│ int8:127 │
└──────────┘
(1 row)
select ident('min_monoid_int16');
┌─────────────┐
│ ident │
├─────────────┤
│ int16:32767 │
└─────────────┘
(1 row)
select ident('min_monoid_fp32');
┌───────────────┐
│ ident │
├───────────────┤
│ fp32:Infinity │
└───────────────┘
(1 row)
select ident('max_monoid_int8');
┌───────────┐
│ ident │
├───────────┤
│ int8:-128 │
└───────────┘
(1 row)
select ident('max_monoid_int16');
┌──────────────┐
│ ident │
├──────────────┤
│ int16:-32768 │
└──────────────┘
(1 row)
select ident('max_monoid_fp32');
┌────────────────┐
│ ident │
├────────────────┤
│ fp32:-Infinity │
└────────────────┘
(1 row)
Monoid terminal
Monoid terminals tell SuiteSparse when it can terminate a large array operation because the terminal value has been found.
select terminal('plus_monoid_int8');
┌──────────┐
│ terminal │
├──────────┤
│ int │
└──────────┘
(1 row)
select terminal('plus_monoid_int16');
┌──────────┐
│ terminal │
├──────────┤
│ int │
└──────────┘
(1 row)
select terminal('min_monoid_int8');
┌───────────┐
│ terminal │
├───────────┤
│ int8:-128 │
└───────────┘
(1 row)
select terminal('min_monoid_int16');
┌──────────────┐
│ terminal │
├──────────────┤
│ int16:-32768 │
└──────────────┘
(1 row)
select terminal('max_monoid_int8');
┌──────────┐
│ terminal │
├──────────┤
│ int8:127 │
└──────────┘
(1 row)
select terminal('max_monoid_int16');
┌─────────────┐
│ terminal │
├─────────────┤
│ int16:32767 │
└─────────────┘
(1 row)
select terminal('land_monoid_bool');
┌──────────┐
│ terminal │
├──────────┤
│ bool:f │
└──────────┘
(1 row)
select terminal('lor_monoid_bool');
┌──────────┐
│ terminal │
├──────────┤
│ bool:t │
└──────────┘
(1 row)
Builtin SuiteSparse Monoids
| OneSparse Name | SuiteSparse Name |
|---|---|
| min_monoid_int8 | GrB_MIN_MONOID_INT8 |
| min_monoid_int16 | GrB_MIN_MONOID_INT16 |
| min_monoid_int32 | GrB_MIN_MONOID_INT32 |
| min_monoid_int64 | GrB_MIN_MONOID_INT64 |
| min_monoid_uint8 | GrB_MIN_MONOID_UINT8 |
| min_monoid_uint16 | GrB_MIN_MONOID_UINT16 |
| min_monoid_uint32 | GrB_MIN_MONOID_UINT32 |
| min_monoid_uint64 | GrB_MIN_MONOID_UINT64 |
| min_monoid_fp32 | GrB_MIN_MONOID_FP32 |
| min_monoid_fp64 | GrB_MIN_MONOID_FP64 |
| max_monoid_int8 | GrB_MAX_MONOID_INT8 |
| max_monoid_int16 | GrB_MAX_MONOID_INT16 |
| max_monoid_int32 | GrB_MAX_MONOID_INT32 |
| max_monoid_int64 | GrB_MAX_MONOID_INT64 |
| max_monoid_uint8 | GrB_MAX_MONOID_UINT8 |
| max_monoid_uint16 | GrB_MAX_MONOID_UINT16 |
| max_monoid_uint32 | GrB_MAX_MONOID_UINT32 |
| max_monoid_uint64 | GrB_MAX_MONOID_UINT64 |
| max_monoid_fp32 | GrB_MAX_MONOID_FP32 |
| max_monoid_fp64 | GrB_MAX_MONOID_FP64 |
| plus_monoid_int8 | GrB_PLUS_MONOID_INT8 |
| plus_monoid_int16 | GrB_PLUS_MONOID_INT16 |
| plus_monoid_int32 | GrB_PLUS_MONOID_INT32 |
| plus_monoid_int64 | GrB_PLUS_MONOID_INT64 |
| plus_monoid_uint8 | GrB_PLUS_MONOID_UINT8 |
| plus_monoid_uint16 | GrB_PLUS_MONOID_UINT16 |
| plus_monoid_uint32 | GrB_PLUS_MONOID_UINT32 |
| plus_monoid_uint64 | GrB_PLUS_MONOID_UINT64 |
| plus_monoid_fp32 | GrB_PLUS_MONOID_FP32 |
| plus_monoid_fp64 | GrB_PLUS_MONOID_FP64 |
| plus_fc32_monoid | GxB_PLUS_FC32_MONOID |
| plus_fc64_monoid | GxB_PLUS_FC64_MONOID |
| times_monoid_int8 | GrB_TIMES_MONOID_INT8 |
| times_monoid_int16 | GrB_TIMES_MONOID_INT16 |
| times_monoid_int32 | GrB_TIMES_MONOID_INT32 |
| times_monoid_int64 | GrB_TIMES_MONOID_INT64 |
| times_monoid_uint8 | GrB_TIMES_MONOID_UINT8 |
| times_monoid_uint16 | GrB_TIMES_MONOID_UINT16 |
| times_monoid_uint32 | GrB_TIMES_MONOID_UINT32 |
| times_monoid_uint64 | GrB_TIMES_MONOID_UINT64 |
| times_monoid_fp32 | GrB_TIMES_MONOID_FP32 |
| times_monoid_fp64 | GrB_TIMES_MONOID_FP64 |
| times_fc32_monoid | GxB_TIMES_FC32_MONOID |
| times_fc64_monoid | GxB_TIMES_FC64_MONOID |
| any_bool_monoid | GxB_ANY_BOOL_MONOID |
| any_int8_monoid | GxB_ANY_INT8_MONOID |
| any_int16_monoid | GxB_ANY_INT16_MONOID |
| any_int32_monoid | GxB_ANY_INT32_MONOID |
| any_int64_monoid | GxB_ANY_INT64_MONOID |
| any_uint8_monoid | GxB_ANY_UINT8_MONOID |
| any_uint16_monoid | GxB_ANY_UINT16_MONOID |
| any_uint32_monoid | GxB_ANY_UINT32_MONOID |
| any_uint64_monoid | GxB_ANY_UINT64_MONOID |
| any_fp32_monoid | GxB_ANY_FP32_MONOID |
| any_fp64_monoid | GxB_ANY_FP64_MONOID |
| any_fc32_monoid | GxB_ANY_FC32_MONOID |
| any_fc64_monoid | GxB_ANY_FC64_MONOID |
| bor_uint8_monoid | GxB_BOR_UINT8_MONOID |
| bor_uint16_monoid | GxB_BOR_UINT16_MONOID |
| bor_uint32_monoid | GxB_BOR_UINT32_MONOID |
| bor_uint64_monoid | GxB_BOR_UINT64_MONOID |
| band_uint8_monoid | GxB_BAND_UINT8_MONOID |
| band_uint16_monoid | GxB_BAND_UINT16_MONOID |
| band_uint32_monoid | GxB_BAND_UINT32_MONOID |
| band_uint64_monoid | GxB_BAND_UINT64_MONOID |
| bxor_uint8_monoid | GxB_BXOR_UINT8_MONOID |
| bxor_uint16_monoid | GxB_BXOR_UINT16_MONOID |
| bxor_uint32_monoid | GxB_BXOR_UINT32_MONOID |
| bxor_uint64_monoid | GxB_BXOR_UINT64_MONOID |
| bxnor_uint8_monoid | GxB_BXNOR_UINT8_MONOID |
| bxnor_uint16_monoid | GxB_BXNOR_UINT16_MONOID |
| bxnor_uint32_monoid | GxB_BXNOR_UINT32_MONOID |
| bxnor_uint64_monoid | GxB_BXNOR_UINT64_MONOID |
| lor_monoid_bool | GrB_LOR_MONOID_BOOL |
| land_monoid_bool | GrB_LAND_MONOID_BOOL |
| lxor_monoid_bool | GrB_LXOR_MONOID_BOOL |
| lxnor_monoid_bool | GrB_LXNOR_MONOID_BOOL |
| min_int8_monoid | GxB_MIN_INT8_MONOID |
| min_int16_monoid | GxB_MIN_INT16_MONOID |
| min_int32_monoid | GxB_MIN_INT32_MONOID |
| min_int64_monoid | GxB_MIN_INT64_MONOID |
| min_uint8_monoid | GxB_MIN_UINT8_MONOID |
| min_uint16_monoid | GxB_MIN_UINT16_MONOID |
| min_uint32_monoid | GxB_MIN_UINT32_MONOID |
| min_uint64_monoid | GxB_MIN_UINT64_MONOID |
| min_fp32_monoid | GxB_MIN_FP32_MONOID |
| min_fp64_monoid | GxB_MIN_FP64_MONOID |
| max_int8_monoid | GxB_MAX_INT8_MONOID |
| max_int16_monoid | GxB_MAX_INT16_MONOID |
| max_int32_monoid | GxB_MAX_INT32_MONOID |
| max_int64_monoid | GxB_MAX_INT64_MONOID |
| max_uint8_monoid | GxB_MAX_UINT8_MONOID |
| max_uint16_monoid | GxB_MAX_UINT16_MONOID |
| max_uint32_monoid | GxB_MAX_UINT32_MONOID |
| max_uint64_monoid | GxB_MAX_UINT64_MONOID |
| max_fp32_monoid | GxB_MAX_FP32_MONOID |
| max_fp64_monoid | GxB_MAX_FP64_MONOID |
| plus_int8_monoid | GxB_PLUS_INT8_MONOID |
| plus_int16_monoid | GxB_PLUS_INT16_MONOID |
| plus_int32_monoid | GxB_PLUS_INT32_MONOID |
| plus_int64_monoid | GxB_PLUS_INT64_MONOID |
| plus_uint8_monoid | GxB_PLUS_UINT8_MONOID |
| plus_uint16_monoid | GxB_PLUS_UINT16_MONOID |
| plus_uint32_monoid | GxB_PLUS_UINT32_MONOID |
| plus_uint64_monoid | GxB_PLUS_UINT64_MONOID |
| plus_fp32_monoid | GxB_PLUS_FP32_MONOID |
| plus_fp64_monoid | GxB_PLUS_FP64_MONOID |
| times_int8_monoid | GxB_TIMES_INT8_MONOID |
| times_int16_monoid | GxB_TIMES_INT16_MONOID |
| times_int32_monoid | GxB_TIMES_INT32_MONOID |
| times_int64_monoid | GxB_TIMES_INT64_MONOID |
| times_uint8_monoid | GxB_TIMES_UINT8_MONOID |
| times_uint16_monoid | GxB_TIMES_UINT16_MONOID |
| times_uint32_monoid | GxB_TIMES_UINT32_MONOID |
| times_uint64_monoid | GxB_TIMES_UINT64_MONOID |
| times_fp32_monoid | GxB_TIMES_FP32_MONOID |
| times_fp64_monoid | GxB_TIMES_FP64_MONOID |
| lor_bool_monoid | GxB_LOR_BOOL_MONOID |
| land_bool_monoid | GxB_LAND_BOOL_MONOID |
| lxor_bool_monoid | GxB_LXOR_BOOL_MONOID |
| lxnor_bool_monoid | GxB_LXNOR_BOOL_MONOID |
| eq_bool_monoid | GxB_EQ_BOOL_MONOID |