Skip to content

Instantly share code, notes, and snippets.

@ssanderson
ssanderson / Exception Name Clearing
Created December 9, 2015 01:15
except-blocks unconditionally delete the bound name in Python 3
In [2]: e = 3
In [3]: x = {}
In [4]: try:
...: x['a']
...: except Exception as e:
...: pass
...:
@ssanderson
ssanderson / assert.py
Created October 25, 2015 04:50
assert statements dynamically look up the value of AssertionError in the current context
>>> AssertionError = ValueError
>>> assert False, "Assert Failed!"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Assert Failed!
>>> AssertionError = None
>>> assert False, "Assert Failed!"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
@ssanderson
ssanderson / make_function_global.py
Created October 16, 2015 22:11
STORE_GLOBAL from MAKE_FUNCTION
In [2]: x = 3
In [3]: def foo():
...: global x
...: def x():
...: pass
...:
In [4]: x
Out[4]: 3
@ssanderson
ssanderson / tsc_gen.py
Created August 1, 2012 01:36
top-level draft of trade_simulation_client generator
from zipline.gens import stateful_transform
from zipline.finance.trading import TransactionSimulator
from zipline.finance.performance import PerformanceTracker
def trade_simulation_client(stream_in, algo, environment, sim_style):
"""
Generator that takes the expected output of a merge, a user
algorithm, a trading environment, and a simulator style as
arguments. Pipes the merge stream through a TransactionSimulator
and a PerformanceTracker, which keep track of the current state of
@ssanderson
ssanderson / tsc_gen.py
Created July 31, 2012 22:16
tentative top-level design for TSC
from zipline.gens import stateful_transform
from zipline.finance.trading import TransactionSimulator
from zipline.finance.performance import PerformanceTracker
def trade_simulation_client(stream_in, algo, environment, sim_style):
#============
# Algo Setup
#============
@ssanderson
ssanderson / queueoverview.txt
Created June 13, 2012 17:31
Qexec Queue and Server Flavors
Flavors of queues in Qexec system topology:
|| Queue type: || Receives new tasks from: || Routes tasks to: ||
--------------------------------------------------------------------------------------------------------------
|| LQueue || http PUT requests (via WSGI app) || RQueue (via ZMQ socket) ||
|| RQueue || polls an LQueue for new tasks (via ZMQ socket) || Arbiter instances (via gevent queues)||
|| MQueue || http PUT requests (via WSGI app) || Arbiter instances (via gevent queues)||
Flavors of servers:
@ssanderson
ssanderson / multiply.py
Created June 7, 2012 20:08
zmq node chain test
#Midpoint for zmq node chain test. Receives a message
#via SUB socket, then propagates that message out via
#PUB socket to sink nodes.
import zmq
context = zmq.Context()
receiver = context.socket(zmq.SUB)
receiver.connect("tcp://localhost:5555")
@ssanderson
ssanderson / import_star_from_closure.py
Created September 30, 2015 00:03
Import * inside an inner function fails only if that function references variables defined outside the function.
>>> def outer():
... def inner():
"Fails with SyntaxError"
... from numpy import *
... return array
... return inner()
...
<stdin>:2: SyntaxWarning: import * only allowed at module level
File "<stdin>", line 3
SyntaxError: import * is not allowed in function 'inner' because it is a nested function
@ssanderson
ssanderson / gist:33d4eec82eb84e1e3117
Created July 18, 2014 20:15
Minimal refcycle example
import gc
import objgraph
class Foo(object):
def __init__(self):
self._gen = None
def __iter__(self):
self._gen = self.gen()
# Run flake8 against any added/modified python files in the current git repo.
function check8 ()
{
errors=`git diff --relative --name-only --diff-filter AM --ignore-submodules | grep -e "\.py" | xargs flake8`
retval=$?
# xargs returns 127 if flake8 couldn't be found
if [ "$retval" = "127" ]
then