Path: blob/main/crates/polars-ops/src/chunked_array/binary/get.rs
8353 views
use polars_core::prelude::arity::broadcast_try_binary_elementwise;1use polars_core::prelude::*;2use polars_error::{PolarsResult, polars_bail};34fn get_byte(bytes: Option<&[u8]>, idx: Option<i64>, null_on_oob: bool) -> PolarsResult<Option<u8>> {5let (Some(bytes), Some(idx)) = (bytes, idx) else {6return Ok(None);7};89let len = bytes.len() as i64;10let idx = if idx >= 0 { idx } else { len + idx };11if idx < 0 || idx >= len {12if null_on_oob {13Ok(None)14} else {15polars_bail!(ComputeError: "get index is out of bounds")16}17} else {18Ok(Some(bytes[idx as usize]))19}20}2122pub fn bin_get(23ca: &BinaryChunked,24index: &Int64Chunked,25null_on_oob: bool,26) -> PolarsResult<Column> {27let out: UInt8Chunked =28broadcast_try_binary_elementwise(ca, index, |b, idx| get_byte(b, idx, null_on_oob))?;29Ok(out.into_column())30}313233