Pickling sandbox


In [1]:
from sklearn.neighbors.kde import KernelDensity

In [35]:
vals = np.random.randn(10)

kd = KernelDensity(kernel='gaussian').fit(vals)

In [36]:
import cPickle as pickle

In [37]:
data_string = pickle.dumps(kd)

data_string


Out[37]:
'ccopy_reg\n_reconstructor\np1\n(csklearn.neighbors.kde\nKernelDensity\np2\nc__builtin__\nobject\np3\nNtRp4\n(dp5\nS\'kernel\'\np6\nS\'gaussian\'\np7\nsS\'tree_\'\np8\ncsklearn.neighbors.kd_tree\nnewObj\np9\n(csklearn.neighbors.kd_tree\nBinaryTree\np10\ntRp11\n(cnumpy.core.multiarray\n_reconstruct\np12\n(cnumpy\nndarray\np13\n(I0\ntS\'b\'\ntRp14\n(I1\n(I1\nI10\ntcnumpy\ndtype\np15\n(S\'f8\'\nI0\nI1\ntRp16\n(I3\nS\'<\'\nNNNI-1\nI-1\nI0\ntbI00\nS"\\x01Q\\x92\\xbfk4\\xf8?\\xdd\'\\xad\\x86\\x83\\xa9\\xdf?\\\\\\x86-r\\xab\\xad\\xd3\\xbf\\xbf\\xcf@+\\x7fv\\x00\\xc0\\x01\\xca\\x1c>\\xabo\\xcd\\xbf3\\x07\\xd1\\xfb\\xa0\\x91\\xe1\\xbf\\xdbU%\\xdb-\\x1d\\xec\\xbf\\xbd\\x99\\x01e\\xa6i\\xd9?\\xc2\\xa5:G\\xf5\\x8b\\xc4?\\xeap\\n;\\xf2\\xf4\\xe0?"\ntbg12\n(g13\n(I0\ntS\'b\'\ntRp17\n(I1\n(I1\ntg15\n(S\'i8\'\nI0\nI1\ntRp18\n(I3\nS\'<\'\nNNNI-1\nI-1\nI0\ntbI00\nS\'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\'\ntbg12\n(g13\n(I0\ntS\'b\'\ntRp19\n(I1\n(I1\ntg15\n(S\'V32\'\nI0\nI1\ntRp20\n(I3\nS\'|\'\nN(S\'idx_start\'\np21\nS\'idx_end\'\np22\nS\'is_leaf\'\np23\nS\'radius\'\np24\ntp25\n(dp26\ng22\n(g18\nI8\ntp27\nsg23\n(g18\nI16\ntp28\nsg24\n(g16\nI24\ntp29\nsg21\n(g18\nI0\ntp30\nsI32\nI1\nI16\ntbI00\nS\'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\'\ntbg12\n(g13\n(I0\ntS\'b\'\ntRp31\n(I1\n(I2\nI1\nI10\ntg16\nI00\nS"\\x01Q\\x92\\xbfk4\\xf8?\\xdd\'\\xad\\x86\\x83\\xa9\\xdf?\\\\\\x86-r\\xab\\xad\\xd3\\xbf\\xbf\\xcf@+\\x7fv\\x00\\xc0\\x01\\xca\\x1c>\\xabo\\xcd\\xbf3\\x07\\xd1\\xfb\\xa0\\x91\\xe1\\xbf\\xdbU%\\xdb-\\x1d\\xec\\xbf\\xbd\\x99\\x01e\\xa6i\\xd9?\\xc2\\xa5:G\\xf5\\x8b\\xc4?\\xeap\\n;\\xf2\\xf4\\xe0?\\x01Q\\x92\\xbfk4\\xf8?\\xdd\'\\xad\\x86\\x83\\xa9\\xdf?\\\\\\x86-r\\xab\\xad\\xd3\\xbf\\xbf\\xcf@+\\x7fv\\x00\\xc0\\x01\\xca\\x1c>\\xabo\\xcd\\xbf3\\x07\\xd1\\xfb\\xa0\\x91\\xe1\\xbf\\xdbU%\\xdb-\\x1d\\xec\\xbf\\xbd\\x99\\x01e\\xa6i\\xd9?\\xc2\\xa5:G\\xf5\\x8b\\xc4?\\xeap\\n;\\xf2\\xf4\\xe0?"\ntbI40\nI1\nI1\nI0\nI0\nI0\nI0\ncsklearn.neighbors.dist_metrics\nnewObj\np32\n(csklearn.neighbors.dist_metrics\nEuclideanDistance\np33\ntRp34\n(F2\ng12\n(g13\n(I0\ntS\'b\'\ntRp35\n(I1\n(I1\ntg16\nI00\nS\'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\'\ntbg12\n(g13\n(I0\ntS\'b\'\ntRp36\n(I1\n(I1\nI1\ntg16\nI00\nS\'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\'\ntbtbtbsS\'algorithm\'\np37\nS\'auto\'\np38\nsS\'metric\'\np39\nS\'euclidean\'\np40\nsS\'metric_params\'\np41\nNsS\'bandwidth\'\np42\nF1\nsS\'rtol\'\np43\nI0\nsS\'leaf_size\'\np44\nI40\nsS\'atol\'\np45\nI0\nsS\'breadth_first\'\np46\nI01\nsb.'

