Skip to content

Instantly share code, notes, and snippets.

@el-hult
el-hult / leg_jax.py
Created August 20, 2024 11:08
Jax program that computes the Legendre approximation for the Entropy of a Gaussian Mixture Model, according to Caleb Dahlke and Jason Pacheco https://papers.nips.cc/paper_files/paper/2023/hash/ee860a9fa65a55a335754c557a5211de-Abstract-Conference.html
import jax
import jax.numpy as jnp
import functools
def gmm_max(logpi, mu, cov):
"""Return an upper bound the GMM density
logpi: (K,)-array of the log-weights
mu: (K, D)-array of the component means
cov: (K,D,D)-array of the component covarainces
@el-hult
el-hult / MySet1.hs
Last active November 6, 2023 10:43
Two bad implementations of a Set in haskell
{- A module implementing a simple (and quite dumb) set -}
module MySet1 (Set, empty, toList, insert, contains) where
import Data.List(nub)
{- Set
A set, backed by a regular list.
If the list has duplicates, it is nothing the user should notice
-}
data Set a = SetC [a]
/*
This code reads the BNO055 fast using the RPi linux kernel support for I2C.
for running this file as a program, compile and run!
gcc -o faster faster.c -O3 && ./faster
You can also compile as a shared lib, and then call it from python.
gcc -Wall -shared -o faster.so faster.c && python faster.py
Page number and table number references are to the BNO055 data sheet.
import numpy as np
import scipy.stats as sps
import matplotlib.pyplot as plt
from scipy.special import digamma
#
# Config
#
np.random.seed(999)
plt.rcParams['font.family'] = "monospace"
# nice library that gives us access to the microphone
import pyaudio
# python standard libraries that come built-in
import threading
import queue
import wave
# optional libraries
import numpy as np
@el-hult
el-hult / Pointers.hs
Created March 23, 2022 08:58
A Hasekll module that can store vectors from hmatrix as double arrays, suitable for passing into Fortran and other FFI
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Pointers where
import Data.Proxy (Proxy (..))
import Foreign.Marshal.Array (newArray, peekArray)
import Foreign.Ptr (Ptr)
import GHC.TypeNats (KnownNat, Nat, natVal)
@el-hult
el-hult / classical_ols.py
Last active March 21, 2022 11:06
Run a linear regression under the classical OLS assumptions: well specification, homoscedacity and normal errors. Then draw a confidence box and a confidence ellipse.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse, Rectangle
from matplotlib.transforms import Affine2D
from scipy.stats import t, f
from scipy.linalg import sqrtm
import statsmodels.api as sm
@el-hult
el-hult / empbern.py
Last active April 5, 2022 08:17
Comparison between Empirical Bernstein, Hoeffding and CLT
"""
Comparison of empirical bernstein measures
See https://el-hult.github.io/2022/03/18/empirical-bernstein-bounds.html
"""
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sps
import pandas as pd
@el-hult
el-hult / LazyRandom.hs
Created March 10, 2022 15:24
Example on how to generate a lazy stream of random numbers in haskell using System.IO.Unsafe
import System.IO.Unsafe ( unsafeInterleaveIO )
import System.Random ( randomRIO )
import Text.Printf ( printf )
-- | An infinite list of random die rolls, lazily generated
--
-- This is dangerous since calling this function steps the global random generator
-- not when running the action, but when accessing its result.
diceRolls :: IO [Int]
diceRolls = do
@el-hult
el-hult / quadplay.py
Created February 26, 2022 15:27
A code sample on how to create a interactive visualization in matplotlib with the matplotlib widgets. In this case, it shows how a quadratic with unknown location can be upper bounded.
# %% set up the plot
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider
LOC_MAX = 2
# The parametrized function to be plotted
def f1(t, amplitude, location):