Skip to content

Instantly share code, notes, and snippets.

@Joshix-1
Last active April 19, 2024 21:22
Show Gist options
  • Save Joshix-1/9e1c3481562a2873a94d12c1548dcc67 to your computer and use it in GitHub Desktop.
Save Joshix-1/9e1c3481562a2873a94d12c1548dcc67 to your computer and use it in GitHub Desktop.
from __future__ import annotations
import ast
import base64
import io
import itertools
import lzma
import marshal
import sys
import types
from collections.abc import Callable, Iterable
from functools import partial
from pathlib import Path
from typing import NewType
PythonCode = NewType("PythonCode", bytes)
def encode_bytes(data: bytes) -> PythonCode:
ENCODINGS: list[tuple[Callable[[bytes], bytes], bytes]] = [
(base64.b85encode, b"__import__('base64').b85decode"),
(base64.b64encode, b"__import__('base64').b64decode"),
(lambda b: repr(b).encode(), b""),
]
encodes: list[PythonCode] = [
PythonCode(decode + b"('" + encode(data) + b"')" if decode else encode(data))
for encode, decode in ENCODINGS
]
encodes.sort(key=len)
return encodes[0]
def compress_bytes(data: bytes) -> PythonCode:
"""Compress bytes to python code."""
COMPRESSIONS: list[tuple[Callable[[bytes], bytes], bytes]] = [
(__import__("bz2").compress, b"__import__('bz2').decompress"),
(__import__("gzip").compress, b"__import__('gzip').decompress"),
(__import__("lzma").compress, b"__import__('lzma').decompress"),
(partial(__import__("zlib").compress, level=9), b"__import__('zlib').decompress"),
(partial(lzma.compress, preset=9 | lzma.PRESET_EXTREME), b"__import__('lzma').decompress"),
]
min_code = PythonCode(repr(data).encode())
min_length = len(min_code)
for compress, decompress in COMPRESSIONS:
result = decompress + b"(" + encode_bytes(compress(data)) + b")"
if len(result) < min_length:
min_length = len(result)
min_code = PythonCode(result)
return min_code
def minify_code(code: bytes, filename: str) -> bytes:
"""Minify python code."""
tree: ast.AST = compile(
code,
filename,
"exec",
flags=annotations.compiler_flag | ast.PyCF_ONLY_AST,
dont_inherit=True,
)
class RewriteAssign(ast.NodeTransformer):
def visit_AnnAssign(self, node: ast.AnnAssign) -> ast.AST | None:
if not node.value:
return node # important for dataclasses!
return ast.Assign(
targets=[node.target],
value=node.value,
type_comment=None,
)
tree = ast.fix_missing_locations(RewriteAssign().visit(tree))
def update_tree() -> bool:
for node in ast.walk(tree):
if isinstance(node, ast.AnnAssign):
continue # already handled
if getattr(node, "body", None) and isinstance(node.body, Iterable):
body = iter(node.body)
node.body = [next(body)]
for n in body:
prev = node.body[-1]
if (
isinstance(n, ast.FunctionDef)
and isinstance(prev, ast.FunctionDef)
and prev.name == n.name
and prev.name not in [
_.id
for _ in itertools.chain.from_iterable(ast.walk(x) for x in n.decorator_list)
if isinstance(_, ast.Name)
]
):
node.body[-1] = n
else:
node.body.append(n)
for attr in (
"type_param", "type_params", "returns", "type_comment", "annotation"
):
if getattr(node, attr, None):
setattr(node, attr, None)
return True
if not isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef, ast.ClassDef, ast.Module)):
continue
if ast.get_docstring(node):
node.body = node.body[1:] or [ast.Ellipsis()]
return False
while update_tree():
ast.fix_missing_locations(tree)
return ast.unparse(tree).encode()
def compress_code(code: bytes, filename = "__main__") -> PythonCode:
"""Compress python code to python code."""
code = minify_code(code, filename=filename)
min_code = PythonCode(code)
min_length = len(min_code)
compressed_code = b"exec(" + compress_bytes(min_code) + b")"
if len(compressed_code) < min_length:
min_code = PythonCode(compressed_code)
min_length = len(compressed_code)
compiled: types.CodeType = compile(
code,
filename,
"exec",
flags=annotations.compiler_flag,
dont_inherit=True,
optimize=2,
).replace(co_linetable=b"")
compiled = compiled.replace(co_consts=tuple(
(c.replace(co_linetable=b"") if isinstance(c, types.CodeType) else c)
for c in compiled.co_consts
))
def m_dumps(o: types.CodeType, version: int) -> bytes:
return marshal.dumps(o, version)
CONVERTS: list[tuple[Callable[[types.CodeType], bytes], bytes, int]] = [
(marshal.dumps, b"__import__('marshal').loads"),
*(
(partial(m_dumps, version=v), b"__import__('marshal').loads")
for v in range(marshal.version)
),
]
for convert, deconvert in CONVERTS:
result = b"exec(" + deconvert + b"(" + compress_bytes(convert(compiled)) + b"))"
if len(result) < min_length:
min_length = len(result)
min_code = PythonCode(result)
return min_code
def main(output: io.BytesIO = sys.stdout.buffer) -> str | int:
args = sys.argv[1:]
if len(args) <= 1:
path = Path(args[0]) if args else Path(__file__)
output.write(
compress_code(path.read_bytes(), path.name)
)
output.write(b"\n")
output.flush()
return 0
output.write(
b"def w(f, c):\n"
b" from pathlib import Path\n"
b" (p:=Path(f)).parent.mkdir(511,1,1)\n"
b" p.write_bytes(c)\n"
b"\n"
)
for file in args:
output.write(b"w(")
output.write(repr(file).encode())
output.write(b",")
path = Path(file)
output.write(repr(compress_code(path.read_bytes(), path.name)).encode())
output.write(b")\n")
output.flush()
return 0
if __name__ == "__main__":
sys.exit(main())
exec(__import__('zlib').decompress(__import__('base64').b85decode('c-p<YeG`JplBfB9e~QB>9?<rVC~r0@f+)TKf}$wVAt0cjA_|BI>Stf?o$j5OjlQ$75ogvgG|H+%C^CQfB#@4K_~Qv3{`C(V{<nYm<M%p5VerSzO1z7||HBV%VU+wK|C;~kgl>QQTlXJL=m5iiyIGNYP5u^~9Y2CF1o_uL{{DvlG4%GgXXGcYv416Q4B7C%JfT06*Ufc|IEh><`0s|{U;V@|{&su)`LBQM|C^h+HuU@PAAe~W(4YBl5B`Mz=D2nk+#)xQ|Cipq6}ve4>)(^u--kFZ^rv0FBJbG;&`3N?mCTQHdQL|5m(%CyXi9;v=BPHPfxIp1S_Kjs+nJdNwss<?xz?|)a4E(*Abo%DDg>4`?@)7omgGHm#!Ga4%1Bs+H14nJ3<Pkp()nWYeSqUBkMryRfzxHF@g-PJ-W&GHI6ijEcUQJ%>s>Av+ej=A*B@yLO@<GXs8a(js#@KRSu3RvjIn|{!RWi~wM#xW*W)LdFW_;rO-^CE+V-n<dY-N`wNY)-sN2iwHC3H0mzF<1w{LPufA$hsy|WEW7}ip!ciIk<n)T}HUvYlUpsgxg85yfcgpKe5RI3hFLIZutbR+%~hT;GAU!9l0@~?mKdAZG7^BD+onC7~Z2W;cgg?3-*hGJ;odY{@BZ8_7UL>aZV^d|6o52OpLUUDY#li!GqqlPtmY!*mEQbvXdBr13VMwgD<wRy2zV?B8dg=-}kqA9?E$pn;-o%+*JLb~TE>t)YYob%$6U}<Q^<)~X5rReFIT!%$ze|?Id@#U<~R(cFEgH=_!JXYVgyFOcsN%rX7cno_I>{7V{;G?^!3>arCRCez2(yu&`53qs1=Swgw;nQ6a!-DP4kMHFgc6h_p@b;tmtT-n|d786)-I>%hI~^~T_JmHW!&B?n#h(e`CG!U`_2YW6=^$@)v>&q5^j6k(9Whgzs}+@sj8>x`(?-%&HS)9?eF%-(^2NSNpkkXJy`0InnI<dqRrJvy-47eywovNV`lWJP(#ORnDA2B@v`;$>yGNQotnAv{TDzEd$+--{wlB(aSKC&V*&3LyYB^0v68DK{Ww$RK7>%9`I*%%~eYxgzk1=LnR0d}RKSO-K7;LcPeFRK*P5|yjNSYC?QH3?{Uc98ggZ6c;Jy0M0)>m8|ACIVF)i+E0xp{l8k00$~Y3s1L9)^Ka%C<&mtb@0I`2-zQ>vOlVyz5MsOx^{_iWN6WbQLrn=#)=ATSBY$6PY}k%LAz4D+xF!sXKc?#W@cVd~1-K-rTbaVsr3W|7w%RchXCSv*CxWL>D=b4v30#NH(_T;FqGQ<r6CpmShDL4>+mmes(PEPPt)*`eH;M(XaaCjt%fQtHq^R={O>R5~q)%<075}ih04sdwaax^KqvNS(MH1>~NC@=kUaLf*|~|)Aiv6%((Y3?MPuo4OGpYJ|?T{qFEhb$i{m&DscOJeZ97in$`!&&ncYopf`K>EBRsZ&O7@d5VszWapqGnRhdbStM<HP74a9FXZNe(A}&@-PqM`7QNvR&9-E#65wUJ{$kvJM3*>J80Mj-%F|l-UO6rr4*{Zc6H`o!MT;b(((5pmOy}9qkll$)BiT9~dEw!Pb0Q2_=IY}E!N-@isrOZr^%e!_WbyvSd0~o?V+p;jGhc12)_uz2Z;ZbBp&Q=xP%{NqOYFhZ5^B)_dlS3PL`Cjq(NTIT`6ZP85Zx4%6qVf$N@1fb>81`sf^(%;_EL6c>>MKY-aTZ^%*r^__-tLRlPiO!)b_-)!lbwv-dUbUt3S5Juy4?5@b;u}95}+}_YF};$Y(DMvQGO5m5w=u<7*D7cpOWasK35K-KvPC_qXQa?Ng<p2bhxlP)Z)6Z@8!L1SM=s_TbGjsb^GM+$?>wel=yn<Td&rrKHDp5tI#doNfBajI``%)_|W+#;deOG`*GXqY+HJDJU76)s+n7}C7;l{u;}E7b<Em1G6aP8tD&o&GDs;b?pwWeahT6e4P%!tuGupSjo`YUmTWD0PU7&=pFEKw>XdZqU2!7HD}x<Qp)j7=EC3yUe2{+enT4vv37zmNGrP*nIZ*Z9?WzS%HA{**A2Glgyw57!ZOgVfiuW{`Yd{2T3(sY1wc-#+{`4A=_B^ZGxv7|{mLb4T+y)<W*XyL>2QGhJ4+cEd4nV%l@=UBX;rcrl%VWZCPeO!^k7U&xz6wH?{L<lW;0qPq_NH;UH$_0D!V@z?Z(Mm(dzvPEJ$7p9R*lP}+3qrcMe2N67O{Z03=7q$eJ>smUKP<BIIh?5$)fhK?WrIX#&t5AYQPvBW7k_(^!CosY)r~;p?H^Qx=X-AQ*NKUpC;wzi!jky^H!1B=d^SVV01rzv?t37u+7q+yzQOc@%Cy(;%8AimEp$aNDcp4H2g74WF>xhH6Dq7iT~QD7;vgqh#`L6!B2{B1<G#qikJKyb1%>1JmnLoJ*?wattp|mD&a^g?t~T*w^hZ~B>zrucv3m?CM|U0D*DDYAD?mu%TvseCLz?g#^EtxUmlnIZ0Hd<4msEuHNPiLRPSnN_VT?LSDyV&Z*0iTMRMAV#IXt9cV_(>t$gXadpNz}@!TKSffqVi@s;t$0~(z44FKB_#HG@<tzr)8vq{p=hg@2@8`{`FxmKa-r0Y8D3WKX-ycm7jPWBmBSdob7Y6XZ2<frU;>2_kFWAFs?hdf?5wV_<ARb~Wp_H<-Vukhv2&TGd;3ya?c(>}Y0E@aQe;DN-IV;S8C>yKOR>iF{(-U}PvyqNNQmhH*-tyNE|-5K!r8+mOd!{V4*;-xL`q&!ovhv9f!&4fgMA?kWC;C`XeT_gEyc9rY<k>v&@6N7WjFkUfN2+q@*w+G`6Ds~LAx$^o4qA5Q~59Ad8BbCLkSj3&L*YJViz0?{Ug2mFy9#`F6_39(M_jZN@^WGdp6Y}+_s6|UC++v)M5RF}vhZPjG`R}Mmo!5&ZhOK(fxLxLgVz6enF&WFX(zn49tBY?Rfn&0}J)x@K{D4=2Oly<{oJ?_9dk!?{$)I~zb9h2p-`U0E#CX+yZ@BMZLr!|0@R^`z9S0Du{9({X*7N%_%^_}8?Z)M4QElCVO{L9)<w10{j&r<PQktkP3}x}L`pA0A9x2-ydz_V1`c$orZ=N}Cj&Edk80FSUSr-Fou@?G8ac%;{_qw96o?(||0vYQRIM=!a*T`<yqjy+t<QmfIv6c1oJk4JEymTM2ZTxY7pPT^7V5Kc@pROR(N5o}Zl|&fsUzJ8+%Dz!4+k-~X6O}hyyDb``!pt2HZ>y*FdJ~8hfV1Wx4tmg7K)K9~L}#^~z4}ujdzRDEIHu5~Rcg0R&jABoUBZ6?&~e*!D<ot%<ytaPrTHtpN;%k`%r+;+&+>71(>+JJK`QO0)Jp<ny2XqBpfO)hrkD^-Aa63N-;^%?t*@7;nCW_6IIbXR&5W|n;#dWT?&h{GMq922Bg@79(#o&k@HH4W9?r1AtjsWoY^KTS6I$7i&1^&DcCD3^qhmwCNA+cAM>vyFI&XKw5(Wx-^Dt_jcs)zAN>V|nPR?>(^O7yX?h6FnX1^DgPy>AJSgd*Mj}r0xJaz*S3^N4YX31-RnCpU<+gp1D%o@Hn6MUgI4J(iKflP+Oo`#;N{blQ1J^r;jwui>t?ExgSsXx>rdE94puv$5(8=-(kP=m)ZN;rVFYAllJZXMD=_C?Dp`~t?C(GhcqbKle@suo@9?2Is#R#A<1K4ivPRz}vZt{_}{<L#rgq0wTZW%;cQ8}Oo=bl`VuDwQ6~+Y`JViGoJ4a3Fom;H8wZ#~50#wbgc^hleXaY*5GLW{g50g-wU*rUduqTRUK}!L<nGci|yhVS!Y4d&pRHgOI6*UUwQW1dM6d!Ng+9sw<=Krr5r`F%W73=Al~>?bFFbJ-;T=uxdb{t(iiT0^N7<MY7@S-deWHrvm7}-%NC>1s^8E<Eo=W<#72pl56@7Q}XeZkb@RGeV(9h(Vo@|rW5suDTUXZ0zJ%{jV{O?N)_YG_8yC{Npr>l>)sL~T8^gc=?!S$a;XC3IKU`?pV=wZNuSAJHV(mOWf(H>GsL}J^%~F}g-7(KW^9PWEEajQMv@PsHF)d+x4&7Z)SzROia{kbS4DsJFcp5Nkrwb_HOo;ca{81<Q*-mJIF7O|mEH0$<vPBL7O1oqO(DwfrKwXcfmp+#!1}GTrI+lrLDWv?jUEJtnemJ!Swu_R;BawnMSXRpF?SQ!(lg=Ryxsl+BE)^fjQ5XT$E1`|P-}iGQ8~o4u*2TS6CYB<WPM3Bt0*N0_3Ms4Ytvb4!}Vg?i;<3<Hmmj+(&p)NQ4GclwK8{ByW<EXr^257MX>5LDY<c~?h(pdOXPVtzVD1*4s@H|!k8y|Etxv$<<{gU&zk+I2gwCLX_om8U)~0CsC9;oJ(#SxjZE@)*0+6d6UPC}b}}uE#-*ftR9_?eu?^dNBsQ8~esWSaMiZE@J5?B3gU_@vD$W;VI$dpH>9xrF4rsW-H!26W<bFQWGquq?bzG`FoQt+*qx9(*YRgt*H_CzG=+hMWDD|*^1{@bFe;Eh=;{FGEgwbCN9n`qy$0rGsPkFCsG+zhQm|Qk1H!?|4nxnF-;HH=N(qXfv^hQvutXd=qK+*Kx0X%KEKzI9zbI#%I>Hev~-xB1=u;=#`g-k|~kS!|gw>2$EwE#OWsaDgln@HDb0O!Vj`64E#!8z6JXjB4k_g7<w0MpsFp4PNSiDBwbUcB#R=HlHiFW~u=#0UC)>)>WQZ@5vLLfg5=2XUQnX61SF-LTDB`?*L~P*pT<zP4j~G~d5454}#v?x^#XrqEJ_=Hy+lKN4Hiv02Vv23@ZEm|X|%D1+!Rf=scP)gX`w9fR@Rx=Ff1zW!-13X1?Ae;gD&9P9A=;-7Y=ySn3Gf@Tk~xAo}m?CpIeDAuprGG1O)*xs%g)z-65K(mUjMCkPbTDm*Q`0c*aN;TA<M_FIk@vQ!OJa)~>OM=aMl6LxL3u?nAa$l2MNyuE1s+2pYTZ<tt=b3ND?WM}4$I!9f_noA@Hx7U5;rhVpRd*x5S#zNo^FDWH?&mkwc%eiVA@h=PUkIIX+n*M!F>#+_8|yYg&pxGXQ_inl#J$0&=K2$FhQjw;+Ksh6E#l%+@5RBu@nN=p@h3r%?knA?P9XjAtX>DLjwNNKbS#tE8?lYfd?=E<DZt6$W|HmdYFF6~Dy0YY;(pmOWNxjzHP&Jl+u*yPo65UZiN@Y(yGJ}v%;b3-oj)%<wJNu;TPh2F4Lq%6(;V{n<QMyn*)!(KliT+0kLPpxqpQqm7f=QI$tNevb04PNq@4*u&wFJ`mB^}vS1v~w-fqr#zq>ml)w6w@ZM5dX*oec;=XP$4D?Op8c2}HMVI!+JknvCR8;fu0fTvM&E60_M_0Rk=a1-l49P!UT|BL>=xBgmB4PW(2b1YFPIlfi*9>ch9QrFQc_R2RL5%>5s!|JBLtxeZ>+Pfn6K`KodVHwVBMm6?B_!!{q!d!*w9hzK;>i0Fq)9r5OPV?LsI#&-^OBLlUQ)3cH-BfI7RXc2PR)2E|y}G^<R<n8vQw?SpWb=K6(iWYO$B0Z2H6*iWS4bnQA=Ga5Y=68-g<ZnQOYYQ|#dFm&B(J&2jt#fGcqlZrRDEDf2E&2tIUc!UmBp|P`X{3$kce9bmk45QLecDkS9{+gSq8?h0@2y?wQ;+*@663d4c&coe#`IE_^!Y_S}EQ)8R9iQ*W)Wl087BUno-wUZ$o#S19v*6r5d_%+4;BoGw)`IrSmii{8sbbr6ypI$F$$4;B^KAE-$q*aN3$AlmOlzEh#b2=9ukE{HWdsuvZP^nEX}7u+k^c&{6iLTLIIDoRT>k(K4$WcmlWXr;_`9O!@ur#g{Q76Z!luyX$n>g=5<5L(_zfC1m*h&P<4Y+@ZYW0ZL_5so&_sqzAQXrNQB2)BBQo?5^Q;e{(po`#XY=Oxtb62kb6$4{q$QullL6v-dn(&8+KbrvKQ}YIPb=`a`xwuZ%x0r^99*v!b#2j#hJFXEMfU98@PWy=lNXX4~6Y=e(MAN7Ug(!FRgBHdc4#5f6^#b^)AvQj}>~6&SwX=@(#vb(djZQBi+ac=*D;*t2A9qofaog1Pz@?wf90Un4W?;h#-sx*5di@`@w?uZ?cQQj7;PO}q7Tv6<9~ZnV#s8tlL5d?D%ke29U-;1RqGeV^v<=-69$JKbyEzX_jXI2wLx^Ib5%*aC=%l@}ZCA&4l4rt6Df*Dfvcwr1DPihgX(dhx)VS=%J9VqE|v)<m{IN(djv<0xBXtJRc|CvUWT-8&P=6iE#cxnSLxX(uPU#oeT83Dd@^-kuf9IaSf<@|Y;aCJkgdp-#MIA78;B1?kJH!=Aida6VtlY%|Bs^}|x!AC|_l+ijQQ2i~qlceqxi=l-MOErDQpn+qnb24sgLK%1kYb%U7Unj@(uFl`XpU?5BL?4i>JTKA>Oh^ff@TKH$`^K1Fn<6kQ;gPZI>sSf_2YNOXFZDn`leTAb6L1r9MAxq(Ti=pR@rQ9`kM!7+MYL>A}AwBzKn+wDB;WfS!%(Pd^8{Mh3nB1BJuf!>aa-^g%X;mbFR^3}q&XHTQZvoi`Yl<J-DyJ6)F$M!Wexl3Us;o^KJFtDv*AeGI>24nF#{6+Pbdxe`f5yKpJ$$xT*S7<^Xl&GG9Wm=?MuWspo!&vcg#ED4v)as^7VspR9Ki|;Io4<QQ>*gTi`k+i7W8-_9Q*#wCO)@q`|5i7BEF1HYi@Hj&TjL#@m`LyKh$+jT)k>{Qp$1&uQuO@1~MEzb+u%d#w!c(%=6|DG_AP2eeLV(>OVVI|0gaKk*nsAKjPOakXGJoXJ2pl$82+1bPt4(Q1S4!?m)GrU+%Jab)^lkdiA{;44Gom5+TA(saB`EWt=%Nde-cSK?)mPnV!l$*S0C8OUYFqY*@jTbIApRQe~`7A+BvjD$&qR;q8M<jXn|cmR#!SW>rDAMx#HN0#k6uji+CI-&z@WJ}idXMHkmtwKyX?T@snS#$B`MUe|Z)gr8KqTxXfFo$`8%)-L_d#P#2U+m=JK9@l?p+#P-^@r<C>)i^%~m2T(l;Y5{!0yb|8jyj|b_EnFn$9M(+LdBy!V9`a@x>cUZ_Z1<_^aQQF@BRMwv9L@Unoq%qDernRx~z6g`o^0~deBZu1$ruj1Nkn`a3xV-6u^Si$e=ejMC{R`weBy;Meq6Sm*OQPYmTrYh><<~dUu0RF6-%o%9S>TUFJsAp$&QEALkVujHpf-KJ{RC8-%TB9^UrPt)*y&4I&-Bxv4vCt1#^D#En(EPZ-NbxB2R%dfADr+FssU=HYHJ{a|*2C8Ae355*3CFf3e`8<$vRcc2~}!D_zNqE_-=^rH#kPDj?E>>xh**ryo@zvR+G#5r4f@%C}s^Lte!?T?n<?8aV(3qvrX_nAp9?qH*y2*uQ*7X#P*Slp3O^~rYyIpMa%9=^?{<6q9*KiX#2@326>w(U;rP8Y)U@B69*3KAjQs>fga`M$KBm%E!*=R1mG@w?38N0ZkRK^acDm7D$|@vB<p-omw3or=2Po364V<`5Vh!iziRMjt0(?vL)tU6qKDmRoYya4agwilRJOMal&HI<o~X6X|g{)#2^31!rTqX$_oxh4&xb2}3A_x|jZm6S|r0-u`~s_Af@V{dQCatCyBJ+f0Q8X!o16nVq{Sy=;lB*)H_f!utX9O?Uw4qJM_T@1VKLoBLU59GLCH;7Q+ygBO;O&{!zY^qtW08_qkrhO9V;K_zqT)Gm=moa=F}thb+Mx0FvykWf>7wq!T@+>kvwAMW8jZX3Tcj;Kp>t4ff#O%$+;p@rWvjz;gFEXv_=wf_&SiS<iswZ;o2$y3d~1E2mO<JHmDe7URJi^6Ztj2n3J^wWMa9qBqU!VwZZVq}IjzNc|!Tw|zEl0^z1FZ}H`LB6)0Jx8Iy7v(N<DW(mE=@zfBetlV;OLgsh=4I>+)uHaqhXqCY3^qrm<D|)R<2GHLtJ|l`y1(`I_}WMk@YbLke)Uwl$!8z&^yc9CaQk%H|IYh&P~AdpuYK(?15kdoPasH8We^#$Qg0m(wbrvffbft4OsD$D2x;s#M#=VmPv+qc!z`^#3HR(e4~;xgo}+QsSw+rG5}(zMs2@($zE(E|WUin`5kK&VcV=e}<|S<(L#)Lw;9gE`d`_NDKlB=W)CScR0HWX48`*do8&3=Sa)jazO7bSOMukAZdHwMKw2{7ls43su9|26FT93yqLax*hLWf6giHO~GzbSRv2Gir%U1!^ozGA@*c9h!6<oq)V`!KH=;C>KljUo%=XT1=*C;7Q_JI_@}Rw}3NA&tb+emFqu2T|%R2waF55Bf&orP<8@e)`^-C1{KDrIP!uxGi3Jro#AD!F&A=wvOX$P-;=*(n;uYH>bXYuFf_if2_ktEtRs(b6@xLCmP%Qu>Eaw{oMEWm&~8Y-nBQl%?@OzX`(8IV&~mIG2;L6WmtRrFHW|8!0DEsn6`dzy5Y9s8v6T|zc$@ECG~r}2W*a+nkw$2FQ#vDV@B_%@VIr)YdvUAxeX@v8E)CUeh-&Yp|6@3q05-tA$rQ(g}m+?ucP1p{<uHr3iV(LJCpIS@lNcE)ZiEIv-=)!KH^Hp)|OJ&;OgGo?3z`HUxj|JM|2;m)98~$(IKzE5NnO)_&aS1*E4xhoc{ZilRlanuLJ2`o$@2dQu#VZfKfp)-^{dy3*7_OR=*=o<%!;E_iLSDN<-G>*bq-$MQ3uIhK%j`LC)H3#S?AeRm{<=5t^qGJ&otr#pbphN9E*(s8QaQV{&fI$M07X<igW)^Fd&*hJ(IMJWIXi;>ji%dBD-tYD^>JB-=iN#JFJaWK(4tvst~5?LZo3=g&&E-p_GkZ%qKS{loU}e7k(d9$s$=&x~Q~)dhr%IptEGPUgVap~3~2r<d3op}H{Rgz{olxrNJvQe*u6P^$O)NR5@a!7aa9w}W&6n=`CuG^5;J&!@#=7+tVqm+7<egaWSKFfTsEhbH6%y0J{)xKE_qadtlPjy}x7#hFyyba93DnyObYV0Ev_zMKP7q6d_K<3XFGX*@gU(IMW787xcXNPQ@5B~cN?Qxh_NeAj|*dG9#mnWx2Z>vsuNdnesILmv0;IOl@kF51Hui0w%03*tzh!{bY96K_yOpZ7};QQwpym4?N!vm2qHo+9v5+^gobei>it495I&K#zuM=5lk_6%{I3^~n<Loo*sAsyBrF>b*<tb2=Nn)Jx5(dya@3V81gs=sCwK#`GMhs?!5uEoNsmDTrvIoAg6)@f@n8IH}d0h<Sf1F*KNU_mj~Fz1b&uavOSp!6;rmoCW@E{niCGiII(smV`l2Al){ZJRZgY;nP-L`pBIeo30MN)&(7EuB!1uaSW*cW<xYP5p@@`$1B`G`la`E-tu1mTX(ni7x%9vYUvFrh+O><b<XsAsv*#yLkuhWPLBn0HNQ105x1E=F1lHkW@r2~E^q2Rmg|pe9nJB&`wQ(W__nW!0bdAWe&an@8Da(h-pw`KI3AiPptQQvBk<OUKu+bu8`I11QU8Dk=fX)cHkpjmy=ED!c}Yu0n_`rTfO=uHWL&Mf_v|v=E<3!!o_jN<`Hjmf#0l8Wa>@<PDoO3`4K0_2V<`rsL%@;q>axDrw-7h{;AIeeYWkt;@|}Za$3<2fF@`}5=%$cFU^uVTfavmlgj^KvX7hQ-)PrJfcFY@HCqSWCS^dZ01Vf8jHNAjBQ;VL)2y2kLT)%C!I_rMM8)9qAC3QV&$Cu%$e8pbLz^shNp<TaX18dOVoi-KrxWKOD8mJe1quIuK6|k)i7H@PbjJq|%K)#^AE<r8s%@otcx0#ki$-b-ldcD2LkZEp9lcBh#p4kjvqGx;JY?zAGW@+ISmv8UY{7~6%Cc~S0-9V?HqC6T(%4*B@X+jH=cj>UF%-7N^6&&0OH!lOGmDQ7mlXE@yRS$>$x5oC*@o1kn|GycUu*gtgR13|z0%6GYR-o`#rFa}!;Q1t2GMlIEhlluCl!eh}#;2ut-e8Y?bo67ymQs$3#nws=OfW}($~8-&hQC!02XSs)8jV(ox%%^CEBqbg3YyJ)89~`qv(eB(YUJ;MN(-%YCY!T<h}QS}-4U7T$C<}m`|K$9OK(;)5a=umi55`VTbe~Duh^vLj)AxRO2E8b<hHXGeib{RNi-(&gg}Ld$=|<nbA(k~Xj#dZ=1-BwrP2~e<SDHR%dxdQ)5T<&_8VJT+5+1RHN~8;;kBHdOUvU+%19^T+JQ^V2<UV2>f2+bE26D2DzXPtys`_h-6s4^dP&*);%M^W8AWf*FKuD&(rPOj4tYDi*|n?3*8@X36t-<(BGVNnlZ$35XCOoG!{(skPx~$DOCfL#?^}nOznQm=HGH4ClL>4~n{V$GDCg0rO6-h#6g_fZFGVGCoe!y|0JI%PAL_G8j|*mZOD0wo;$WBN>RUpT>Z^OLdyCpEz2hc!u+OK`v3K&;GPeg2xa-y!S@}ioo+{<aX8*LHZI0TnE82xBd#|StzAYAjNLCbuyh7h?XC+dN(@#4s9W3uhuQWmZOzAdcb+3YtDFL{U(@bw}-Q~1XcUO?x;r=;zY7KUsAjw*8CiB*t0v?jkTDJN9VqwV(v3kaePHD}&ha>j6XD3@7eIw11B{BnB<|;`;or=%4<1GnyAAUl7v=9x%oFwWy>4I_N6ZGg?X+*z{I|u50#)Aja^D6JajbH1_5hzu~8y5op&$$BjTz_n);PcWOV$#LPcV(=Xl&_s-GH$zNcKzuOs-r;a^lO)*c~QWXg^|tvO5BZ02pVb*cToJJ0&CW@7K#qOV9B>NdF^A(BR5uyA#b3`yA%cYd%I?7UYw``#jb-8YBg|D(Zz-XS#~zx+iJ0|O?4LX$(*q!(UI5e#$~`bD=4`SULSI`zlRt2y|1RNiB6vz?w}l5m*uL_)TF8~=g47%<;#1&)ZL{fImkxrl`~nPF9x4Nnmm%AOhO`}O|JnfBh7JoougnWtjte9&0#1E5`!Ix99kTJt?xV(^ti|`P3xUzFgm@#w0zt7mA+?ek;Nfz*>W_=>BQwSDln>96{j<GQalbhHl`4Sg{w>8!(c#>jA0oLHzc((mels0UQ7GKw1XcS-$RT??dQ}t;jP=ZW<31fD)mNM)*k{l`*zWNzX=FR^tg;Ms(U%|Wo><%zz>tV9Il4^x=kd5ZFhpiQwen~u$(T%WVQ(wuJ+kBck6cIR|l1cv);WiP($08*e0*T{p>=74Qi%hcvse=$2#7Zxu?HWZiL&SM-w}g=0-w#wUg1Z-=MJT{g8%o?Re?syUOjjU-XaIPp+Qvh1PMK&KmXBVnKm&Y2v5ciEut-X_Xww*%&2)?Sbe0arqZY+Kp}>W|4`Fv~=18x3}^Pd$%SRdcIo&mhG2IjkJ?%2@W&l^%f0zErr=fqS%9QCG!<%@>8JBK$*JI)}0#Pa?&^Xj<EZQn)eAib76P+&KcF-O!s*}63gd+*})KI)=tchb9!giPY{&g@euJg4mf(jrr620(8}DRg#j>GpzTV2(UIUa_nK@MS&dVa6RPU)cr9VjV@^yCje_NIsyvU2xZ8RkrVeAkubM!M*=uXC`zJNGlL8D5P<^rOj0At{c9;#g>dm(w=7r5pdlSqBG9v6pR~_S{#$3@MwRX<WixWp50ydHrw%=+E8ue-kzXbCFYeIba-nL&QBkdIVrhM8G)4cggv_%=NYEllV>MXFUZ$!D*Yp?r#FdWb9;i~ev!mYw?4zLf+)i0IqBD85vn<X?Wx{WUmOucty&(q5phZGyVedGG}FZ14g0;}$TWy^i48gmlV6VZl!U~%%U+9=sX`7RqCn}W2btM8LgyOm|~q_$%gsRQj~T1JA4G-tX>w0;cpDXm%V=yolx_-nC8y!n@&`<+2@&93K(S$^hQu~V(0K%@{um|mmAhU-m+sCbwJvmX21f>nuYsyoJ8@3G|$ybfN^kkz|jG4A(Z|DIJ(Ww#{vx>>+NPzkZ}V;TzzbG=U+3WOXr6esnkc`l9Cug$t}&S-kBcNhtqhXZ=)OeVa?;0JHJQIQ9L^Y>$NyB|fSa_p|1DLHT6fuV9vzmL>x2mKp&7}%wIr;zNIPJfuGt9w(WG+2ltK3zPr8NGp>1-q!`#qsz<tM_YgnqUPKv-oJA4_BD?Bs%7o9iJb2Us9A@Rpw6)%j<{Q?l2wKN3D||F3H{adu=`}r4AaD+8wyDzL=KmmZ0qV$6G4VG_a_@(TPw+S+jeSS58OjVx7_~?~x5QP&4PTtGY;6zq?dsX0d(m%!^lT1X;e<g>7KL!b`Z*Rlci_OdR4CWesi<Zn{QOb?IM0u2#+6WnPKyr{lh1NWi4BQ{KSb&z!`oFJ~8O1#Ug>rq<t$PC=`&A>5|VO?cW0iH|}f2x1<!W~sT7@$ZMKTICtsQ2ZbSp;uk#6B*#B?YS*VX=pS7eIEcA9!TW9E48Jx`)RzH%7hv3%tfc38gBP{hKuD5(7-qczR6qY1XgciXF6$y*4aqy`x}+x(M;*eV3(rB2V#Cp@Cs;R?nb{$@2u8nnP)RA)f?OKarg_M4SmPFloCr95=h|Kk(s#67OTP6rK`N0Ezt;c;^J+-{)?})s16{Dh@nqbNLz(z-EVx??D<du%@5pY*pS2-(!%Ci;fWjINdJL$2fHr>`B-W=BZo~N#sJxL<mJ}pMC4BN24e-cF%>)QVJB+M2gEEKml{Jyk>iiSzwSrSw17Bw4o1>1FPu%$0EKFafc#_e>9yxHjXG3W+Q~i+oGUTC86b-$!0*{snTa4dW%r=EFCS`mZqpkcnB+#!1Qse3tmC!T8vR{7Ogm@k9vk9e$R52WsUMN7UVXh=!5$frmrL)xeYPxzjWbPhN@(S}bD6wy&8AEdDO=9jMN7k*r2R!a*h(@KJ5uM2@aK7C2jxNSTB$k2;nHsxt<*l413{k5dWNbsrZ=gfh86;~<=TAQQ1!iX868X?!Ma>MjgmuOMUK1|Jy-Luw1dv4U5h>*b}|jLd^_u`>2{V~)&BD05BXof1wP2NToK&S`C_QF1!*vmTNJ!$SJax!^9_Zxd_~5X<+5GsOVv)p#<)bl2W?F&SB9tN<h0;RIflL(qW>m3*FJ~Wvo>GTAphWz<3l=Q&g1<I!d4e2lxEZ1Lq4yLT(<ML|7oCSG+y2_Fc}?qh|1Adci)+ZqhhOG*Qd{psljumRL2gw*M03MJ~U@z|JDqFYmQcFYdO6c3o4eFoau}QvsB62<hHc<c1L;pER*h1lcwtC$0yo)eb(PA3<~<0m;QWe9bl7p96hVpvqC<E$!y7QxH2n$t&l>tA#&i<=}GREz5d$rnEUOMag}|m)jE-~`P1<AR^hywfiBURau3?w{^=Q&q2&V+vy^B_anok2>Tx*Q-tN>9KEvk`j`oMQiaFW{k^4`wtJIBRKfL~DcJ+@+Gs8GMl1Jnk#(x%@S=Vcr{Nsu1_}{PV;bJ+NOMi6#__Ogh1VR4R`19Yd{^2+6Y6X9v)cy7RXT{Q=|Mu_Kf0Uj@{xyOAW9r{`<X@csKdao_%nEK7H~xQCxc&M6e!zeJuN$zfi~YF#{SmOgwn$D^>($o#gUL}bwe$(9tMnc2$6&Mjqw;6Z8dZ80xzy<a628&$1C2VD>Y>fKjikFGOBe2jmh0c4=MAq6eWRn>pc>(rS$&Sw0RdeW%hHAcORM42_fDlr=y!RtXR`>gNDiLRPxH#A)bff;V$AAdK18nc`V<Dhp&|Zo5lNS)_osR?s{6V*Qci4ffto0u@QTPu3bo<mSI=#USExO0J;vmDoA0Vxw8+-0!L}<a3tu4Vhqb%+>GfdAgwH-yKzT;4FTRbQ8c|9<`kSkBT&=OrGA2er(y5!zCVW8yzI-i5$kAS0)U0ju>T<r#hINta3Go}`wwvu#JVbkKz$Kcyqmrs>S@=k7!8^YGKAf<{iAHos`I!P_>}p^(9l*LhWRM;-E8P~cl%E4!PNAsz`03+9Gh?E3)*tI|AGdcSn{}FFWi(|Tv*96EJI0QO@#)7s(CT;d5&S3)hB+`*>s?cxVo?JRj|893_~RX%c9=}Pp`<N^dslx(xlsi+UaMcK_6Mlrv;J$s!I#nO=33^}<m`xc4)?AMG`4ngTur`UTUn~}{sV|3Ar;?k(wi3VJ5djTTB-y5efGw)XujP_^+jp)1mn9yW(PH;?HkkFBeA#aov4}$tX47A=j=Gye)M^e<5SY$Y^b6PCt%{afjgps1j~l>@Tu0`My;Mr&&V2ke|A5$TrRdR&a4R1K^5?2G(r~&ama{W)=ChZPIl7pQ|_F6e(0<ZS?8W@(zNcKEP9@>5)jVuH;o&8%3}O+7bs_MU1^k--10pC%6#j(I4U5(CaNEuxJM6Uy`i-y@x$@LpKg3b&9~&<4A)N_H@J4&&iA!!R2+)^X|t;C!+A|q;a6#=c2|=HKkD-wv8Xh-X*?(HGlP)^Tkjk^^j$@skBGDVKXvc_cHx6%|J>Jd{J-{Y#kF$+wSY|U7naE7dGDqN!t7NS;dYz`Ej%q)WFU$VbGNg>v=pq3WB0*YxB0E5G1$g+Af@9}2G`fEb8a>UtIiu0Ht@YAC%123A+M(?7o-m;2X@b2JX%)m-b?LH31?Vk2s<p5C0g7+`WE-B0U*Y#%o5aUx3WV8LlkjGFRXWSZBWY{VA`G43LZDd9I)FkNwoS9aXtRD=eON;+PdpMacEj3Dyl5h7-|61xw6r>70nclxonqIdg4Z_!0Nmn8IO$y<<6N5YGpCw*RspgAAY$0fweg3m#4nx8MiZVsCE0Zw|QL6tf<jMyLY)Ix?4i#!$8@268U^}zZd68kg2{M+*+>^_yoGG6-ib)GwQB(@s^@Y>A`0R%)<BG9Ve1@q5LP<hC%JXFk@dL7wcte>^`%J0xhOg4E5clvv{xJ=DFyBFp=C|E8}4eqiGemE7FL1AWh}D9JDL%<>!_61+AfGaOD<nZ$M8&2^;rA0DFoO(^jMMloIgv#1a>8uzO2OA4fWaXK!9_j}Gms&(I3k`{>G)AV<Db8$c;+=%tPzohNN|cdt$X^Rgi{utdqgxD-YHsYO`GRif(U;FWD*>=}qR-3VTU4S!cNxo6=W1bV@}!KYo{E29lhPB)w(u6|Hk3+m~xfoV5^Scr6UHH8&I_RJ&$;_Lb@Zao-09sstC$Agsy0|<%e6Syxw+{oyy%h<bZ)h1;lDa|_T=Drye63S}!dy+r^*I${dhuX_qB}Au;^-VaaYE2z)r49Ff^ZVw|MjO{0xOTV0m9%7Uz7J`o{9=~TNh5s68+#{DjPthA7N2+LGQ`7OSKE6cL=qY))u*pT1AiE&%YWgFo@+UOsT&3W`#*1ed$s8nx$f)ufm!AIuD;EGdQ4RWConA(yd;yCu-opC!r?EIeapDf+v$^&W?lHu+?9RB`53zg`&c*U2c>_13@5i<w4%o_H6z7}(~w34tyAUk-M>Fs>}__dCmpyJYwGAxLiQmzi>f@(WMN)Ts<Yf1B7>l}-^%m&AnM0YDmyFbDKA;F9bU$5g^eF{FSQjco|Z+VD-^r#DJISo1+(qlwTV!X+aDr6`l`-gw)Z*@W##nR>=u&@T5aWd)T9RX^1cW!C!}VC)Goc7mpX{4J2Fg3(JnU)t`0?`ZG&DNjQgwsR}UIl7`yS+NQ(Jzdqo0&GE`e}?P49UDg7;<!H&C6!C)J0x-!)m>q2ES)v1zmB$vp@xNm0jCV`LN)jqoH8SXA&isn?Ay5!SbkGyO$vdZ}b^Fpe{bK^0U&mysUnv?f>9W3pRZ~WCE*U55%ws4ZWOw>tCYFo<rc>DJB#urKF+0er8*m>m6XcDfs{W}UD#eSDg#s9*R{(+dr?=$$TpZWdLp#C8kOcO`Z_2>W}vTLpygI-7z2j_MlXQSEnG!N6fK6B_<t8l0l2N*5uJz-t%sK^go&^Q4UE|g8;vpf7<(A5KO!v!$Xx4SOUr_f0qxWejuTv~JdZ3F^_Tju)VK&Gk2ygb020K1UOh%9*dnBOpcA8%LaXtx^T_IR|Iw3Yj^n2N^i1%OfGIO^C+#_sW2tvq?=W${VX2H6RXCh#rajE^S)=Bv^|+Azmg{V4;rXH-aTZ}NeU2>E&4?&t?p5U=TaOL0z4YCmd%jE6Jkg*n}N9XPx*OxK&|%pLSbZr<%V{%c@1_a!$A_JfE&#>Abekm|gbzr_G8rEfK+@S+hI3XNGm<UE`P;e|y+%iQ$`hh{6&&!2jywBxaHw}7H+oPv2z*-CHVsDJc&8Fk;uJa?*6>mtzTW?${i?M->~F{uOQ8Eo~E&ek@FKxfb4j|kLAIZ6GD!S<We1jrb=tsD6ZK`6eO>%;PEI@1JZ(tU5|TrH93hJp(2wDcItH_liry#K<m63f5*<r2lb75^UwwdmfLcXyfYR|`aOCp8zTT$1X-e61M%#<Wj>Sb1|o@|fMrE0J7Yx<=)ItiLmppA+(p`97a8YV#q86?12%+b+F@S_5kK;6oPVX8iivIylqg06S*YABrX&VB6hVXi^xj6<<>@+5onX3vs)qOJa{h{8_@LzFstD<}65x%Y&W9&0ioptKJx(@J`cRhKyj;)PdO8gP+y309vR07B=K5f0-qd#gIE3E|12^ULdb~WV{f0;Z#sAJXDvpd(W?(uRqZ3E6e+!%AS?(Xj&n@+3B%zeQ#}!;a6XMxGHXb=Go$P`gY$6KJ-gcR;{QWG-40(V^6#f(g)e{yM6{7PimdGzE;l6V1az14Cc^sn9lTIvvEOIht>^GeR2n@<7cptr-McN=aqNZ@bCA-FSoZ_%ERg;6)Np})3JA#mJF`*ty*>AmwNN?Qa|GMG2Jn}(nRO?;MTy5lzk10^8_AaGBL+?l4^%bwW$Tf^wxi5xb$xQ(vTrGWSr!Gn9~0RXWc;V')))
from typed_stream import *
from examples.factoradic import *
from typed_stream.functions import *
print(Stream(int_to_factoradic(127974441335720091837592620)).map(int).sum(), end="")
print(Stream.counting().filter(is_even).chunk(19).map(Stream).nth(11).nth(1))
file=~/code/compress_python/compress_code.py
run="podman run --network=none -it --rm -v ./test.py:/test.py -v ./examples/:/examples:ro -v ./typed_stream/:/typed_stream:ro -v $file:/cpd:ro docker.io/library/python:3.10.0 python /cpd"
run="python3 $file"
$run typed_stream/*py > test.py
$run examples/*py >> test.py
$run test.py > ts.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment