malachite-q 0.3.2

The arbitrary-precision type Rational, with efficient algorithms partially derived from GMP and FLINT
Documentation
use crate::Rational;
use malachite_base::test_util::generators::common::It;
use malachite_nz::integer::Integer;
use malachite_nz::natural::Natural;
use num::BigRational;

pub fn rational_rm(xs: It<Rational>) -> It<(rug::Rational, Rational)> {
    Box::new(xs.map(|x| (rug::Rational::from(&x), x)))
}

pub fn rational_nrm(xs: It<Rational>) -> It<(BigRational, rug::Rational, Rational)> {
    Box::new(xs.map(|x| (BigRational::from(&x), rug::Rational::from(&x), x)))
}

pub fn rational_pair_rm(
    ps: It<(Rational, Rational)>,
) -> It<((rug::Rational, rug::Rational), (Rational, Rational))> {
    Box::new(ps.map(|(x, y)| ((rug::Rational::from(&x), rug::Rational::from(&y)), (x, y))))
}

#[allow(clippy::type_complexity)]
pub fn rational_pair_nrm(
    ps: It<(Rational, Rational)>,
) -> It<(
    (BigRational, BigRational),
    (rug::Rational, rug::Rational),
    (Rational, Rational),
)> {
    Box::new(ps.map(|(x, y)| {
        (
            (BigRational::from(&x), BigRational::from(&y)),
            (rug::Rational::from(&x), rug::Rational::from(&y)),
            (x, y),
        )
    }))
}

pub fn rational_integer_pair_rm(
    ps: It<(Rational, Integer)>,
) -> It<((rug::Rational, rug::Integer), (Rational, Integer))> {
    Box::new(ps.map(|(x, y)| ((rug::Rational::from(&x), rug::Integer::from(&y)), (x, y))))
}

pub fn rational_natural_pair_rm(
    ps: It<(Rational, Natural)>,
) -> It<((rug::Rational, rug::Integer), (Rational, Natural))> {
    Box::new(ps.map(|(x, y)| ((rug::Rational::from(&x), rug::Integer::from(&y)), (x, y))))
}

pub fn rational_pair_1_rm<T: 'static + Clone>(
    ps: It<(Rational, T)>,
) -> It<((rug::Rational, T), (Rational, T))> {
    Box::new(ps.map(|(x, y)| ((rug::Rational::from(&x), y.clone()), (x, y))))
}

pub fn rational_pair_1_nrm<T: 'static + Clone>(
    ps: It<(Rational, T)>,
) -> It<((BigRational, T), (rug::Rational, T), (Rational, T))> {
    Box::new(ps.map(|(x, y)| {
        (
            (BigRational::from(&x), y.clone()),
            (rug::Rational::from(&x), y.clone()),
            (x, y),
        )
    }))
}

pub fn rational_vec_nrm(
    xss: It<Vec<Rational>>,
) -> It<(Vec<BigRational>, Vec<rug::Rational>, Vec<Rational>)> {
    Box::new(xss.map(|xs| {
        (
            xs.iter().map(BigRational::from).collect(),
            xs.iter().map(rug::Rational::from).collect(),
            xs,
        )
    }))
}