quad 0.1.2

Quadrature integration
Documentation
use crate::constants::{HeapItem, Myf64};
use std::collections::{BinaryHeap, HashMap};

#[derive(Debug, Clone)]
pub struct QagIntegrationResult {
    pub result: Vec<f64>,
    pub abserr: f64,
    pub more_info: Option<MoreInfo>,
}

impl QagIntegrationResult {
    pub fn new_more_info(
        result: Vec<f64>,
        abserr: f64,
        neval: i32,
        last: usize,
        hash: HashMap<(Myf64, Myf64), Vec<f64>>,
        heap: BinaryHeap<HeapItem>,
    ) -> Self {
        Self {
            result,
            abserr,
            more_info: Some(MoreInfo::new(neval, last, hash, heap)),
        }
    }

    pub fn new(result: Vec<f64>, abserr: f64) -> Self {
        Self {
            result,
            abserr,
            more_info: None,
        }
    }

    pub fn new_error() -> Self {
        Self {
            result: vec![0.0],
            abserr: 0.0,
            more_info: None,
        }
    }
}

#[derive(Debug, Clone)]
pub struct MoreInfo {
    pub neval: i32,
    pub last: usize,
    pub hash: HashMap<(Myf64, Myf64), Vec<f64>>,
    pub heap: BinaryHeap<HeapItem>,
}

impl MoreInfo {
    pub fn new(
        neval: i32,
        last: usize,
        hash: HashMap<(Myf64, Myf64), Vec<f64>>,
        heap: BinaryHeap<HeapItem>,
    ) -> Self {
        Self {
            neval,
            last,
            hash,
            heap,
        }
    }
}