Skip to content

Instantly share code, notes, and snippets.

View thomasaarholt's full-sized avatar

Thomas Aarholt thomasaarholt

View GitHub Profile
@thomasaarholt
thomasaarholt / stash_hook.sh
Created October 29, 2024 11:23
The following code will print if you have any stashed code on a given branch. Add it to a repo's git/hooks/post-checkout to print whenever you change branch
# print stashes that exist for the currently switched-to branch
GREEN='\033[0;32m'
NC='\033[0m' # No Color
branch=$(git rev-parse --abbrev-ref HEAD)
stashes=`git stash list | grep "WIP on $branch"`
if [ "$stashes" ]
then
echo "${GREEN}You have the following stashes for this branch:"
echo "${stashes}${NC}"
@thomasaarholt
thomasaarholt / bench_list_comprehensions.py
Last active October 26, 2024 13:53
Benchmark for comparing python 3.12 and 3.13 on list comprehensions with a filter
import sys
from time import time
N_repeats = 100
def func(foo: list[int]):
return [x for x in foo if x % 2 == 0]
@thomasaarholt
thomasaarholt / pymc_normal.py
Last active October 30, 2024 15:02
A rewrite of the pymc Normal class (in order to allow for static type hinting of function arguments)
# Use the pymc master branch
from collections.abc import Callable
from typing import Literal
from numpy._typing import ArrayLike
import pymc as pm
from numpy import ndarray
from pymc.distributions.shape_utils import (
Dims,
Shape,
@thomasaarholt
thomasaarholt / stash.zsh
Created March 14, 2024 18:38
A zsh function to list git stashes using fzf with a preview of the changed files for quickly identifying the relvant stash
function stash() {
# Check if stash is empty
if ! git stash list &>/dev/null; then
echo "No stashes found."
return
fi
# Fetch relative dates and messages from git stash
local relative_dates=$(git stash list --format="%ar")
local messages=$(git stash list --format="%gs" | sed 's/^On //; s/^WIP on //')
@thomasaarholt
thomasaarholt / polars_datatypes_json.py
Created December 20, 2023 14:04
Serialize and deserialize polars datatypes to json
import json
import polars as pl
def dtype_to_json(dtype: pl.DataType) -> str:
return json.dumps(str(dtype))
def json_to_dtype(json_dtype_str: str) -> pl.DataType:
from polars.datatypes.classes import ( # noqa F401
Array,
@thomasaarholt
thomasaarholt / languages.toml
Last active December 14, 2023 09:19
Ruff and pyright in helix
[[language]]
name = "python"
scope = "source.python"
injection-regex = "python"
file-types = ["py","pyi","py3","pyw",".pythonstartup",".pythonrc"]
shebangs = ["python"]
roots = [".", "pyproject.toml", "pyrightconfig.json"]
comment-token = "#"
language-servers = ["pyright", "ruff"]
indent = { tab-width = 4, unit = " " }
@thomasaarholt
thomasaarholt / polars_pydantic.py
Created November 28, 2023 20:18
Polars type serialization in a pydantic model
from typing import Any
import polars as pl
import json
from pydantic import BaseModel
original_expression = (pl.col("foo") * 2) == pl.col("bar")
class Column(BaseModel, arbitrary_types_allowed=True):
@thomasaarholt
thomasaarholt / languages.toml
Created November 26, 2023 13:31
Working pyright and ruff LSPs for helix languages.toml configuration
[[language]]
name = "python"
scope = "source.python"
injection-regex = "python"
file-types = ["py","pyi","py3","pyw",".pythonstartup",".pythonrc"]
shebangs = ["python"]
roots = [".", "pyproject.toml", "pyrightconfig.json"]
comment-token = "#"
language-servers = ["pyright", "ruff"]
indent = { tab-width = 4, unit = " " }
@thomasaarholt
thomasaarholt / struct.py
Last active November 23, 2023 19:01
Structlog example showing how to serialize polars and pandas dataframes and pydantic models
from typing import Any
import json
import structlog
import pandas as pd # pip install pandas
import polars as pl # pip install polars
from pydantic import BaseModel
class PydanticModel(BaseModel):
a: int
b: str
@thomasaarholt
thomasaarholt / languages.toml
Created August 4, 2023 18:51
Helix languages.toml setup for Python with pyright, ruff and black
[[language]]
name = "python"
scope = "source.python"
injection-regex = "python"
file-types = ["py","pyi","py3","pyw",".pythonstartup",".pythonrc"]
shebangs = ["python"]
roots = [".", "pyproject.toml", "pyrightconfig.json"]
comment-token = "#"
language-servers = ["pyright", "ruff"]
indent = { tab-width = 4, unit = " " }