33#ifndef GKO_PUBLIC_CORE_MATRIX_PERMUTATION_HPP_
34#define GKO_PUBLIC_CORE_MATRIX_PERMUTATION_HPP_
43#include <ginkgo/core/base/array.hpp>
44#include <ginkgo/core/base/exception.hpp>
45#include <ginkgo/core/base/exception_helpers.hpp>
46#include <ginkgo/core/base/executor.hpp>
47#include <ginkgo/core/base/lin_op.hpp>
48#include <ginkgo/core/base/types.hpp>
49#include <ginkgo/core/base/utils.hpp>
121static constexpr mask_type row_permute = mask_type{1};
122GKO_DEPRECATED(
"permute mask is no longer supported")
124GKO_DEPRECATED(
"permute mask is no longer supported")
139template <
typename IndexType =
int32>
149 using index_type = IndexType;
177 GKO_DEPRECATED(
"use get_size()[0] instead")
181 mask_type get_permute_mask()
const;
282 GKO_ASSERT_IS_SQUARE_MATRIX(size);
285 template <
typename IndicesArray>
286 GKO_DEPRECATED(
"permute mask is no longer supported")
290 : Permutation{std::move(exec),
296 GKO_ASSERT_IS_SQUARE_MATRIX(size);
299 void apply_impl(
const LinOp*
in, LinOp*
out)
const override;
301 void apply_impl(
const LinOp*,
const LinOp*
in,
const LinOp*,
302 LinOp*
out)
const override;
305 array<index_type> permutation_;
This mixin implements a static create() method on ConcreteType that dynamically allocates the memory,...
Definition polymorphic_object.hpp:776
The EnableLinOp mixin can be used to provide sensible default implementations of the majority of the ...
Definition lin_op.hpp:908
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition polymorphic_object.hpp:691
The first step in using the Ginkgo library consists of creating an executor.
Definition executor.hpp:644
Definition lin_op.hpp:146
A LinOp implementing this interface can write its data to a matrix_data structure.
Definition lin_op.hpp:689
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition array.hpp:187
value_type * get_data() noexcept
Returns a pointer to the block of memory used to store the elements of the array.
Definition array.hpp:646
const value_type * get_const_data() const noexcept
Returns a constant pointer to the block of memory used to store the elements of the array.
Definition array.hpp:655
size_type get_num_elems() const noexcept
Returns the number of elements in the array.
Definition array.hpp:637
Permutation is a matrix format that represents a permutation matrix, i.e.
Definition permutation.hpp:142
size_type get_permutation_size() const noexcept
Returns the number of elements explicitly stored in the permutation array.
std::unique_ptr< Permutation > compose(ptr_param< const Permutation > other) const
Composes this permutation with another permutation.
index_type * get_permutation() noexcept
Returns a pointer to the array of permutation.
Definition permutation.hpp:156
static std::unique_ptr< const Permutation > create_const(std::shared_ptr< const Executor > exec, size_type size, gko::detail::const_array_view< IndexType > &&perm_idxs, mask_type enabled_permute=row_permute)
Creates a constant (immutable) Permutation matrix from a constant array.
const index_type * get_const_permutation() const noexcept
Returns a pointer to the array of permutation.
Definition permutation.hpp:165
std::unique_ptr< Permutation > compute_inverse() const
Returns the inverse permutation.
This class is used for function parameters in the place of raw pointers.
Definition utils_helper.hpp:71
permute_mode operator|(permute_mode a, permute_mode b)
Combines two permutation modes.
permute_mode operator&(permute_mode a, permute_mode b)
Computes the intersection of two permutation modes.
permute_mode operator^(permute_mode a, permute_mode b)
Computes the symmetric difference of two permutation modes.
std::ostream & operator<<(std::ostream &stream, permute_mode mode)
Prints a permutation mode.
permute_mode
Specifies how a permutation will be applied to a matrix.
Definition permutation.hpp:71
@ none
Neither rows nor columns will be permuted.
@ columns
The columns will be permuted.
@ inverse
The permutation will be inverted before being applied.
@ inverse_columns
The columns will be permuted using the inverse permutation.
@ inverse_symmetric
The rows and columns will be permuted using the inverse permutation.
@ rows
The rows will be permuted.
@ inverse_rows
The rows will be permuted using the inverse permutation.
@ symmetric
The rows and columns will be permuted.
The Ginkgo namespace.
Definition abstract_factory.hpp:48
constexpr T one()
Returns the multiplicative identity for T.
Definition math.hpp:803
std::uint64_t uint64
64-bit unsigned integral type.
Definition types.hpp:166
double default_precision
Precision used if no precision is explicitly specified.
Definition types.hpp:205
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:120
std::decay_t< T > * as(U *obj)
Performs polymorphic type conversion.
Definition utils_helper.hpp:337
A type representing the dimensions of a multidimensional object.
Definition dim.hpp:55
This structure is used as an intermediate data type to store a sparse matrix.
Definition matrix_data.hpp:155