In [38]:
kd_copy = pickle.loads(data_string)

In [39]:
kd_copy.sample()


Out[39]:
array([[-0.07380458,  1.25707843,  1.72677047, -2.50395404, -1.22629579,
         0.3535942 , -2.28053003,  1.00998969,  1.17470328,  1.90188699]])

Pickling a numpy function


In [54]:
from functools import partial
import dill

In [59]:
f = partial(np.random.uniform, low=1, high=10)
ds = dill.dumps(f)
ds


Out[59]:
'\x80\x02cdill.dill\n_create_ftype\nq\x00(cdill.dill\n_load_type\nq\x01U\x0bPartialTypeq\x02\x85q\x03Rq\x04cdill.dill\n_get_attr\nq\x05cnumpy.random\n__RandomState_ctor\nq\x06)Rq\x07(U\x07MT19937q\x08cnumpy.core.multiarray\n_reconstruct\nq\tcnumpy\nndarray\nq\nK\x00\x85q\x0bU\x01bq\x0c\x87q\rRq\x0e(K\x01Mp\x02\x85q\x0fcnumpy\ndtype\nq\x10U\x02u4q\x11K\x00K\x01\x87q\x12Rq\x13(K\x03U\x01<q\x14NNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x15b\x89T\xc0\t\x00\x00`\xf8i\x06T\xd1_\x98\xd6zY.\x99\x89\xf9\x0c\xa5\x07\x8c\xca7\xc0\xa9v\xaf\x0c*e\xeaX\x07?\x88k\xcb\xd9e[<\x0b/\xf9\xbe\xc414\xb5\x10\xf4]lQ\x91p\xf7Y\x1e\xb8>z\x1aC\x10\xc6\x8dt\xfa\xac\x00\x8d-\xe3\x8f\x18>2\xa8\x91~\x95\xd0\xc28o\xb7\x04).\x0fm\xf23m\xb6>\xc2\x9dV\xf2\xe6:\x0fD\x8d7d\x89\xbf\x91\xa3S<\x06\x8b\xd8\x0czOU7t`\x10Q\xecj\xf5\xd9\xd9\xc0\xb2\x06\x89&T\xd4z\xbc\x00\xa5\x1bJ\x94\xb7\xf3\xdd\xa4\x16\x91\x87<F\xb1\xdc4\x82n\xef\xcb\x00~\xd5@\x9e^El\x82\x84\x86\x19+NJ\x91\xd1\xc8\xd2\xc9\xd7\x11zp\x1c\x89*h}h\xe2)\x14\xe0\x04\x93`\x1f \xe2(<D\xea\x96+XVV\x1b0\x9c\xd7\xad6!@\x89\t\xa8\x9f\xb4+\xc3\xbc\x93\xae\xc8\x00\x7f\xe7\xb4`\x13H\xb9\xeb-iX\xad\xf9\x10\xa71\xe1|\x96\xb2_K\xd5>\xf6O<\xab+\xee\xa2\xdaxhS\xc2\xeds\xc3\x8eu+\n\xf7\x15\xd0W\xe2\x93\'\x9cTd\x9f\x17b\x0f\xec\xe4S\x1f\xe7\x8cu|\xaa\x9f0\x8f\xde\xac\x9d\x17)B\x0c\x81Hw*AC\x87\x9a\xc8\xef\xc0\xa3\x01e\xd2D\xa5%\xa6\xfc+\xeb\xdcR]}\xa7o\x1e\x8f\x8c\x89t\xa7\xaey\xbf\xaf\xfd}\xf4<&R\xce\x11G\x96dx\t\xa3)\x9a\x81\xb5\xd8D\t\x7f\x82\xbb"$K\x84\x07\x92\x9b\xfa\x9f\x91.\x1f\xd0\x0e&7\x18\xb2\xdfj\x81\\\xbbQ\xc0\x0b\xba\x1f?\xf1\xaer!\xdd;@W\xec\xdcI\xb7c-\xb6\xc0&\xf7\xb96\xd4\x18E,G\xfb\x80\xba\x16\xeb\xb6UR\xce}\xad\xea\xe1\x05\x15\xf1\xbd\x0e\xfd\xcd\x82Gc$\xa1\xe2\xd4\xaen\xc6\xbaS\x0e\x17\xbdwee\xef^\x17O\x04\xfc\xa5;6\x03\xd2fv]\xf3\xac\xa1\x93\xd8\x9f\xd0C\x84i\xd0g\x91\x90\'\xf3\n\x82\x85\xd2s\xb5\xfd&\xd8@l\xcd\x93\xa7\xd1\xc9Gn?\xd9H\xd4\x05"\to\x9c\x13M\x9a\x91d\x8e\xf4\xa1\xfek\x83z<\xef\x99\xa6 \x86\x06~\xb4\xc5pr\xbfG\x9a\xa2AzQe4\xa5_3p\x97\xf1\xd1\xdf\xb5\xc56[\xa2\xd8\xb7C\x14\x15\xda\x99rH\xf2\x15\x96S\x01NO\x88\xdb\x83K\x03\xf3\nj\xdcp\x07\xab\x1a!\x83\xa7%\x81\xe9p\xdd1\x06<\xd5`6\xa2\xd8\x1cocm\xf8\n\x91\xea\xdeq\xd4`i\x1f\x10\x8f\x0eY\xec\xb4\xc6\x86.\xc2\xcd\xe7q\x88\x87\xfb\xd1\xf9]\xb4:\xc3jw\xea\x8fb\xf8\xe9\x8e"\x0f[aX!7\xa5\x8a\x19\xc1\xcd\xfe\xdc\xd5\t\x1c7x\x03\x8f\xd8w\xc2\xe7\xfe\x92\xa1CLzx\xf7yya\xfcdz\xaf\x88\xff\xc1\x17$~;D8\x86\xb5\xc4\x04\x84(ko\xf2d\xcaH\xf4A\x16\xcf\xd2\x90>?\xba\xc3\xa1\x1eT\xb5\x0b\xbc\xf9\x1aH\xd9e\x19\x935>\xc4\xfa\xe6\xd0)\x8e)\xf0\xf44\x07\xc4\xab\xb6(\x18\xcf0\xa4t\x0f\x12\xd9\xe1\t\xcc\xea2\xd1\x0b\x01\xac!\r#f0\xfc\x98\xf9\xb0;D\xca \xa6\xb43\xb1\xa8\xf6\x94T@@\xe5\\P\xc9\x88\xc0\x19}s\xd8HPc\x88\x07\n.\x03\\\x03\xfc\x11Z!\xe1\xdb\x90\xea<\x08\r\x1e\xb4\xbcFe\xc5(\xa1\xdd\x8c\xd2\x10\x1b\xb4\x93\xf1z\x8b\x15\x91\x94@\xc3{XV\x18?\'X\xfd\x0e\xb6\xfd+\xe8\xb5\x90\x9b{\x8eR\xc5\x1d\x8e\n\xa3\xef\x8b\x84\xa01Ei\x93\xc6Vy--\xc8.\xa0z\xc8\xea\xf2\xb6\xbf\x15\xa6\xa6\xbd\xac\xa0]Fb\xb1`}\x8el^\xeb\xa4D{\x8cxv\x16#\xb20\xc1\x8b:\xdf\x9c\xc4\x84h\xf6\xef\xffo\xb3\x9e\x8aOK\x9d0\x1fq\x814}\xa2\x17Y\x89Q`R\x1e\x01\xf1\x93\x85\x90\xd6\xd9z\xd0d\x99\xa7h\x14\x8f\xaa\xd8$\x8a\x90{\xa4@\xc7$\xb5\xf9)\xf6\xd4I\x15c\xa3\xf2\xd8\xb9\xcfi\x9cC$\xb4\x9d\x9d\x91#=\xf02k\x8bPD\xb6S\xe8\xb0\x18?v\xdb\xe0W\xcb\xff\xbb%\xcf\xcf\xe9\xa8c\x06h\x8d@\x1d9_\xea[\r\x1dtg1\xc3L\x92\x04\xc1a%q\x8a\xb4\xa0\xd8\xa8\x0e\x0cW\xc2\x0eg&\xdb\xb5\x04\x86t\xb8\xe0%\xb1\xb5\xe4\xae\xc9t\xaa\xcch\xebi\xea\x18\xba\x06v\x9a\xe8\x8a\xcf\x83(\xe9\x9f\xbb\xcc4\xac\\\x81b\'b\x00\x1e\x1aH2\xf7\x8a\x1d)b7\xe2\xfd\xae\x9c\x06\xa4\x93\xe3&\x96\x8a\xc4\x1eh\xa2\x1f\xb9\xb9\xfc\xa0A\xefc\xd5\xde\x03\x91vW\xad>\x89\x11\n0\xdaW?\xbf\x90\x12Rj\xb9\xe1ReB\x97n\xc2\xbc\xa8R\xa1-)\x8c\x00t\xd7\xc1\x83|h\xa9\xa9\x96(\xab\xa0\xcc\xa4\xaa\xf1:t\x8e\x18\x0f\xc5\x9c\xbe\x808\x0b\xc0k%\xdct\x97\xc8\xcc<Q?\x1c\xa50s\xa9\xf3\x02\x9d|4>\xaeD\xc0\x04c8\xef\xc175\xf1\x81Md\xe0T\xb4M\xbcc\xaf@\x01\xf0\x13\n\xe2[\xdaB\xe7\x83\xe9\\\x91l?KwT\xfa0\xe3W\xa1\x15\xc6\x14\xef\xafF\xa4\xec\x13\x02\x14\x9dwq\x98\x86\xe3\xccCl\x8c\x00$o\xcf=\xdb\x87\xcep\xee\xef\xb4$\xa3\xc8\xe3\xb2\x91l\x9f\xe0\xd8\x07\xf4>5Y=[\tO,\x9e\x8fK\x98\xf1\x1b\xb2\x14w\xac\xe6LZ\xf0\xc1\xe9\x86\x8b\xba\xe2\xb3n >j\xd6\x04T\x81\x1e\xdd\xa3\x87Gz-]\xa4Mu\xd5\xae\xfc[m!]\x86\xa9>\xcd\x8fM\x82]\xe9\xe4\x1a\x91d)\xd3Y\xbef~\xb4a[\x1bX\x7f\xdf\xae6<\x9a\x03\xd1\xf440j\x1a\x92\xaa\xc0"\xfbM\xf9|A \xf4\xd4\xeb}I\xaa\xacD\xe7\xf6\xdf\xdbv2]\xa78\x0f\xa9.~\x89L*\xd2\xf9\x8f\x83@\xbf\x1e\xa9GY\xd2\xe1\xcc\x90\xc7\xde\xb2\xbes0\xde\x80\x93Z\x7f\xeb\xd1\xdaI\xb4\xb8_\x1a\xf0u\xae\xd5\xe8O$=*]\xb5\xd0\x84\x05\xf5\x03\xd9*2\x10Y\xcccV\x94\xac`!\xa9$02\xdb\xd7\x82\xcf\xf2Z \xed\x8a\xc4P\x94I\x14+OoO\xff\xab\x16\xd8\xfe\xdcI\t\xa1{\xc1\xdd\x94\xfe\x00\xb7\x94\xb2I\x8d\xfbU\xdaSd\xec\xf5\x1e]\xa1\x9b\xcd\x87\xfa1\x00w\x82z\x1e\x1b9\\\xac\xfc\xcae\x9f\xb71\xa8\xb7\x966M\xf5\x17\xcaw\xd4d\xe8\x88q\x98\xf5mya\xc3\xd6}}\xef\xfe\xfb\x97\x9e)\x8b\r\xaf|\xd7\xd7\x02\x9d\x99\x0f\xae~\x85d\xa4\xe0\x1b\xd5\x10\xd0\xa0\x0cI^\x07\\J\xe5\xd6K\xbf{\xd4\xb43\xe8\x1e\xa3\x14\x0f8\xe6]H\x91oc\x94?\x8d\x84r\xfc\x14\x98\xee\x884qw\xb9\x146u\xda\x03\xbb\xc8\x9f\x88\x8c\xc9\x07\x110\x98~`U\xf0x\x18\x98<\xda\x19W8\x0b\x9b\xac\xa8\xf8\xb0W\xd2\x19Ul\xec\xf7\xa7\xde\xf6\xab\xd7p~\x7f.6\x12@\x11\x87t5\xaaQX\x98\x92\x8aZ\x89H\xec:\xf3\xa6D\xbe\xad\xb3\x88\xb8\xd1\xf1\xc0\x8c\xe1\x9d\xc6\x87~\xfb_;V\xae\xb4]\x8f\xea#\xe2(n\x05\x82\t\xf3B\x8ee\x1e\x81\xc5C\xaa7x@\xa6J\xb0X\xab\xca\x9d\xfekp\xe8c<t^r\x15\x08\x8a\xe5\t\xca\x18\xb5\xae\x15\x9c\x92\x8d\xf0i\xc9F\x82\xdf9\x0b\x1b\x94\xadZ\xc0q\xd6\xde\'\x95\xbcG\xca\x03r\xe6\xf6\xc4\x95\xf1\xf7\xb9n\xab\x0b\x1b\x83C0f\xc8\x7f\xaa&\x11(\xf8\xe6\xd4\xea\xe2S\xb3L;\xf0\x97\x01*\xdd\xb5\xd1\x03B\xd5\xd2\xab\x9b\xb3\xa5 \xb2\xa5F\xc9\xb4X\xb4\x8f\x9e\x9c\xbfG\'\x91lb\xd0p\xcb\x92\xa8l\x98[\x9dTi\xfc\xa1{y\xd8T\x1c\x18\x05j\xc5\xd6;\'\x10\xbbv\xfext\x08\xbb[\x10=\xad\x16\xf6\xc08\x1c;%\xf9>%\x8eXG>\xcd?\x03\xf7NqN*\x94PR\x9e\xd7\x13\xca\xf4\r\x06\x83MWP\x00\x0er\xa9\xe4";G\x90\x94H,\xac\xaa,\xfb\xd1\xd3&E%5\xc5\x906\x1ch\xf7\x10:\x83\xaf\x86Tn\x7f\xa0\x82\xd7|~\x0f\x12mX\xb3\xab\xbeb\xbcf\xcb(\x8b\x08\xa4\x11\xd0&rn\xb3\xd1H\x8e>\xadp\x1c\xc2R\xb3\xa0%\xb9\xbe\xa7X\xcd\xeba\x11\xa3\xb5+\xdfG$\xd7$\x1f\xe3\xc7\xae\xd1\x90\x82\r\x0e1\xbb\xa1\x00$\xd9\x1exWo\x84\xbc^Z\xab\xc3\xb2\x96>x~\x00\x1d\xe0\x9d\xc3na\xe1T]\xb1\x1e\xf5\x05\xbbs_jr)\xcel\x90\x05\xea\x97\xb4\xcf_\x80\xcb\xb1\xb7\x8dG\xf8\x82\xeaW\xfe\xf7\xeb5\xe6F\xe0y\xa4\xd8!\x03t\x002\xae\xefq\xde\xb4\xcff\xa1\x06\x842\xa6\xacZ\\<\x83r\x0f\xd7u\xb5\xc2\xdc\xd1\xf4\x1d\x84\n\x87\xd1\x98(9K\x99@$\xee\xdc\xb3\xa51\xe1\xcaO\xb5\xac\xad\xe1\x11\xd5\xa5\x8e\xfdS\xf7g\x90K\x03<\x99)i\x1b\x12\xf1E\'\x95M\'T65#\xc6\xa0\x1b\x9a,\xc3\x9e\xb6Vv\x13h4<\x97\xa3E\x9dG\xba*!\xd3v\x8f\xdbC\xcd\xab\xd1\xe9\xe9\x8aY\xb5\n7\xaf\x94\xe0\x89\xf1,3\xdd\xa0^\xb0\xeenm\x94\x91\xf9\x9b\x99\xae\x06\xca~\xdd\x7f\xea\xe8` ~\xed-\xd1\r\x80c\t\xbe\xa4\x8d\xf8*\x91\x1c\x9c\xf6\xa6\x8e\xf6\x067Gz)t\x8fR~w\x8c1k4\x82U\xfc\xac\xe5q,\xc2j\x88!c\xb2\xec\x0f\x04d\x0c-\xd6\xc4e-\xcd\xf6\x8dy\x13\xbb\x9byH\xc0\xe8d\xde\xcf\xf6!i\x84\x1c\xc8\x90\x10\x98\xaa\x98\x8c\xfd%\xd7\xa6f\xb5\x19\xb1\xf4j\x01)\x0f\x9a\'\xa0DW\x17\xc0"\xc2\xe6S05G\xd5j\xc1-s\xac\xcf,bM1\x05\xde\xbc\xabL\x1d>b\x93+\x05b\xa8\xf3{\xd6\xe9\xc2]s\x01R\x0e\xbe:bb\x82\xf1\xefU\xdf\xe4\x07\xc7I\xf2\x07g?\x7f\xd7b\x8f\xdc\xdc\xf4\x99\xe7\xeb5fp=\x1f\xe2\\|F1i\xc4\xb3\\7\x9f\x19u#\xe8a\xbb\xf0)Cx\x7fgk\n\xf5\xdb\x12\x91\x10\'\t\x1c%\x04\xdd>\xe3\xd4\x84\x9f\xa1\x08\xf5\xe8\xf3*I>q\x16tq\x17bMZ\x01K\x01G\xbf\xe4\x97^%\x10\x0b-tq\x18bU\x07uniformq\x19\x86q\x1aRq\x1b)}q\x1c(U\x04highq\x1dK\nU\x03lowq\x1eK\x01utq\x1fRq .'

In [62]:
f_copy = dill.loads(ds)

f_copy(size=10)


Out[62]:
array([ 7.77757208,  3.36822534,  7.30133051,  9.22739777,  2.09046944,
        4.01530718,  7.81559978,  3.47528229,  7.80270112,  6.31773716])

In [72]:
import math 

def seq_factory(max_len=10):
    def make_seq(x):
        n = len(x)
        if n > max_len:
            return x[0:n]
        elif n < max_len:
            return (x * (max_len - n))[0:max_len]
        else:
            return x
    return make_seq
        
        
make_seq = seq_factory(5)


make_seq('ATG')


Out[72]:
'ATGAT'