# PDL
π¦ stdpdl
`use PDL` boots Core, Ops, Ufunc, Math, Primitive, Slices, Basic
and exports the standard PDL functions into the callerβs namespace.
## Option B Architecture
Every PDL object in Perl stores a `*mut c_pdl` (the C-repr struct from
core_vtable) directly in PERL_MAGIC_ext on the blessed SV. This mirrors
how upstream PDL does it (pdl_SetSV_PDL / pdl_SvPDLV from `pdlcore.c`).
No rust_pdl::Pdl intermediary. No copy bridge. The same pointer that
lives in the SV is passed directly to pdl_run_\* functions.
Child submodules declared here (leaf-with-children pattern, same as
crate::native::p5::Peta::FFI) because PDL has both its own `P5_ENTRY`
and 14 sub-namespace modules. Rust does not allow `#[path]` combined
with an inline block.
## Modules
- [`PDL::Bad`](PDL/Bad.md) β bad value (missing data) support
- [`PDL::Basic`](PDL/Basic.md) β basic constructors and utility functions
- [`PDL::Constants`](PDL/Constants.md) β mathematical and physical constants
- [`PDL::Core`](PDL/Core.md) β constructors, accessors, type system, DESTROY
- [`PDL::FFT`](PDL/FFT.md) β Fast Fourier Transform operations
- [`PDL::Lite`](PDL/Lite.md) β minimum PDL module OO loader
- [`PDL::LiteF`](PDL/LiteF.md) β PDL::Lite + Basic + Primitive
- [`PDL::Math`](PDL/Math.md) β mathematical functions (sin, cos, exp, log, etc.)
- [`PDL::MatrixOps`](PDL/MatrixOps.md) β matrix operations (det, inv, eigens, etc.)
- [`PDL::Ops`](PDL/Ops.md) β element-wise arithmetic, comparison, and logic operations
- [`PDL::Primitive`](PDL/Primitive.md) β fundamental operations (inner, outer, matmult, etc.)
- [`PDL::Slices`](PDL/Slices.md) β indexing, slicing, and data rearrangement
- [`PDL::Types`](PDL/Types.md) β PDL type system (byte, short, long, float, double, etc.)
- [`PDL::Ufunc`](PDL/Ufunc.md) β Unary reductions and aggregations over PDL arrays.
## Functions
### Other Functions
#### `type_convert_func`
Shared XS function for all type constructors (byte, short, float, etc.)