MP/open source
OPEN SOURCE · UPDATED OCT 2026

Open source

Pull requests and commits I've written for other people's projects, with what each one changes. Merged work is grouped by project.

MERGED PRS · 12 IB_ASYNC COMMITS · 2 CHECKED · oct 26, 2026

Merged

Each of these was reviewed and merged by the project's maintainers. Where I could confirm that a change shipped in a release, the release is listed.

NautilusTrader · Rust and Python trading engine

  • #5432 MERGED · OCT 2026
    The Python statistics getters now return their results in name order, so tearsheet rows no longer move between runs of the same backtest.
  • #5407 MERGED · OCT 2026
    Registering an instrument again in the Rust backtest engine no longer replaces its matching engine: an identical definition is a no-op, and a changed one is rejected before any state changes.
  • #4519 MERGED · JUL 2026
    Both Interactive Brokers adapters now load every configured instrument at startup, fail when one cannot be resolved, and stay retryable after a failed start.
  • #4354 MERGED · JUL 2026
    Added up and down capture ratios as Rust-core statistics on the benchmark-aware path from #4251, following empyrical's convention.
  • #4251 MERGED · JUN 2026
    Added beta, Jensen's alpha, information ratio, tracking error, and Treynor ratio to the Rust core with Python bindings, following a design agreed with the maintainer in an issue first.
  • #4174 MERGED · JUN 2026
    MaxDrawdown, CAGR, and CalmarRatio now return None from the PnL and position methods instead of panicking when the Rust analyzer runs every registered statistic.
  • #4141 MERGED · MAY 2026
    Intraday returns are now compounded instead of summed when grouped into daily bins, which corrects Sharpe, Sortino, volatility, and CAGR for any backtest with sub-daily data.
  • #4099 MERGED · MAY 2026
    The Interactive Brokers historical client's request_instruments now returns only the instruments asked for in that call, not every instrument cached by earlier calls.

MLX · Array framework for Apple silicon

  • #4748 MERGED · OCT 2026
    My first MLX pull request: vmap of tri_inv ignored the triangular flags and silently returned the full inverse, which also affected solve_triangular and cholesky_inv. The C++ fix comes with a regression test.

JAX · Composable transformations of Python and NumPy programs

  • #41960 MERGED · OCT 2026
    The binom, nbinom, geom and bernoulli log-pmfs in jax.scipy.stats now return -inf at a non-integer k, where they used to return a finite value. The change comes with tests for each distribution.

QuantLib-SWIG · Python bindings for QuantLib

  • #928 MERGED · SEP 2026 · RELEASED IN 1.44
    Exported variance swaps with their replicating and Monte Carlo pricing engines to Python, with tests ported from the C++ test suite.

Darts · Time-series forecasting in Python

  • #3122 MERGED · JUL 2026 · RELEASED IN 0.47.0
    Added a zero_division option to nine percentage and range-based metrics, so a zero denominator gives a defined value with a warning, or an error if asked, instead of always failing.

ib_async · Python client for the Interactive Brokers API

Both changes reached ib_async as commits under my name that the maintainer applied, so GitHub shows my pull requests as closed rather than merged.

  • 01da4f0 COMMIT · NEXT BRANCH · APR 2026
    News ticks now carry the contract they came from, so headlines from several streaming subscriptions can be matched to their symbol. From my pull request #214.
  • e6414ea COMMIT · 3.0 LINE · OCT 2026
    Fixed the Ticker.news example in the v3 migration guide, which used a field that news ticks do not have. From my pull request #233.

My own repositories

The larger ones have their own pages: trading-algo, kite-algo, and worldmonitor-mcp. Seven smaller public repositories:

  • stockbench-inspect
    A port of the StockBench benchmark by Chen et al. (arXiv 2510.02209) to the Inspect evaluation framework, in which a model manages $100,000 across 20 Dow stocks over 83 trading days from its daily prices, news and positions. It keeps the original prompts, includes parity scripts that run the original code and the port on the same scripted replies and compare them, and adds scores that show when a weak model looks safe only because its replies were unusable.
  • label-lattice
    A Python library with a command-line tool, and a simulation, for sharing costly AI work between people with different permissions. Under its scheme, Label-Lattice memoization with Lazy-Meet Factoring, the work on each file is done once, a combined result is released only to someone allowed to see every file in it, and revoked access takes effect. The README says plainly that the AI parts are stand-ins and that the company-scale results come from a simulation of 10,000 people.
  • uni-cli
    A read-only command line for Canvas courses that shows what is due, grades, announcements, and what changed. It only sends GET requests to your own Canvas site.
  • canvas-chatgpt-plugin
    A read-only Canvas companion for ChatGPT, built as an MCP server for courses, assignments, announcements, grades, and files. It is a developer preview.
  • reflexive-options
    Research code and a paper on a model in which dealer option positions feed back into volatility, with a pre-analysis plan for testing it on market data. The README says plainly what the model does not show.
  • account-fallback
    A small macOS wrapper that switches an AI coding CLI to a backup account when usage runs out and back to the main account when it resets, with tokens kept in the Keychain.
  • lab launcher
    A launcher that runs an AI coding CLI with a smaller context cap, a cheaper default model, capped tool output, a status line and a usage scanner, without editing the CLI's own settings. The README explains the reasoning behind each setting and ships no benchmark numbers.

mahimn · open source · checked against github oct 26, 2026 · dates in toronto time