Changes in version 8.0.1 (2026-10-16) Maintenance release addressing macOS compatibility issues identified during CRAN checks. No changes to the functionality, algorithms or public API introduced in PFIM 8.0. It uses S7 objects in R and compiled Rcpp/Armadillo kernels for Fisher information matrix (FIM) calculations and optimization. This release includes categorical covariates, inter-occasion variability (IOV), covariate-effect tests, expanded design constraints and model support, numerical corrections, and compatibility adjustments for CRAN and macOS. It requires R >= 4.5.0 and C++17 for source builds. Architecture and user interface - Rebuilt the package around S7 classes for evaluations, optimizations, models, model parameters, FIM types, designs, study arms, covariates, residual errors and optimization algorithms. Modular R code is backed by compiled C++ routines. - Simplified the public interface around the Evaluation() and Optimization() constructors, run(), Report() and dedicated get*()/plot*() accessors. Internal evaluation and optimization pipeline functions are no longer part of the public workflow. - Renamed key entry points: evaluateDesign() and optimizeDesign() to run(); Dcriterion() to getDcriterion(); plotSEFIM() and plotRSEFIM() to plotSE() and plotRSE(); plotWeightsMultiplicativeAlgorithm() to plotWeights(); plotFrequenciesFedorovWynnAlgorithm() to plotFrequencies(); plotEvaluationResults() and plotEvaluationSI() to plotEvaluation() and plotSensitivityIndices(); and generateReportEvaluation()/generateReportOptimization() to Report(). - Added session controls (pfim_get_option(), pfim_set_option(), pfim_reset_session()) and registration interfaces for extending model, FIM and optimizer types. Covariates, inter-occasion variability and inference - Added categorical between-subject covariates (Covariate, CategoricalCovariate) with category proportions, effects on typical model parameters, and additive or exponential covariate-effect models (modelCovariatesEquation). Within-subject covariate sequences can represent changes across occasions, including crossover-style designs. - Added inter-occasion variability through CategoricalCovariateWithIOV, with occasion-level variance parameters (gamma^2) for selected model parameters. Evaluation() and Optimization() support numberOfOccasions; when possible, the number is inferred from the model layout. - Extended population-FIM construction to covariate-by-occasion gradient structures and dedicated C++ combination routines. Fixed typical parameters (fixedMu) and fixed inter-individual variance parameters (fixedOmega) are accounted for separately while preserving the contributions required to estimate remaining variance components. - Extended individual and Bayesian FIM evaluation to covariate/IOV designs. When combining study arms or covariate strata, these FIM types use a weighted mixture of stratum covariance matrices: C_bar = sum_s w_s * M_s^(-1), rather than simply summing the FIMs. The resulting precision estimates are not, in general, numerically comparable with those from PFIM 6 or PopED for these designs. Protocols with positive weight that are non-identifiable give infinite standard errors. - Added covariateTest() (alias tost()) for effects represented in the population FIM after run(). Available tables address statistical significance, equivalence/non-relevance through two one-sided tests (TOST), and clinical relevance; outputs include effect ratios, relevant log-ratio bounds, power and required sample size for a target power. saveCovariateTest() exports the tables. These tests do not apply to individual/Bayesian subject-level precision matrices lacking the required covariate-effect block. - Enabled covariate-aware design evaluation and optimization, with covariate tables in HTML evaluation reports. Population plotSE() and plotRSE() include typical-parameter and covariate-effect blocks in the FIM parameter order. Design optimization and sampling constraints - Added or reimplemented five optimizers with compiled numerical kernels: Multiplicative and Fedorov-Wynn for discrete candidate designs, and Simplex, particle swarm optimization (PSO) and population genetics-based optimization (PGBO) for continuous sampling-time optimization. - Supported joint discrete optimization across multiple arms within one design and candidate grids for sampling times and administrations. Where no administrationsConstraints is supplied, discrete optimizers use the arm's existing administration as the dose grid. - Used Hamilton's largest-remainder method to turn discrete design weights into integer subject counts whose sum equals the requested study size. - Added sampling windows (samplingsWindows) and counts per window (numberOfTimesByWindows) for continuous optimization, including checks for consistency with initial sampling schedules and feasibility constraints. - For the multiplicative algorithm, checked the optimality condition before updating the returned weights. Exposed mixture and realized D-criteria separately through getMixtureDcriterion() and getRealisedDcriterion(). In joint multi-outcome optimization, weights are restricted to the selected protocol, with subjects distributed across that protocol's arms. - Set the default Fedorov-Wynn optimality gap to 1e-4. Reaching the cycle limit without meeting the stopping criterion is reported as incomplete, with a warning, rather than as a successful optimization. - Corrected Simplex behaviour when numberOfTimesByWindows increases and rejected infeasible initial designs instead of reporting convergence. Continuous optimizers report converged = NA if tolerance <= 0 disables their tolerance-based stopping rule; they warn when arm sampling times differ from initialSamplings, the actual optimization starting point. Models, residual errors and numerical reliability - Supported custom analytical and ODE models as well as an expanded PK/PD library, including bolus, infusion, absorption, steady-state, multi-compartment, turnover and Michaelis-Menten models. - Added algebraic observed responses through outputs in Evaluation() and Optimization(). Sampling times refer to the underlying model states, while residual error definitions refer to observed outputs, including transformed scales such as concentration or log-transformed response. - Implemented Constant, Proportional, Combined1 and Combined2 residual-error models. Residual parameters are labelled as standard deviations (sigma), not variances, consistent with their stored values. - Corrected population-FIM variance calculations when a typical parameter is fixed (fixedMu = TRUE) but its inter-individual variance remains estimable: the model gradient is retained where needed for the variance contribution. fixedMu and fixedOmega are treated independently. - Improved treatment of rank-deficient information matrices: non-identifiable directions report infinite standard errors, and rank deficiency is reflected in the condition number rather than masked by very large finite values. - Separated ODE finite-difference step selection from solver tolerance to avoid inflating derivative steps and biasing FIM calculations. - Corrected analytic-model evaluation for time-dependent, non-administered outcomes at their own sampling times. Corrected formulas for selected two-compartment bolus/infusion models, one-compartment steady-state infusion, exponential baselines, sigmoid turnover and Michaelis-Menten ODE models using central volume V1. Unknown model names are rejected. - Preserved zero-valued covariate effects as estimable population-FIM columns, allowing standard errors to be computed under the null hypothesis, with a warning. - Improved input checks for non-finite/NA parameters, unknown initial conditions and undeclared covariate categories, with explicit PFIM: errors. Performance, reporting and package compatibility - Moved core FIM assembly, residual-variance calculations and optimization computations into C++ with Rcpp/Armadillo. Added caches for FIMs, ODE trajectories and finite-difference gradients; continuous optimizers reuse a common evaluation context during a search. Performance depends on the model and design; no universal acceleration factor is asserted. - Added HTML reporting for evaluations and optimizations through Report(). Reporting restores knitr chunk options and preserves the user's open graphics devices. - Aligned population SE/RSE plot ordering with show(), including typical parameters (mu), covariate effects (beta), inter-individual variance (omega^2), occasion-level parameters (gamma) and residual error (sigma). - Improved compatibility with current S7 and R-devel by registering optional S7 class unions with S4 and using quoted expressions for empty property defaults. - Included prebuilt HTML vignettes and a vignette index (inst/doc/meta/vignette.rds) to address CRAN incoming package checks. - Skipped side-car Report() HTML while vignettes are woven under R CMD check. The thirteen reports (vignettes 1–3 and 5) are written only to a temporary directory and are not part of the vignette. Cached evaluation and optimization results are still loaded, and plots are still drawn. R CMD build outside a check still writes the reports. - Skipped the G-CSF / PopED 11-state ODE FIM comparison on CRAN (PFIM_GCSF_FORCE_RUN). It still runs when NOT_CRAN=true. - Relaxed the test comparison tolerance for reference Michaelis-Menten ODE FIM determinants from 1e-6 to 1e-3 relative error to accommodate cross-platform ODE and finite-difference variability observed on arm64 macOS. This change concerns regression-test acceptance, not the requested accuracy of the underlying numerical algorithms. Documentation and verification examples - Added Vignette_01_discrete_design (discrete optimization), Vignette_02_continuous_design (continuous optimization), Vignette_03_covariates_analytical_pk (categorical covariates, IOV and effect tests), Vignette_04_tim_waterhouse_pediatric (a pediatric sparse-design example based on Tim Waterhouse/PopED), Vignette_05_gcse_pkpd (a G-CSF/filgrastim PK/PD example with a PopED Design 1 RSE comparison), and LibraryOfModels. - Added or updated automated tests for analytic/ODE FIMs, optimization branches, covariates/IOV and numerical reference cases, including the G-CSF Design 1 comparison. Numerical comparison to a reference case is not a claim that all models or algorithms have been independently validated. Contributors - Romain Leroux (aut): Author and developer of the entire PFIM 8 codebase, including all R/S7 and C++ source code, numerical algorithms, automated tests and technical documentation. - France Mentré (cre): CRAN package maintainer. - Jérémy Seurat (ctb): contributions (two vignettes). - Antoine Croxo (ctb): contributions (one vignette), beta-testing. - Lucie Fayette (ctb): contributions (one vignette), beta-testing and logo design. - The pediatric sparse-design example (Vignette_04_tim_waterhouse_pediatric) and the G-CSF/filgrastim PK/PD example (Vignette_05_gcse_pkpd) follow Tim Waterhouse's webinar material A Gentle Introduction to Optimal Design for Pharmacometric Models (https://github.com/timwaterhouse/optimal-design-2023).