(&mut self, values: &[ArrayRef])
| 168 | |
| 169 | impl Accumulator for CorrelationAccumulator { |
| 170 | fn update_batch(&mut self, values: &[ArrayRef]) -> Result<()> { |
| 171 | // TODO: null input skipping logic duplicated across Correlation |
| 172 | // and its children accumulators. |
| 173 | // This could be simplified by splitting up input filtering and |
| 174 | // calculation logic in children accumulators, and calling only |
| 175 | // calculation part from Correlation |
| 176 | let values = if values[0].null_count() != 0 || values[1].null_count() != 0 { |
| 177 | let mask = and(&is_not_null(&values[0])?, &is_not_null(&values[1])?)?; |
| 178 | let values1 = filter(&values[0], &mask)?; |
| 179 | let values2 = filter(&values[1], &mask)?; |
| 180 | |
| 181 | vec![values1, values2] |
| 182 | } else { |
| 183 | values.to_vec() |
| 184 | }; |
| 185 | |
| 186 | self.covar.update_batch(&values)?; |
| 187 | self.stddev1.update_batch(&values[0..1])?; |
| 188 | self.stddev2.update_batch(&values[1..2])?; |
| 189 | Ok(()) |
| 190 | } |
| 191 | |
| 192 | fn evaluate(&mut self) -> Result<ScalarValue> { |
| 193 | let covar = self.covar.evaluate()?; |
nothing calls this directly
no test coverage detected