Skip to content

Instantly share code, notes, and snippets.

View kurtbrose's full-sized avatar
💭
carbon based

Kurt Rose kurtbrose

💭
carbon based
View GitHub Profile
import re
def stripe_form(data):
"""perform a stripe nested-data form-encoding"""
form = []
def _form2(pre, val):
if type(val) not in (list, dict):
form.append((pre, val))
return
@kurtbrose
kurtbrose / module_memory.py
Last active July 30, 2020 00:13
tag memory over to which modules use it
import sys, gc, collections
import psutil
def size_modules():
module_size = collections.defaultdict(int)
for obj in gc.get_objects():
if not hasattr(obj, "__module__"):
continue
if not isinstance(obj.__module__, str):
@kurtbrose
kurtbrose / branches.py
Last active July 18, 2020 23:31
glom branch exception tracing
def _glom(spec, target, scope):
scope[CHILD_ERRORS] = []
try:
...
except Exception as e:
scope.parent[CHILD_ERRORS].append((scope, e))
raise
else:
@kurtbrose
kurtbrose / topogen.py
Created December 19, 2019 19:35
find "generations" of based on a dependency graph
from relativity import M2M
def generations(m2m):
"""
m2m is {dependent: dependes-on}
returns [{item, item, ...}, {item, item, ...}, ...] in topologically sorted order
"""
m2m = m2m.copy()
generations = []
# first generation is things that have no dependencies
@kurtbrose
kurtbrose / glom2.py
Created December 19, 2019 07:18
playing around with resumable glom execution model
from collections import ChainMap
def glom(target, spec):
return Glom(spec, target).glom(ChainMap())
class Glom(object):
"""
rather than state living inside glom() methods, the recursive
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@kurtbrose
kurtbrose / usage.py
Last active April 17, 2019 00:21
playing with relativity APIs
m2m = M2M()
ch = M2MChain()
gr = M2MGraph()
# TRANSFORMING BETWEEN TYPES
chain(*ch.m2ms) # kind of a copy
chain(ch) # also results in copy
@kurtbrose
kurtbrose / log_methods.py
Created March 12, 2019 23:09
quick method logging
import collections
import functools
def log_methods(cls):
def __init__(self, *a, **kw):
cls.__init__(self, *a, **kw)
self._log = collections.deque(maxlen=100)
def logit(method):
"""
experimenting with increasingly general notions of indexing
"""
from relativity import M2M
class IndexedTriple(object):
"""
keeps track of "left" to "right" pairs
"""
@kurtbrose
kurtbrose / gist:f34524c7ad4de888505b057702df4fbe
Created February 21, 2019 05:14
maybe we should never use range(len(list))
>>> import timeit
>>> LIST = [None] * 10
>>> countrange = lambda: [1 for i in range(len(LIST))]
>>> countdirect = lambda: [1 for e in LIST]
>>> timeit.timeit(countrange, number=1000) * 1000
0.8033999999952357
>>> timeit.timeit(countdirect, number=1000) * 1000
0.5680000000012342
>>> LIST = [None] * 100
>>> timeit.timeit(countrange, number=1000) * 1000