use neopdf::parser::{LhapdfSet, NeopdfSet};
use pyo3::prelude::*;
use super::gridpdf::PyGridArray;
use super::metadata::PyMetaData;
#[pyclass(name = "LhapdfSet")]
pub struct PyLhapdfSet {
pub(crate) inner: LhapdfSet,
}
#[pymethods]
impl PyLhapdfSet {
#[new]
#[must_use]
pub fn new(pdf_name: &str) -> Self {
Self {
inner: LhapdfSet::new(pdf_name),
}
}
#[must_use]
pub fn info(&self) -> PyMetaData {
PyMetaData {
meta: self.inner.info.clone(),
}
}
#[must_use]
pub fn member(&self, member: usize) -> (PyMetaData, PyGridArray) {
let (meta, gridarray) = self.inner.member(member);
let meta = PyMetaData { meta };
let gridarray = PyGridArray { gridarray };
(meta, gridarray)
}
#[must_use]
pub fn members(&self) -> Vec<(PyMetaData, PyGridArray)> {
let num_members = self.inner.members().len();
(0..num_members).map(|idx| self.member(idx)).collect()
}
}
#[pyclass(name = "NeopdfSet")]
pub struct PyNeopdfSet {
pub(crate) inner: NeopdfSet,
}
#[pymethods]
impl PyNeopdfSet {
#[new]
#[must_use]
pub fn new(pdf_name: &str) -> Self {
Self {
inner: NeopdfSet::new(pdf_name),
}
}
#[must_use]
pub fn info(&self) -> PyMetaData {
PyMetaData {
meta: self.inner.info.clone(),
}
}
#[must_use]
pub fn member(&self, member: usize) -> (PyMetaData, PyGridArray) {
let (meta, gridarray) = self.inner.member(member);
let meta = PyMetaData { meta };
let gridarray = PyGridArray { gridarray };
(meta, gridarray)
}
}
pub fn register(parent_module: &Bound<'_, PyModule>) -> PyResult<()> {
let m = PyModule::new(parent_module.py(), "parser")?;
m.setattr(
pyo3::intern!(m.py(), "__doc__"),
"PDF set parser utilities.",
)?;
pyo3::py_run!(
parent_module.py(),
m,
"import sys; sys.modules['neopdf.parser'] = m"
);
m.add_class::<PyLhapdfSet>()?;
m.add_class::<PyNeopdfSet>()?;
parent_module.add_submodule(&m)
}