JuliaSIMD / JuliaSIMD/LoopVectorization.jl

@turbo with passmissing?

Abierto
#470 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Julia
Estrellas
789
Forks
73
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I've been using `FastBroadcast` and `@turbo` to speed up broadcasting operations in DataFrames. However, missing values are quite common when you work with a DataFrame, and `@turbo` throws an error in that case.

Is it possible to have something similar to `passmissing` for `@turbo`? This would be consistent with Base broadcast and as FastBroadcast works, which passes missing values when you broadcast.

```julia
using LoopVectorization, FastBroadcast

df = DataFrame(a = [1,missing,3])

@.. df.a .* df.a # this works
@turbo df.a .* df.a # this throws error
```

The error is:
```julia
ERROR: MethodError: no method matching vmaterialize!(::Vector{Union{Missing, Int64}},
::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Nothing, typeof(*),
Tuple{Vector{Union{Missing, Int64}}, Vector{Union{Missing, Int64}}}},
::Val{:Main}, ::Val{(true, 0, 0, 0, true, 0, 32, 15, 64, 0x0000000000000001, 1, true)}, ::Val{((true,), (true,))})
```

The problem persists if you create a view dropping missings, since the vector is still Union{Missing,T} and is not allowed.

Many thanks!!! Great package!!!

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comience con la ruta de broadcast de @turbo y el MethodError de vmaterialize! informado, utilizando como reproducción el ejemplo de Julia con un Vector{Union{Missing, Int64}}. Determine cómo debería funcionar un comportamiento similar a passmissing para @turbo y, a continuación, verifique que el ejemplo propaga los valores missing en lugar de lanzar una excepción, preservando al mismo tiempo el comportamiento existente de broadcast.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
julia
Área
performance
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.