MCPcopy Create free account
hub / github.com/ActiveState/code / optimize

Function optimize

recipes/Python/545418_Pickle_Optimizer/recipe-545418.py:3–25  ·  view source on GitHub ↗

Optimize a pickle string by removing unused PUT opcodes

(p)

Source from the content-addressed store, hash-verified

1from pickletools import genops
2
3def optimize(p):
4 'Optimize a pickle string by removing unused PUT opcodes'
5 gets = set() # set of args used by a GET opcode
6 puts = [] # (arg, startpos, stoppos) for the PUT opcodes
7 prevpos = None # set to pos if previous opcode was a PUT
8 for opcode, arg, pos in genops(p):
9 if prevpos is not None:
10 puts.append((prevarg, prevpos, pos))
11 prevpos = None
12 if 'PUT' in opcode.name:
13 prevarg, prevpos = arg, pos
14 elif 'GET' in opcode.name:
15 gets.add(arg)
16
17 # Copy the pickle string except for PUTS without a corresponding GET
18 s = []
19 i = 0
20 for arg, start, stop in puts:
21 j = stop if (arg in gets) else start
22 s.append(p[i:j])
23 i = stop
24 s.append(p[i:])
25 return ''.join(s)
26
27
28if __name__ == '__main__':

Callers 1

recipe-545418.pyFile · 0.70

Calls 4

setFunction · 0.50
appendMethod · 0.45
addMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected