Issue #19754: Make pickletools.optimize respect the frame size target.
This commit is contained in:
parent
53dd8167ff
commit
28d271ef6b
@ -2313,6 +2313,7 @@ def optimize(p):
|
|||||||
buf.start_framing()
|
buf.start_framing()
|
||||||
for start, stop, putid in opcodes:
|
for start, stop, putid in opcodes:
|
||||||
if putid in gets:
|
if putid in gets:
|
||||||
|
#buf.commit_frame()
|
||||||
buf.write(p[start:stop])
|
buf.write(p[start:stop])
|
||||||
if proto >= 4:
|
if proto >= 4:
|
||||||
buf.end_framing()
|
buf.end_framing()
|
||||||
|
@ -1343,12 +1343,6 @@ class AbstractPickleTests(unittest.TestCase):
|
|||||||
pickled = self.dumps(obj, proto)
|
pickled = self.dumps(obj, proto)
|
||||||
unpickled = self.loads(pickled)
|
unpickled = self.loads(pickled)
|
||||||
self.assertEqual(obj, unpickled)
|
self.assertEqual(obj, unpickled)
|
||||||
# Test the framing heuristic is sane,
|
|
||||||
# assuming a given frame size target.
|
|
||||||
if self.optimized:
|
|
||||||
# These assumptions are currently invalid for optimized
|
|
||||||
# pickles (see e.g. issue19754).
|
|
||||||
continue
|
|
||||||
bytes_per_frame = (len(pickled) /
|
bytes_per_frame = (len(pickled) /
|
||||||
count_opcode(pickle.FRAME, pickled))
|
count_opcode(pickle.FRAME, pickled))
|
||||||
self.assertGreater(bytes_per_frame,
|
self.assertGreater(bytes_per_frame,
|
||||||
@ -1365,11 +1359,6 @@ class AbstractPickleTests(unittest.TestCase):
|
|||||||
unpickled = self.loads(pickled)
|
unpickled = self.loads(pickled)
|
||||||
self.assertEqual(obj, unpickled)
|
self.assertEqual(obj, unpickled)
|
||||||
n_frames = count_opcode(pickle.FRAME, pickled)
|
n_frames = count_opcode(pickle.FRAME, pickled)
|
||||||
if self.optimized:
|
|
||||||
# At least one frame was emitted (see issue19754).
|
|
||||||
self.assertGreaterEqual(n_frames, 1)
|
|
||||||
else:
|
|
||||||
# At least one frame was emitted per large bytes object.
|
|
||||||
self.assertGreaterEqual(n_frames, len(obj))
|
self.assertGreaterEqual(n_frames, len(obj))
|
||||||
|
|
||||||
def test_optional_frames(self):
|
def test_optional_frames(self):
|
||||||
|
@ -6,8 +6,6 @@ from test.pickletester import AbstractPickleModuleTests
|
|||||||
|
|
||||||
class OptimizedPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
|
class OptimizedPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
|
||||||
|
|
||||||
optimized = True
|
|
||||||
|
|
||||||
def dumps(self, arg, proto=None):
|
def dumps(self, arg, proto=None):
|
||||||
return pickletools.optimize(pickle.dumps(arg, proto))
|
return pickletools.optimize(pickle.dumps(arg, proto))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user