Path: blob/main/crates/polars-core/src/frame/broadcast.rs
8479 views
use polars_error::{PolarsResult, polars_bail};12use crate::frame::column::Column;34pub(super) fn infer_broadcast_height(columns: &[Column]) -> usize {5if columns.is_empty() {6return 0;7}89columns10.iter()11.map(|c| c.len())12.find(|len| *len != 1)13.unwrap_or(1)14}1516/// Broadcasts to `height`. Errors if a column has non-unit length that does not match `height`.17/// Does not check name duplicates.18pub(super) fn broadcast_columns(height: usize, columns: &mut [Column]) -> PolarsResult<()> {19for col in columns.iter_mut() {20// Length not equal to the broadcast len, needs broadcast or is an error.21let len = col.len();22if len != height {23if len != 1 {24let name = col.name().clone();2526let extra_info = if let Some(c) = columns.iter().find(|c| c.len() == height) {27format!(" (matching column '{}')", c.name())28} else {29String::new()30};3132polars_bail!(33ShapeMismatch:34"could not create a new DataFrame: \35series {name:?} has length {len} \36while trying to broadcast to length {height}{extra_info}",37);38}39*col = col.new_from_index(0, height);40}41}4243Ok(())44}454647