Skip to content

Instantly share code, notes, and snippets.

View pmeier's full-sized avatar

Philip Meier pmeier

View GitHub Profile
@pmeier
pmeier / remove_annotations.py
Created January 12, 2023 10:51
Remove Python 3 annotations from a codebase
import functools
import pathlib
import sys
import libcst as cst
def main(root):
root = pathlib.Path(root)
fn = functools.partial(remove_annotations, annotations_remover=AnnotationRemover())
from typing import Any
from metadata_filter import MetadataFilter, MetadataFilterOperator
# https://docs.trychroma.com/usage-guide#using-where-filters
OPERATOR_MAP = {
MetadataFilterOperator.AND: "$and",
MetadataFilterOperator.OR: "$or",
MetadataFilterOperator.EQ: "$eq",
MetadataFilterOperator.NE: "$ne",
@pmeier
pmeier / unittest_multi_threaded.py
Last active August 28, 2024 09:58
Decorator for running multi threaded unittests
import unittest
from concurrent.futures import ThreadPoolExecutor
def multi_threaded(*, threads=2):
def decorator(test_cls):
for name, test_fn in test_cls.__dict__.copy().items():
if not (name.startswith("test") and callable(test_fn)):
continue
@pmeier
pmeier / main.py
Created October 30, 2024 13:51
Haversine distance matrix numpy
import numpy as np
def haversine_distance_matrix(lats, longs):
lats = np.radians(lats.reshape(-1, 1))
longs = np.radians(longs.reshape(1, -1))
return 2 * np.arcsin(np.sqrt((1 - np.cos(lats - lats.T) + np.cos(lats) * np.cos(lats.T) * (1 - np.cos(longs - longs.T))) / 2))
@pmeier
pmeier / main.py
Last active November 29, 2024 13:42
Convert any* string to kebab-case or snake_case
import re
def delimited_case(s: str, *, delimiter: str) -> str:
return re.sub(
r"(([a-z0-9])(?=[A-Z][a-zA-Z0-9])|([A-Z0-9])(?=[A-Z0-9][a-z]))",
rf"\1{delimiter}",
re.sub(r"[^a-zA-Z0-9]+", delimiter, s),
)