From 13cd6c1550f62718c134b03e8b0acd1f9f50b76e Mon Sep 17 00:00:00 2001 From: Ryan Kuester Date: Mon, 24 Aug 2026 23:11:41 +0000 Subject: [PATCH] feat(compression): reject empty compression spec (#3678) An empty spec list passed to compress() previously returned an unmodified model silently. Fail early with a clear error instead, since an empty spec is almost certainly a mistake. BUG=part of #3256 --- tensorflow/lite/micro/compression/compress.py | 5 +++++ tensorflow/lite/micro/compression/compress_test.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tensorflow/lite/micro/compression/compress.py b/tensorflow/lite/micro/compression/compress.py index f1800694..4a3313b6 100644 --- a/tensorflow/lite/micro/compression/compress.py +++ b/tensorflow/lite/micro/compression/compress.py @@ -132,6 +132,11 @@ def compress(model_in: ByteString, specs: Iterable[spec.Tensor]) -> bytearray: Returns: A compressed flatbuffer with DECODE operators inserted. """ + specs = list(specs) + if not specs: + raise compressor.CompressionError( + "Compression spec is empty; no tensors to compress") + model = model_editor.read(model_in) compression_results: dict[tuple[int, int], compressor.CompressionResult] = {} diff --git a/tensorflow/lite/micro/compression/compress_test.py b/tensorflow/lite/micro/compression/compress_test.py index 6e75cb3e..d23ae7fe 100644 --- a/tensorflow/lite/micro/compression/compress_test.py +++ b/tensorflow/lite/micro/compression/compress_test.py @@ -313,6 +313,11 @@ class TestCompression(unittest.TestCase): self.assertEqual(dcm_bytes[5] & 0x07, 4) # bitwidth = 4 self.assertEqual(dcm_bytes[6], 4) # stride = num unique values + def test_empty_spec_raises(self): + """Empty compression spec is an error, not a silent no-op.""" + self.assertRaisesRegex(compressor.CompressionError, "empty", + lambda: compress.compress(self.flatbuffer, [])) + def test_smaller_bitwidth_raises(self): """Specifying LUT compression with too small a bitwidth fails.""" specs = [