Loading...
Searching...
No Matches
Zp_field_operators< Unsigned_integer_type, class > Class Template Reference

Class defining operators for the \( \mathbb{F}_p \) field for any prime number \( p \). More...

`#include <gudhi/Fields/Zp_field_operators.h>`

## Public Types

using | Element = Unsigned_integer_type
using | Characteristic = Element

## Public Member Functions

| Zp_field_operators (Characteristic characteristic=0)
| Default constructor. If a non-zero characteristic is given, initializes the field with it. The characteristic can later be changed again or initialized with set_characteristic.
| Zp_field_operators (const Zp_field_operators &toCopy)
| Copy constructor.
| Zp_field_operators (Zp_field_operators &&toMove) noexcept
| Move constructor.
void | set_characteristic (Characteristic characteristic)
| Sets the characteristic of the field.
const Characteristic & | get_characteristic () const
| Returns the current characteristic.
Element | get_value (Element e) const
| Returns the value of an integer in the field. That is the positive value of the integer modulo the current characteristic.
template<typename Signed_integer_type, class = isSignedInteger<Signed_integer_type>>
Element | get_value (Signed_integer_type e) const
| Returns the value of an integer in the field. That is the positive value of the integer modulo the current characteristic.
Element | add (Element e1, Element e2) const
| Returns the sum of two elements in the field.
void | add_inplace (Element &e1, Element e2) const
| Stores in the first element the sum of two given elements in the field, that is (e1 + e2) % characteristic, such that the result is positive.
Element | subtract (Element e1, Element e2) const
| Returns the subtraction in the field of the first element by the second element.
void | subtract_inplace_front (Element &e1, Element e2) const
| Stores in the first element the subtraction in the field of the first element by the second element, that is (e1 - e2) % 2, such that the result is positive.
void | subtract_inplace_back (Element e1, Element &e2) const
| Stores in the second element the subtraction in the field of the first element by the second element, that is (e1 - e2) % 2, such that the result is positive.
Element | multiply (Element e1, Element e2) const
| Returns the multiplication of two elements in the field.
void | multiply_inplace (Element &e1, Element e2) const
| Stores in the first element the multiplication of two given elements in the field, that is (e1 * e2) % characteristic, such that the result is positive.
Element | multiply_and_add (Element e, Element m, Element a) const
| Multiplies the first element with the second one and adds the third one. Returns the result in the field.
void | multiply_and_add_inplace_front (Element &e, Element m, Element a) const
| Multiplies the first element with the second one and adds the third one, that is (e * m + a) % characteristic, such that the result is positive. Stores the result in the first element.
void | multiply_and_add_inplace_back (Element e, Element m, Element &a) const
| Multiplies the first element with the second one and adds the third one, that is (e * m + a) % characteristic, such that the result is positive. Stores the result in the third element.
Element | add_and_multiply (Element e, Element a, Element m) const
| Adds the first element to the second one and multiplies the third one with it. Returns the result in the field.
void | add_and_multiply_inplace_front (Element &e, Element a, Element m) const
| Adds the first element to the second one and multiplies the third one with it, that is ((e + a) * m) % characteristic, such that the result is positive. Stores the result in the first element.
void | add_and_multiply_inplace_back (Element e, Element a, Element &m) const
| Adds the first element to the second one and multiplies the third one with it, that is ((e + a) * m) % characteristic, such that the result is positive. Stores the result in the third element.
bool | are_equal (Element e1, Element e2) const
| Returns true if the two given elements are equal in the field, false otherwise.
Element | get_inverse (Element e) const
| Returns the inverse of the given element in the field.
std::pair< Element, Characteristic > | get_partial_inverse (Element e, Characteristic productOfCharacteristics) const
| For interface purposes with multi-fields. Returns the inverse together with the second argument.
Zp_field_operators & | operator= (Zp_field_operators other)
| Assign operator.

## Static Public Member Functions

static constexpr Element | get_additive_identity ()
| Returns the additive identity of the field.
static constexpr Element | get_multiplicative_identity ()
| Returns the multiplicative identity of the field.
static constexpr Element | get_partial_multiplicative_identity (Characteristic productOfCharacteristics)
| For interface purposes with multi-fields. Returns the multiplicative identity of the field.

## Friends

void | swap (Zp_field_operators &f1, Zp_field_operators &f2)
| Swap operator.

