I am a researcher in artificial intelligence with a strong interest in probabilistic modelling, causal inference and innovative neural network frameworks, such as predictive coding or self-organizing structures. My main passion is to create algorithms and agents that can perceive, learn, decide and act under environmental uncertainty, with a strong focus on computational efficiency. I am a proficient Python and Rust programmer, and the creator of several open-source packages for physiological signal analysis, psychophysiology experiments, neural networks and computational models of learning and metacognition. I am an experienced data scientist with more than 10 years of practice and have completed several research projects, all involving advanced use of machine learning, cognitive modelling, signal processing, inferential statistics, experimental design or (neuro)physiological recording.
pyhgf - A Python library written on top of JAX and RUST to create, manipulate and sample dynamic probabilistic neural networks. It implements by default the generalised Hierarchical Gaussian Filter (see the method paper), which is a popular model in computational psychiatry that brings together reinforcement learning and Bayesian inference. The toolbox is designed as a neural network library to work with predictive coding models (which is not possible in standard frameworks like TensorFlow or Pytorch). The models can run forwards or be inverted (all functions comply with JAX transformations, including grad()
), allowing inference over parameters using e.g. Hamiltonian MCMC. Recently, I have been working on a Rust backend that should push functionalities and performance even further, and eliminate the DynamicShapes
limiting factor encountered with JAX.
Systole is a package centred on processing and visualization of ECG, PPG and respiratory signals. See here for the last versions. It was mainly created to help record PPG and ECG signals using a Python-only API that could interface smoothly with Psychopy. This package is then central for the task developed in Cardioception (see below). It has been extended to an HRV library and supports state-of-the-art analysis with extensive report functionalities, as well as an interactive framework to annotate and correct physiological recordings.
Cardioception - a psychophysics experiment to measure and analyze cardiac interoceptive beliefs (the method paper). See here for the last versions. The task uses Systole for recording and metadpy to estimate metacognitive parameters. The package also provides extensive resources to analyse the data produced by the tasks, including Jupyter notebooks and scripts to fit Bayesian psychometric models automatically.
metadPy - a package to compute a variety of metacognitive efficiency parameters from trial-level confidence ratings (SDT, meta-d using MLE and Bayesian methods). This is mainly a Python adaptation of the JAGS version of the hierarchical meta-d' model. The package is written on top of Pytensor and PyMC for the Bayesian part and uses Numba for the MLE part. It is designed to interface smoothly with Python and should help extract various metacognitive parameters from multi-participant data frames using a single method call. See here for the last versions.