{"record":{"id":"8be62d0d859ac89e","repo":"pola-rs/polars","slug":"not-implemented-8be62d","errorCode":null,"errorMessage":"not implemented","messagePattern":"not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/polars-arrow/src/io/ipc/write2/array/primitive.rs","lineNumber":45,"sourceCode":"        write_bytes(\n            ctx,\n            BufferOrSlice::Buffer(&buffer.clone().try_transmute().unwrap()),\n        )\n    } else {\n        write_native_type_iter(ctx, buffer.iter().copied())\n    }\n}\n\npub(super) fn write_native_type_iter<T: NativeType, I: ExactSizeIterator<Item = T>>(\n    ctx: &mut IpcBatchSerializationContext<'_>,\n    iter: I,\n) -> PolarsResult<()> {\n    let start_offset = ctx.arrow_data.len();\n    let mut iter = iter.map(|v| T::to_le_bytes(&v));\n\n    if let Some(compression) = ctx.compression {\n        if !is_native_little_endian() {\n            unimplemented!();\n        }\n\n        let bytes_scratch = ctx.bytes_scratch.get();\n        bytes_scratch.reserve_exact(std::mem::size_of::<T>() * iter.len());\n\n        iter.for_each(|v| {\n            bytes_scratch.extend_from_slice(v.as_ref());\n        });\n\n        ctx.arrow_data\n            .write_all(&(bytes_scratch.len() as i64).to_le_bytes())?;\n\n        match compression {\n            Compression::LZ4 => {\n                compression::compress_lz4(bytes_scratch, ctx.arrow_data.as_io_write())?;\n            },\n            Compression::ZSTD(level) => {\n                compression::compress_zstd(bytes_scratch, ctx.arrow_data.as_io_write(), level)?;","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/pola-rs/polars/blob/df599052daf96e7a9cc30a3b0c6bd25d6947e3c0/crates/polars-arrow/src/io/ipc/write2/array/primitive.rs#L27-L63","documentation":"The write2 IPC serializer (IpcBatchSerializationContext) emits compressed buffers as little-endian bytes; on a big-endian host it bails with unimplemented!() (crates/polars-arrow/src/io/ipc/write2/array/primitive.rs:45) whenever compression is enabled. Compressed IPC output was only implemented for little-endian machines, so the combination BE host + WriteOptions{compression: Some(_)} panics on the first primitive buffer written.","triggerScenarios":"Writing IPC/Feather with compression Some(LZ4/ZSTD) on big-endian targets such as s390x, powerpc or sparc — including emulated runs (qemu-s390x) in CI.","commonSituations":"Mainframe/POWER deployments; cross-architecture container images; CI build farms that run the test suite under BE emulation and hit the compressed-write tests.","solutions":["Disable compression on big-endian builds: WriteOptions { compression: None }","Produce the IPC file on a little-endian node and ship it instead","Byte-swap buffers before handing them to the writer if you own the serialization layer","Upstream: implement the swapped compression path or return a PolarsResult error instead of panicking"],"exampleFix":"// before\nlet options = WriteOptions { compression: Some(CompressionCodec::Zstd) }; // panics on s390x\n\n// after\nlet options = WriteOptions {\n    compression: if cfg!(target_endian = \"big\") { None } else { Some(CompressionCodec::Zstd) },\n};","handlingStrategy":"validation","validationCode":"if cfg!(target_endian = \"big\") {\n    polars_ensure!(options.compression.is_none(),\n        InvalidOperation: \"compressed IPC write is not implemented on big-endian hosts; set compression to None\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Make compression a config knob that auto-disables on cfg(target_endian = \"big\")","Run IPC round-trip tests on both endiannesses in CI (qemu or cross images)","Produce compressed artifacts on little-endian nodes only"],"tags":["rust","polars-arrow","ipc","compression","endianness","panic"],"backgroundTag":null,"analyzedSha":"df599052daf96e7a9cc30a3b0c6bd25d6947e3c0","analyzedAt":"2026-08-16T12:10:03.978Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}