Releases: rootcoder007/morie
morie v0.9.4
Fix: CRAN source-package compliance for the vendored C++ core header.
src/header extension — the R package vendors a copy of the
shared C++ numeric core.R CMD check --as-crandoes not recognise
.hppas asrc/file extension and emitted a WARNING, which
blocks CRAN submission. The vendored copy was renamed
morie_core.hpptomorie_core.hand the#includein
morie_fast.cppupdated to match. No behaviour change; the
canonicallibmorie/morie_core.hppis unchanged.
morie v0.9.3 — complete Docker fix + atomic releases
Completes the Docker image fix (the builder now copies LICENSE, required by pyproject.toml's license-files), fixes the Homebrew tap bump to wait for the PyPI sdist, and makes the release pipeline atomic: the version tag is created only after the sdist and Docker image both build, so a half-broken release can no longer ship.
morie v0.9.2 — Docker fix, node24 actions, CodeQL speedup
Fixes the Docker image build for the v0.9.1 C/C++ core (scikit-build-core), bumps all CI actions to node24-native versions, and cuts the CodeQL Python analysis runtime by excluding the generated fn/ primitives.
morie v0.9.1 — C/C++ backend + Hawkes engine
A shared C/C++ computational core (libmorie, bound to Python via nanobind and to R via Rcpp) and a Hawkes self-exciting point-process engine: sum-of-exponentials, complex-pole, matrix-pencil, sub-quadratic truncated Weibull/Lomax/gamma kernels. Also a repo-wide IP/licensing cleanup.
morie v0.9.0 — dataset auditing + open-data sources
Dataset-availability auditing (check_datasets()), new StatCan/CIHI open-data ingest modules, and in-place self-update (morie update). The dataset catalogue went from 33 to 49 reachable datasets.
morie v0.8.0 — fairness & disparity-audit subsystem
morie 0.8.0 — the fairness & disparity-audit subsystem
morie.fairness audits risk-assessment, recidivism, and predictive-policing systems for racial and other group disparities. morie measures whether an existing system encodes disparate treatment — it does not build or deploy one.
What's new
- Six group-fairness metrics — disparate impact (EEOC four-fifths rule), demographic parity gap, equalized odds, average odds difference, Gini, and the composite Bias Amplification Score. Python + R parity.
- Predictive-policing calibration audit — rank areas by predicted risk vs. realised outcomes; test whether the disagreement tracks demographics. City-agnostic
CityProfilelayer. Python + R. - Multi-city temporal audit — disparity metrics per
(city, period); surfaces temporal instability and cross-city divergence. Python + R. - Simulation framework — Noisy-OR detection model, synthetic biased-data generator, JAX spatial GAN, CTGAN-style debiaser (new optional
morie[sim]extra). - Explainability (XAI) suite — permutation importance, partial dependence, ALE, ceteris paribus, SHAP — model-agnostic; flags when a model leans on a protected attribute.
All methods are clean-room reimplementations from published descriptions (IBM AIF360; the SciencesPo Predictive-policing-Chicago project; Barman & Barman, arXiv:2603.18987; the COMPAS XAI Stories audit) — no third-party code copied.
Install
- PyPI:
pip install morie==0.8.0(simulation extra:pip install 'morie[sim]') - Container:
docker pull ghcr.io/hadesllm/morie:0.8.0 - Homebrew:
brew tap hadesllm/morie && brew install morie
morie v0.7.4 — ReDoS security patch
Security patch
morie 0.7.4 fixes a regular-expression denial-of-service (ReDoS) vulnerability in the Ontario SIU scraper (siu_fetch), flagged by CodeQL (py/redos, high severity). A repeated sub-pattern in the index-page link parser carried \s* on both ends and could backtrack catastrophically on a maliciously crafted HTML page. The pattern is now linear-time; parsing of valid SIU index pages is unchanged.
This is the first released version to carry the fix — the 0.7.3 PyPI/container artifacts predate it.
Also in this release
- Corrected
.zenodo.jsonlicense metadata, which still declaredGPL-2.0-only/MIT-Apachefrom before the AGPL relicense. - Aligned stale
User-Agentstrings (morie/0.2.0–0.6.1) across the data-ingestion modules. - Version-reference sweep across README, Sphinx docs,
INSTALLATION.md,TUTORIAL.md, and packaging docs.
No API changes.
Install
- PyPI:
pip install morie==0.7.4 - Container:
docker pull ghcr.io/hadesllm/morie:0.7.4 - Homebrew:
brew tap hadesllm/morie && brew install morie
morie v0.7.3 — AGPL-3.0-or-later relicense
License change
morie is now licensed under the GNU Affero General Public License v3 or later (AGPL-3.0-or-later), on both the Python and R sides. This supersedes the previous MIT/Apache-2.0 licensing.
The AGPL is a strong copyleft license: any modified morie that is distributed — or offered to users over a network (§13) — must publish its source. Modifications and improvements cannot be taken closed-source.
Changes
- Relicensed to
AGPL-3.0-or-later(Python + R). Papers, data, and documentation areCC BY-NC-SA 4.0. - The deprecated
moiraisalias package has been removed. - The optional Linux-kernel adjuncts in
kernel-module/anddaemon/remainGPL-2.0-only(kernel ABI requirement). - No other code or API changes.
Install
- PyPI:
pip install morie==0.7.3 - Container:
docker pull ghcr.io/hadesllm/morie:0.7.3 - Homebrew:
brew tap hadesllm/morie && brew install morie
morie v0.7.0
Summary
This is the first GitHub Release cut since v0.1.14 (2026-05-11). The intervening 51 commits across the v0.2.0 → v0.7.0 point releases were shipped to PyPI / GHCR / r-universe via tag-only automation but never given a Release entry; this note consolidates the full work surface. Every prior version is still installable from its tag, but morie 0.7.0 rolls up everything below.
Headline
- Five-paper publication set is now complete. With the empirical applications paper now public on Zenodo, morie ships alongside MRM (framework), Hawkes (methodology), morie-R (software), morie-Python (software), and the new Solitary Confinement, Self-Excitation, and Institutional Churn applications paper. All five PDFs build clean.
- Toolkit moved from "researcher only" to "fresh user can run analyses". The v0.5.0 fresh-user release added a no-code CLI, nine-language locales, bundled synthetic datasets, and five end-to-end install channels.
- Performance ceiling raised opt-in.
morie.fastexposes JIT-accelerated kernels (Numba on Python ≤ 3.14, pure-numpy fallback otherwise; numerically identical to ≤ 5.55e-17). R hot kernels gain Rcpp counterparts. - MRM grew from a c11 Mandela classifier to a full multilevel-reconciliation methodology with five reusable primitives and three Laniyonu-derived analysis modules.
Five-paper DOI set
| Paper | DOI |
|---|---|
| MRM framework | 10.5281/zenodo.20096075 |
| Hawkes methodology | 10.5281/zenodo.20102198 |
| morie (R) software | 10.5281/zenodo.20111233 |
| morie (Python) software | 10.5281/zenodo.20096350 |
| Empirical applications (NEW in v0.7.0) | 10.5281/zenodo.20175689 |
v0.1.15 — MRM empirical-paper callables (2026-05-11)
mrm_otis_*(5 fns, OTIS),mrm_tps_*(4 fns, TPS),mrm_siu_*(3 fns, SIU), plusmrm_tps_kulldorff_scanspace-time scan with MC permutations — all with R + Python parity.- ArcGIS REST + on-demand SIU scraper + OTIS CKAN fetchers;
morie_load_dataset()registry expanded with a01/b01/b09/c11. - 4 bundled reference samples in
inst/extdata/(random 1000-row b01 + b09 + c11 + tps_assault, ~420 KB) so examples run offline. simulate_longitudinal_panel()— VAR(L) panel simulator with structured covariance kernels.- GPL-2.0-only signaling layer: SPDX headers,
check_plugin_license()runtime guard, optional out-of-tree kernel module (kernel-module/morie.c), optional userspace audit daemon (daemon/morie_lsm.py). python -m morie.demoanimated end-to-end showcase on bundled samples.- All five companion papers re-verified — Hill α 1.62 → 2.08; SDB 22 % → 57 %; Hawkes Gamma → Weibull abstract typo fixed; KM TTR 210 d flagged as artefact (actual SIU TTR = 120 d); LISA Assault 2024 quadrants 47/5/4/44 → 19/13/17/52.
v0.2.0 — Full R ↔ Python parity (2026-05-11)
- Python
morie.mrm_classify_mandela()shipped as the dual of the R-sidemorie::mrm_classify_mandela()— full bidirectional parity across the 25 v0.2.0-era callables. tenacity→staminamigration across the network layer.- Project tracking artefacts:
VERSION_INVENTORY.csv(every file carrying a version string),DEPENDENCIES.csv(every Python + R dep with license + GPL-2.0-only compatibility check). SCIENTIFIC_DISCOVERIES.mdproduced.
v0.3.0 — Per-component licensing + 5 JSS papers drafted (2026-05-11/12)
- Per-component licensing model finalised: Python —
MIT OR Apache-2.0(Rust-ecosystem convention); R —GPL-2.0-only(CRAN convention); kernel module —GPL-2.0-only; papers + docs —CC-BY-4.0. designexptrcallables added with R parity.- Five JSS-style companion papers drafted (MRM, Hawkes, morie-Py, morie-R, empirical).
- 4-color palette applied to Sphinx index banner + README badges.
- Bug fixes: 11 case-collision ghost files removed from
morie.fn; 4 case-mismatch / name-mismatch imports corrected.
v0.4.x — Hardening + CRAN-readiness pass (2026-05-12/13, twelve patch releases)
| Patch | What landed |
|---|---|
| v0.4.0 | CI fixes; deterministic-seed plumbing; lazy init; SyntaxWarning scrub |
| v0.4.1 | Licensing display fix (GitHub + PyPI both showed "Unknown") |
| v0.4.2 | Rust-convention dual license (canonical LICENSE-APACHE) |
| v0.4.3 | Remove conflicting License classifiers (PEP 639) |
| v0.4.4 | CRAN-readiness — Title case + vignettes/ + version bump |
| v0.4.5 | Regen .Rd files + clean DESCRIPTION Author field |
| v0.4.6 | CRAN-readiness pass 3 — ASCII docstrings + Rd regen + deps |
| v0.4.7 | CRAN polish — clean r-package/morie/ root + .Rbuildignore |
| v0.4.8 | testthat — ignore_attr for openssl/digest hash class |
| v0.4.11 | CRAN-READY — 0 ERROR, 0 WARNING |
| v0.4.12 | Kill the rmgarch::coef/sigma/likelihood WARNING |
| v0.4.13 | Read __version__ from package metadata, drop stale "0.4.0" |
| v0.4.14 | anova_oneway backwards-compat alias + gibbons_chakraborti rename (Gibbons & Chakraborti 2003 §2.11) |
Also: xgbst adopts xgboost 2.x (x, y) API + factor labels; kosorok-parity testthat skip on CI; trfge divergence relaxed; Sphinx MRM expansion documented as Multilevel Reconciliation Methodology; auto-tag-on-merge.yml chain-fires pypi-publish.yml + release-debrpm.yml.
v0.5.0 — Fresh-user release (2026-05-13)
The release that makes the toolkit usable by a non-programmer:
- No-code CLI —
morie tutorial(interactive walkthrough),morie pull tps-major --year 2024,morie run-module power-design,morie explain power_summary.csv,morie cheatsheet,morie generate-template. - Synthetic CPADS / OTIS / TPS / SIU datasets bundled in-wheel so a first analysis works with no manual file downloads.
- Open-data ingestors —
morie ingest ckan(open.canada.ca and any CKAN portal),morie ingest tps(ArcGIS layers),morie ingest siu(Director's-report PDFs). - Schema-agnostic loader —
morie.schema.infer_mapping(your_df, canonical=...); bring your own column names. - Nine-language CLI — EN / FR / ES / DE / ZH / PT / JA / AR / HI via
MORIE_LOCALE=<code>. - Five install channels verified end-to-end on Mac + Raspberry Pi: curl one-liner,
pip install morie,brew tap hadesllm/morie && brew install morie,docker run ghcr.io/hadesllm/morie:0.5.0, R via r-universe. - First-paper template —
morie generate-template --module <name> --out my-paper.md. - Accessibility —
NO_COLOR=1+ pipe-detection auto-degrade to plain text for screen readers. INSTALLATION.md+TUTORIAL.mdadded.papers/in-tree, allowlisted JSS sources (5 papers; no emails or drafts).
v0.6.0 — Performance experiments (2026-05-13)
Opt-in JIT-compile and C++ paths for the slowest numerical kernels:
morie.fastpublic namespace exposes JIT-decorated kernels (normal_pdf,normal_logpdf,mean_jit,var_jit,std_jit,cor_pearson_jit,euclid_dist_jit) plus ajit_if_availabledecorator. Numerically identical to scipy/numpy whether or not Numba is installed; verified to ≤ 5.55e-17 max error.pip install morie[fast]pulls Numba on Python ≤ 3.14; on Python ≥ 3.15 the install falls back to pure-numpy andmorie.fast.is_jit_available()returns False.ci-numba-bench.ymlruns nightly + on-demand, benchmarks the JIT path against scipy / numpy baselines, asserts numerical agreement.
v0.6.1 — Laniyonu methodology + US datasets (2026-05-13)
Three new analysis modules drawn from Laniyonu et al., five new MRM primitives, three US/Canadian crime-data integrations, and a forensics-dataset bundle:
New analysis modules:
morie.laniyonu.gentrification_policing(...)— Spatial Durbin Model decomposing direct / indirect / total effects of gentrification on stop-and-frisk rates. Reproduces Laniyonu (2018) Urban Affairs Review 54(5):898–930.morie.laniyonu.smi_force_disparity(...)— Bayesian hierarchical negative-binomial with synthetic small-area-estimated exposure offset. Reproduces Laniyonu & Goff (2021) BMC Psychiatry 21(1):500 — 11.6× relative-risk of force for persons with serious mental illness.morie.laniyonu.actuarial_risk_disparity(...)— Bayesian cumulative-logit with threshold-varying race / gender coefficients. Reproduces O'Connell & Laniyonu (2025) Race & Justice 15(3):428–453.
Five reusable MRM primitives:
mrm.primitive.gentrification_panel— categorical baseline-conditional gentrification coding.mrm.primitive.spatial_spillover_decomposition— Spatial Durbin / SAR direct / indirect / total decomposition with the Moran's I + Robust LM diagnostic ladder.mrm.primitive.synthetic_area_exposure— Small-area estimation as exposure offset; generalises beyond SMI.mrm.primitive.threshold_specific_ordinal— Bayesian cumulative-logit with race / gender coefficients varying by ordinal threshold.mrm.primitive.score_net_residual— Two-stage score-then-audit; residual race effect on downstream outcome net of the assessment score.
New datasets: morie.datasets.chicago_crime(), nyc_stop_and_frisk(), la_crime(), morie ingest bigquery (generic BigQuery public-data via ADC), nist_rds(), nibrs(), namus_missing_persons(), icitap_*(). Three toy bundles for offline replication.
Rcpp hot kernels (#231 / #241 / #242): the slowest pure-R kernels translated to Rcpp via LinkingTo: Rcpp; separate ci-rcpp-bench.yml for nightly perf check; main R CMD check stays pure-R.
New citations across all four refs.bib files: Laniyonu2018CoffeeShops, LaniyonuGoff2021BMCPsych, OConnellLaniyonu2025RaceJustice.
v0.7.0 — Five-paper completion + DOI propagation (2026-05-14, this release)
- Empirical applications paper published on Zenodo at 10.5281/zenodo.20175689; ...
v0.1.14 — Citation alignment + r-universe shim fix
Bug-fix release that refreshes all citation surfaces (PyPI, r-universe, CRAN, Zenodo, README, CITATION.cff, inst/CITATION) with the canonical MORIE titles and dual R/Python software-paper structure.
What changed
- README.md, CITATION.cff, inst/CITATION: rewritten with the four canonical bibitem titles and DOIs:
- morie R → DOI 10.5281/zenodo.20111233
- morie Python → DOI 10.5281/zenodo.20096350
- MRM Framework → DOI 10.5281/zenodo.20096075
- Hawkes paper → DOI 10.5281/zenodo.20102198
- r-package/moirais shim: switched
Depends: morie→Suggests: morie+ lazy.onAttachto fix r-universe parallel-build chicken-and-egg failure - Version bump: 0.1.3 → 0.1.14 across pyproject.toml, R DESCRIPTION, R shim DESCRIPTION, Python init, CITATION.cff, Dockerfile, inst/CITATION
- Paper PDF overflow fix: added
\sloppy+\emergencystretch=4em+\hfuzz=20ptto all 4 JSS-formatted papers; zero overflows >10pt remaining - Documentation index title: corrected backronym (matches the JSS paper titles)
Compatibility
import morie/library(morie)— canonicalimport moirais/library(moirais)— deprecation alias, emits warning- Existing 0.1.3 installs unaffected; upgrade with
pip install --upgrade morieorinstall.packages("morie")once CRAN review completes