apyfixed_util.h
¶
Functions
-
template<typename RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_trn(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_trn_inf(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_trn_zero(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_trn_mag(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_trn_away(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_rnd(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_rnd_zero(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_rnd_inf(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_rnd_min_inf(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_rnd_conv(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_rnd_conv_odd(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_jam(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR_INOUT>
static inline void _quantize_jam_unbiased(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits)¶
-
template<typename RANDOM_ACCESS_ITERATOR_INOUT>
static void quantize(RANDOM_ACCESS_ITERATOR_INOUT it_begin, RANDOM_ACCESS_ITERATOR_INOUT it_end, int bits, int int_bits, int new_bits, int new_int_bits, QuantizationMode quantization)¶
-
template<class RANDOM_ACCESS_ITERATOR>
static inline void _overflow_twos_complement(RANDOM_ACCESS_ITERATOR it_begin, RANDOM_ACCESS_ITERATOR it_end, int bits, int int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR>
static inline void _overflow_saturate(RANDOM_ACCESS_ITERATOR it_begin, RANDOM_ACCESS_ITERATOR it_end, int bits, int int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR>
static inline void _overflow_numeric_std(RANDOM_ACCESS_ITERATOR it_begin, RANDOM_ACCESS_ITERATOR it_end, int bits, int int_bits)¶
-
template<class RANDOM_ACCESS_ITERATOR>
static void overflow(RANDOM_ACCESS_ITERATOR it_begin, RANDOM_ACCESS_ITERATOR it_end, int new_bits, int new_int_bits, OverflowMode overflow)¶
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT>
static inline void _cast(RANDOM_ACCESS_ITERATOR_IN src_begin, RANDOM_ACCESS_ITERATOR_IN src_end, RANDOM_ACCESS_ITERATOR_OUT dst_begin, RANDOM_ACCESS_ITERATOR_OUT dst_end, int src_bits, int src_int_bits, int dst_bits, int dst_int_bits, QuantizationMode q_mode, OverflowMode v_mode)¶ General casting method for fixed-point numbers. It is named
_cast
to differentiate it from the Python exposedcast
methods (that usually just call this method). General casting can perform both quantization and overflowing. The size of the output region (std::distance(dst_begin, dst_end)
) must be greater than or equal to the size of the input region (std::distance(src_begin, src_end)
), even when the output bit-specifiers are smaller then the input bit-specifiers.
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT>
static inline void _cast_no_quantize_no_overflow(RANDOM_ACCESS_ITERATOR_IN src_begin, RANDOM_ACCESS_ITERATOR_IN src_end, RANDOM_ACCESS_ITERATOR_OUT dst_begin, RANDOM_ACCESS_ITERATOR_OUT dst_end, unsigned int left_shift_amount)¶ Casting when there is known before hand that no quantization or overflowing will occur. Takes
left_shift_amount
which is the destination fractional bits minus the source fractional bits.
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT>
static inline void _cast_no_quantize_no_overflow(RANDOM_ACCESS_ITERATOR_IN src, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src_limbs, std::size_t dst_limbs, std::size_t n_items, unsigned int left_shift_amount)¶ Casting when there is known before hand that no quantization or overflowing will occur. Takes
left_shift_amount
which is the destination fractional bits minus the source fractional bits.
-
template<typename RANDOM_ACCESS_ITERATOR_IN1, typename RANDOM_ACCESS_ITERATOR_IN2, typename RANDOM_ACCESS_ITERATOR_OUT, typename RANDOM_ACCESS_ITERATOR_INOUT>
static inline void fixed_point_product(RANDOM_ACCESS_ITERATOR_IN1 src1, RANDOM_ACCESS_ITERATOR_IN2 src2, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src1_limbs, std::size_t src2_limbs, std::size_t dst_limbs, RANDOM_ACCESS_ITERATOR_INOUT op1_abs, RANDOM_ACCESS_ITERATOR_INOUT op2_abs, RANDOM_ACCESS_ITERATOR_INOUT prod_abs)¶ Iterator-based multi-limb two’s complement fixed-point product. The scratch vector
prod_abs
must have space for atleastsrc1_limbs + src2_limbs
limbs. The scratch vectorsop1_abs
andop2_abs
must have space for atleastsrc1_limbs
andsrc2_limbs
limbs, respectively. No overlap betweenprod_abs
andop[12]_abs
allowed. Overlap betweenprod_abs
anddst
is allowed ifdst_limbs >= src1_limbs + src2_limbs
.
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT, typename RANDOM_ACCESS_ITERATOR_INOUT>
static inline void fixed_point_square(RANDOM_ACCESS_ITERATOR_IN src, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src_limbs, std::size_t dst_limbs, RANDOM_ACCESS_ITERATOR_INOUT op_abs, RANDOM_ACCESS_ITERATOR_INOUT prod_abs)¶ Iterator-based multi-limb two’s complement fixed-point squaring. The scratch vector
prod_abs
must have space for atleast2 * src_limbs
limbs. The scratch vectorop_abs
must have space for atleastsrc_limbs
limbs. No overlap betweenprod_abs
andop_abs
allowed. Overlap betweenprod_abs
anddst
is allowed ifdst_limbs >= 2 * src_limbs
.
-
template<typename RANDOM_ACCESS_ITERATOR_IN1, typename RANDOM_ACCESS_ITERATOR_IN2, typename RANDOM_ACCESS_ITERATOR_OUT, typename RANDOM_ACCESS_ITERATOR_INOUT>
static inline void complex_fixed_point_product(RANDOM_ACCESS_ITERATOR_IN1 src1, RANDOM_ACCESS_ITERATOR_IN2 src2, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src1_limbs, std::size_t src2_limbs, std::size_t dst_limbs, RANDOM_ACCESS_ITERATOR_INOUT op1_abs, RANDOM_ACCESS_ITERATOR_INOUT op2_abs, RANDOM_ACCESS_ITERATOR_INOUT prod_imm)¶ Iterator-based multi-limb two’s complement complex-valued fixed-point multiplication. The scratch vector
prod_imm
must have space for atleast2 + 2 * src1_limbs + 2 * src2_limbs
limbs. The scratch vectorsop1_abs
andop2_abs
must have space for atleastsrc1_limbs
andsrc2_limbs
limbs, respectively. No overlap betweenprod_imm
andop[12]_abs
allowed. No overlap betweenprod_imm
anddst
allowed.
-
template<typename RANDOM_ACCESS_ITERATOR_IN1, typename RANDOM_ACCESS_ITERATOR_IN2, typename RANDOM_ACCESS_ITERATOR_OUT, typename RANDOM_ACCESS_ITERATOR_INOUT>
static inline void complex_fixed_point_division(RANDOM_ACCESS_ITERATOR_IN1 src1, RANDOM_ACCESS_ITERATOR_IN2 src2, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src1_limbs, std::size_t src2_limbs, std::size_t dst_limbs, std::size_t src2_bits, std::size_t div_limbs, RANDOM_ACCESS_ITERATOR_INOUT op1_abs, RANDOM_ACCESS_ITERATOR_INOUT op2_abs, RANDOM_ACCESS_ITERATOR_INOUT prod_imm, RANDOM_ACCESS_ITERATOR_INOUT den_imm, RANDOM_ACCESS_ITERATOR_INOUT num_imm, RANDOM_ACCESS_ITERATOR_INOUT qte_imm)¶ Iterator-based multi-limb two’s complement complex-valued fixed-point division. The scratch vector
prod_imm
must have space for atleast2 + 2 * src1_limbs + 2 * src2_limbs
limbs. The scratch vectorsop1_abs
andop2_abs
must have space for atleastsrc1_limbs
andsrc2_limbs
limbs, respectively. No overlap betweenprod_imm
andop[12]_abs
allowed. No overlap betweenprod_imm
anddst
allowed.
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT>
static void fixed_point_hadamard_product(RANDOM_ACCESS_ITERATOR_IN src1, RANDOM_ACCESS_ITERATOR_IN src2, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src1_limbs, std::size_t src2_limbs, std::size_t dst_limbs, std::size_t n_items)¶ Iterator-based multi-limb fixed-point hadamard product.
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT>
static void fixed_point_inner_product(RANDOM_ACCESS_ITERATOR_IN src1, RANDOM_ACCESS_ITERATOR_IN src2, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src1_limbs, std::size_t src2_limbs, std::size_t dst_limbs, std::size_t n_items)¶ Iterator-based multiply-accumulate.
-
template<typename RANDOM_ACCESS_ITERATOR_IN, typename RANDOM_ACCESS_ITERATOR_OUT>
static void fixed_point_inner_product_accumulator(RANDOM_ACCESS_ITERATOR_IN src1, RANDOM_ACCESS_ITERATOR_IN src2, RANDOM_ACCESS_ITERATOR_OUT dst, std::size_t src1_limbs, std::size_t src2_limbs, std::size_t dst_limbs, std::size_t n_items, int product_bits, int product_int_bits, const APyFixedAccumulatorOption &acc)¶ Iterator-based multiply-accumulate using in accumulator context.
-
template<typename VECTOR_TYPE>
static std::function<void(typename VECTOR_TYPE::const_iterator, typename VECTOR_TYPE::const_iterator, typename VECTOR_TYPE::iterator, std::size_t, std::size_t, std::size_t, std::size_t)> inner_product_func_from_acc_mode(int product_bits, int product_int_bits, const std::optional<APyFixedAccumulatorOption> &accumulator_mode)¶ Retrieve an appropriate fixed-point inner product function from
accumulator_mode
. The returned inner product function object will have the accumulator mode bound, if available. Otherwise, the return function object will be a plain inner product function.
-
template<typename RANDOM_ACCESS_IT>
void fixed_point_from_double(double value, RANDOM_ACCESS_IT begin_it, RANDOM_ACCESS_IT end_it, int bits, int int_bits)¶
-
template<typename RANDOM_ACCESS_IT>
double fixed_point_to_double(RANDOM_ACCESS_IT begin_it, RANDOM_ACCESS_IT end_it, int bits, int int_bits)¶
-
template<typename RANDOM_ACCESS_IT>
void fixed_point_from_py_integer(const nb::int_ &value, RANDOM_ACCESS_IT begin_it, RANDOM_ACCESS_IT end_it, int bits, int int_bits)¶
-
template<typename RANDOM_ACCESS_IT>
void fixed_point_from_integer(const std::uint64_t value, RANDOM_ACCESS_IT begin_it, RANDOM_ACCESS_IT end_it, int bits, int int_bits)¶
-
template<typename RANDOM_ACCESS_IT>
std::string fixed_point_to_string_dec(RANDOM_ACCESS_IT begin_it, RANDOM_ACCESS_IT end_it, int bits, int int_bits)¶
-
template<typename VECTOR_TYPE>
static inline std::function<void(typename VECTOR_TYPE::iterator, typename VECTOR_TYPE::const_iterator)> fold_accumulate(std::size_t src_limbs, std::size_t acc_limbs)¶ Retrieve an accumulative fixed-point fold function.
-
template<typename VECTOR_TYPE, typename SCRATCH_VEC>
static inline std::function<void(typename VECTOR_TYPE::iterator, typename VECTOR_TYPE::const_iterator)> fold_multiply(std::size_t src_limbs, std::size_t acc_limbs, SCRATCH_VEC &scratch)¶ Retrieve a multiplicative fold function.
-
template<typename VECTOR_TYPE>
static inline std::function<void(typename VECTOR_TYPE::iterator, typename VECTOR_TYPE::const_iterator)> fold_complex_accumulate(std::size_t src_limbs, std::size_t acc_limbs)¶ Retrieve a complex-valued accumulative fixed-point fold function.
-
template<typename VECTOR_TYPE, typename SCRATCH_VEC>
static inline std::function<void(typename VECTOR_TYPE::iterator, typename VECTOR_TYPE::const_iterator)> fold_complex_multiply(std::size_t src_limbs, std::size_t acc_limbs, SCRATCH_VEC &scratch)¶ Retrieve a complex-valued multiplicative fold function.