pub struct AffineParams {
pub a: Vec<Rational64>,
pub b: Vec<Rational64>,
pub m: usize,
pub n: usize,
}Expand description
Affine transformation parameters.
Represents the transformation y = A*x + b where:
- A is an M x N matrix stored in column-major order
- b is an M-dimensional vector
- x is an N-dimensional input
- y is an M-dimensional output
§Examples
use tensor4all_quanticstransform::AffineParams;
use num_rational::Rational64;
// 1D shift: y = x + 3
let params = AffineParams::from_integers(vec![1], vec![3], 1, 1).unwrap();
assert_eq!(params.m, 1);
assert_eq!(params.n, 1);
// 2D rotation: y = [[1,1],[1,-1]] * x
// Column-major: [A[0,0], A[1,0], A[0,1], A[1,1]]
let params = AffineParams::from_integers(
vec![1, 1, 1, -1], vec![0, 0], 2, 2
).unwrap();
assert_eq!(params.m, 2);
assert_eq!(params.n, 2);
// With rational coefficients: y = (1/2)*x
let params = AffineParams::new(
vec![Rational64::new(1, 2)],
vec![Rational64::from_integer(0)],
1, 1,
).unwrap();Fields§
§a: Vec<Rational64>Transformation matrix A (M×N), stored in column-major order
b: Vec<Rational64>Translation vector b (M elements)
m: usizeNumber of output dimensions (M)
n: usizeNumber of input dimensions (N)
Implementations§
Source§impl AffineParams
impl AffineParams
Sourcepub fn new(
a: Vec<Rational64>,
b: Vec<Rational64>,
m: usize,
n: usize,
) -> Result<Self>
pub fn new( a: Vec<Rational64>, b: Vec<Rational64>, m: usize, n: usize, ) -> Result<Self>
Create new affine parameters.
§Arguments
a- M x N matrix in column-major order (length must be m*n)b- M-dimensional translation vector (length must be m)m- Number of output dimensionsn- Number of input dimensions
§Examples
use tensor4all_quanticstransform::AffineParams;
use num_rational::Rational64;
// 1D identity: y = x
let params = AffineParams::new(
vec![Rational64::from_integer(1)],
vec![Rational64::from_integer(0)],
1, 1,
).unwrap();
// Dimension mismatch errors
assert!(AffineParams::new(
vec![Rational64::from_integer(1)],
vec![Rational64::from_integer(0)],
2, 1, // expects 2 elements in A, got 1
).is_err());Sourcepub fn from_integers(
a: Vec<i64>,
b: Vec<i64>,
m: usize,
n: usize,
) -> Result<Self>
pub fn from_integers( a: Vec<i64>, b: Vec<i64>, m: usize, n: usize, ) -> Result<Self>
Create affine parameters from integer matrix and vector.
Convenience method that converts integer values to rationals.
§Examples
use tensor4all_quanticstransform::AffineParams;
// 2D: y = [[1, 0], [0, 1]] * x + [1, 2] (shift by (1,2))
let params = AffineParams::from_integers(
vec![1, 0, 0, 1], vec![1, 2], 2, 2,
).unwrap();
assert_eq!(params.m, 2);
assert_eq!(params.n, 2);Trait Implementations§
Source§impl Clone for AffineParams
impl Clone for AffineParams
Source§fn clone(&self) -> AffineParams
fn clone(&self) -> AffineParams
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for AffineParams
impl RefUnwindSafe for AffineParams
impl Send for AffineParams
impl Sync for AffineParams
impl Unpin for AffineParams
impl UnsafeUnpin for AffineParams
impl UnwindSafe for AffineParams
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
Casts
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read moreSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).§unsafe fn to_subset_unchecked(&self) -> SS
unsafe fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.