## Detailed Description

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
class Zp_field_operators< Unsigned_integer_type, class >

Class defining operators for the \( \mathbb{F}_p \) field for any prime number \( p \).

Template Parameters

  Unsigned_integer_type | A native unsigned integer type: unsigned int, long unsigned int, etc. Will be used as the field element type.

Examples
  example_field_operations.cpp.

## Member Typedef Documentation

## Characteristic

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

using Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::Characteristic = Element

Type for the field characteristic.

## Element

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

using Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::Element = Unsigned_integer_type

Type for the elements in the field.

## Constructor & Destructor Documentation

## Zp_field_operators() [1/3]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::Zp_field_operators | ( | Characteristic | characteristic = 0 | ) |

inline

Default constructor. If a non-zero characteristic is given, initializes the field with it. The characteristic can later be changed again or initialized with set_characteristic.

Parameters

  characteristic | Prime number corresponding to the desired characteristic of the field.

## Zp_field_operators() [2/3]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::Zp_field_operators | ( | const Zp_field_operators< Unsigned_integer_type, class > & | toCopy | ) |

inline

Copy constructor.

Parameters

  toCopy | Operators to copy.

## Zp_field_operators() [3/3]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::Zp_field_operators | ( | Zp_field_operators< Unsigned_integer_type, class > && | toMove | ) |

inline noexcept

Move constructor.

Parameters

  toMove | Operators to move.

## Member Function Documentation

## add()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::add | ( | Element | e1,
|  | Element | e2 ) const

inline

Returns the sum of two elements in the field.

Parameters

  e1 | First element.
  e2 | Second element.

Returns
  (e1 + e2) % characteristic, such that the result is positive.

## add_and_multiply()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::add_and_multiply | ( | Element | e,
|  | Element | a,
|  | Element | m ) const

inline

Adds the first element to the second one and multiplies the third one with it. Returns the result in the field.

Warning
  Not overflow safe.

Parameters

  e | First element.
  a | Second element.
  m | Third element.

Returns
  ((e + a) * m) % characteristic, such that the result is positive.

## add_and_multiply_inplace_back()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::add_and_multiply_inplace_back | ( | Element | e,
|  | Element | a,
|  | Element & | m ) const

inline

Adds the first element to the second one and multiplies the third one with it, that is ((e + a) * m) % characteristic, such that the result is positive. Stores the result in the third element.

Warning
  Not overflow safe.

Parameters

  e | First element.
  a | Second element.
  m | Third element.

## add_and_multiply_inplace_front()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::add_and_multiply_inplace_front | ( | Element & | e,
|  | Element | a,
|  | Element | m ) const

inline

Adds the first element to the second one and multiplies the third one with it, that is ((e + a) * m) % characteristic, such that the result is positive. Stores the result in the first element.

Warning
  Not overflow safe.

Parameters

  e | First element.
  a | Second element.
  m | Third element.

## add_inplace()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::add_inplace | ( | Element & | e1,
|  | Element | e2 ) const

inline

Stores in the first element the sum of two given elements in the field, that is (e1 + e2) % characteristic, such that the result is positive.

Parameters

  e1 | First element.
  e2 | Second element.

## are_equal()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

bool Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::are_equal | ( | Element | e1,
|  | Element | e2 ) const

inline

Returns true if the two given elements are equal in the field, false otherwise.

Parameters

  e1 | First element to compare.
  e2 | Second element to compare.

Returns
  true If e1 % characteristic == e2 % characteristic.
  false Otherwise.

## get_additive_identity()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

constexpr Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_additive_identity | ( |  | ) |

inline static constexpr

Returns the additive identity of the field.

Returns
  0.

## get_characteristic()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

const Characteristic & Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_characteristic | ( |  | ) | const

inline

Returns the current characteristic.

Returns
  The value of the current characteristic.

## get_inverse()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_inverse | ( | Element | e | ) | const

inline

Returns the inverse of the given element in the field.

Parameters

  e | Element to get the inverse from.

Returns
  Inverse in the current field of e % characteristic.

## get_multiplicative_identity()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

constexpr Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_multiplicative_identity | ( |  | ) |

inline static constexpr

Returns the multiplicative identity of the field.

Returns
  1.

## get_partial_inverse()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

std::pair< Element, Characteristic > Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_partial_inverse | ( | Element | e,
|  | Characteristic | productOfCharacteristics ) const

inline

