Skip to content

Instantly share code, notes, and snippets.

View thomasaarholt's full-sized avatar

Thomas Aarholt thomasaarholt

View GitHub Profile
@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 = " " }
@thomasaarholt
thomasaarholt / branch.sh
Created March 21, 2023 20:41
git branch change using fzf in lovely color
branch () {
branches=$(git for-each-ref --sort=-committerdate refs/heads/ --format='%(color:cyan)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:magenta)%(authorname)%(color:reset)' --color=always|column -ts'|') &&
branch=$(echo "$branches" | fzf --multi --ansi --height=20%)
if [ -z "${branch}" ];
then return 0
else git switch $(echo "$branch" | sed "s/ .*//")
fi
}
@thomasaarholt
thomasaarholt / venv.sh
Created November 6, 2022 15:22
Bash function for creating virtual environments that are automatically (de)activated upon cd entry(exit).
venv () {
RED='\033[0;31m'
NC='\033[0m' # No Color
# create virtualenv
if [ ! -d .venv ] # if venv does not exist already
then
python -m venv .venv --system-site-packages
else
echo -e "${RED}.venv${NC} already exists!"
return 0
@thomasaarholt
thomasaarholt / train_test_split_polars.py
Created July 24, 2022 13:06
Train and test split function for polars dataframes
def train_test_split(
df: pl.DataFrame, train_fraction: float = 0.75
) -> Tuple[pl.DataFrame, pl.DataFrame]:
"""Split polars dataframe into two sets.
Args:
df (pl.DataFrame): Dataframe to split
train_fraction (float, optional): Fraction that goes to train. Defaults to 0.75.