I build tooling for inverse problems. Radar returns to subsurface geometry, degraded scans to a diagnosis that holds, noisy series to a forecast with an honest interval.
GSoC write-up · LinkedIn · X · ORCID · LeetCode
Reading gprMax output meant editing a text file, re-running an FDTD solver from a terminal, and running a matplotlib script that decided for you what to show. It is now six reactive marimo notebooks over four pure-Python modules. Mentored by Prof. Antonis Giannopoulos and Prof. Craig Warren, University of Edinburgh.
What turned up along the way. Almost every real finding came from checking something already written down.
fft_powersilently normalises every trace against its own peak, so two traces twenty times apart in amplitude plot identically when overlaid, quietly defeating the comparison the plot was made for- the ricker source delay is 31% of the standard time window and is not recoverable from the output file, so any predicted arrival that omits it is wrong by a third of the plot
- depth and permittivity are not jointly recoverable from a hyperbola fit, so the velocity recipe takes depth as an input and says why instead of reporting a number it cannot support
How it was checked. There was no code review, so something had to replace it.
- every guard is mutation-tested: remove the gain broadcast axis, the negative-gain clip or the bistatic apex offset and a named test fails
- an AST pass asserts marimo's invariants on every change, catching four regressions that
marimo checkdoes not see - validated numerically against a real 60-trace solver run, not by eye: the direct wave arrives at 1.113 ns with zero spread across traces, the hyperbola turns over at the predicted source position, and the analytic model reproduces measured arrivals to within 4%
A tool that quietly tunes itself toward the expected answer is worse than no tool.
Write-up, figures and validation · source
Tooth-AI reading a panoramic radiograph. Each mask is a separate instance, labelled with its tooth number and what was found there.
| Tooth-AI | Dental OPG analysis with Mask R-CNN instance segmentation and FDI tooth numbering, separating caries, restorations and anomalies per tooth. Under Prof. Nisha Auti, C-CAMP Inter-Institutional Biomedical Innovations Programme. Paper in preparation. |
| OsteoVision | EfficientNet-B0 imaging branch fused with a tabular MLP for clinical risk prediction. AUC-ROC 0.972, per-class threshold tuning, MC Dropout for uncertainty. |
| FleetFusion | First place, GenAIverse national hackathon. |
| sktime | MAAPE and MSLE forecasting metrics, NaiveForecaster documentation, forecasting performance — #9140 #9095 #9086 #9295 |
| mllam/neural-lam | Sphinx autodoc harness for the documentation build — #428 #442 |
| Jenkins | ARM64 CI/CD fix — #1381 |
| OpenML | #1490 |
| marimo | Upstream reports for reactive DAG bugs found during GSoC |
Corruption robustness in medical vision transformers. How CLAHE preprocessing affects MedViT V1 and V2 across MedMNIST. Write-up in progress.
Bitcoin protocol development through Bitshala's Mastering Bitcoin cohort.
Technical Head, CSI Bharati Vidyapeeth, running technical programming for 250 students. Media and Cultural Head at ACES.
Python Java PyTorch NumPy SciPy scikit-learn marimo Plotly HDF5 pytest
Final-year Computer Engineering, Bharati Vidyapeeth College of Engineering, Pune. Graduating 2027.