For interface purposes with multi-fields. Returns the inverse together with the second argument.

Parameters

  e | Element to get the inverse from.
  productOfCharacteristics | Some value.

Returns
  Pair whose first element is the inverse of `e` and the second element is `productOfCharacteristics`.

## get_partial_multiplicative_identity()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

constexpr Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_partial_multiplicative_identity | ( | Characteristic | productOfCharacteristics | ) |

inline static constexpr

For interface purposes with multi-fields. Returns the multiplicative identity of the field.

Parameters

  productOfCharacteristics | Some value.

Returns
  1.

## get_value() [1/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_value | ( | Element | e | ) | const

inline

Returns the value of an integer in the field. That is the positive value of the integer modulo the current characteristic.

Parameters

  e | Unsigned integer to return the value from.

Returns
  `e` modulo the current characteristic, such that the result is positive.

## get_value() [2/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Signed_integer_type, class = isSignedInteger<Signed_integer_type>>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::get_value | ( | Signed_integer_type | e | ) | const

inline

Returns the value of an integer in the field. That is the positive value of the integer modulo the current characteristic.

Template Parameters

  Signed_integer_type | A native signed integer type: int, long int, etc.

Parameters

  e | Integer to return the value from.

Returns
  `e` modulo the current characteristic, such that the result is positive.

## multiply()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::multiply | ( | Element | e1,
|  | Element | e2 ) const

inline

Returns the multiplication of two elements in the field.

Parameters

  e1 | First element.
  e2 | Second element.

Returns
  (e1 * e2) % characteristic, such that the result is positive.

## multiply_and_add()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::multiply_and_add | ( | Element | e,
|  | Element | m,
|  | Element | a ) const

inline

Multiplies the first element with the second one and adds the third one. Returns the result in the field.

Warning
  Not overflow safe.

Parameters

  e | First element.
  m | Second element.
  a | Third element.

Returns
  (e * m + a) % characteristic, such that the result is positive.

## multiply_and_add_inplace_back()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::multiply_and_add_inplace_back | ( | Element | e,
|  | Element | m,
|  | Element & | a ) const

inline

Multiplies the first element with the second one and adds the third one, that is (e * m + a) % characteristic, such that the result is positive. Stores the result in the third element.

Warning
  Not overflow safe.

Parameters

  e | First element.
  m | Second element.
  a | Third element.

## multiply_and_add_inplace_front()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::multiply_and_add_inplace_front | ( | Element & | e,
|  | Element | m,
|  | Element | a ) const

inline

Multiplies the first element with the second one and adds the third one, that is (e * m + a) % characteristic, such that the result is positive. Stores the result in the first element.

Warning
  Not overflow safe.

Parameters

  e | First element.
  m | Second element.
  a | Third element.

## multiply_inplace()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::multiply_inplace | ( | Element & | e1,
|  | Element | e2 ) const

inline

Stores in the first element the multiplication of two given elements in the field, that is (e1 * e2) % characteristic, such that the result is positive.

Parameters

  e1 | First element.
  e2 | Second element.

## set_characteristic()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::set_characteristic | ( | Characteristic | characteristic | ) |

inline

Sets the characteristic of the field.

Parameters

  characteristic | Prime number corresponding to the desired characteristic of the field.

Examples
  example_field_operations.cpp.

## subtract()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

Element Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::subtract | ( | Element | e1,
|  | Element | e2 ) const

inline

Returns the subtraction in the field of the first element by the second element.

Parameters

  e1 | First element.
  e2 | Second element.

Returns
  (e1 - e2) % characteristic, such that the result is positive.

## subtract_inplace_back()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::subtract_inplace_back | ( | Element | e1,
|  | Element & | e2 ) const

inline

Stores in the second element the subtraction in the field of the first element by the second element, that is (e1 - e2) % 2, such that the result is positive.

Parameters

  e1 | First element.
  e2 | Second element.

## subtract_inplace_front()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>

void Gudhi::persistence_fields::Zp_field_operators< Unsigned_integer_type, class >::subtract_inplace_front | ( | Element & | e1,
|  | Element | e2 ) const

inline

Stores in the first element the subtraction in the field of the first element by the second element, that is (e1 - e2) % 2, such that the result is positive.

Parameters

  e1 | First element.
  e2 | Second element.

The documentation for this class was generated from the following file:

- include/gudhi/Fields/Zp_field_operators.h