`ProjectTo{SparseMatrixCSC}` can incorrectly assume `eltype` of projected value
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia in src/projection.jl alle righe 575-583 e riproduci la proiezione SparseMatrixCSC con un differenziale Unitful.Quantity e un array sparso Float64. Analizza come project_type e l’approccio mapreduce proposto gestiscono i valori proiettati ed eterogenei; il lavoro è completato quando la proiezione non genera più l’errore di dimensione segnalato, preservando al contempo il corretto comportamento dei tipi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The example below attempts to project a Unitful.Quantity differential onto a sparse array of Float64
using SparseArrays
using ChainRulesCore
using Unitful
using UnitfulChainRules # defines projection of quantities onto Floats/Complex{<:Float}
A = sprandn(5,5, 0.5)
pA = ProjectTo(A)
dx = randn((5,5)) * u"m"
pA(dx)
# Unitful error:
# ERROR: DimensionError: and m are not dimensionally compatible.
The error occurs here because we pre-allocate the nzvals vector using project_type(project.element). However, project_type doesn't take into account the value we are projecting, which, in the case of a Unitful.Quantity, can mean that project_type(ProjectTo(A)) != eltype(A).
In the case of SparseMatrixCSC, we can rewrite the projection without preallocating nzvals using mapreduce to get a type-stable pullback that doesn't use project_type. In general, would it be better to get away without project_type and write projections which infer the type based on the input types?
E- On closer inspection the mapreduce solution runs into issues if the differential isn't a homogeneous type, project_type may be a necessary solution here
- Lingua principale
- Julia
- Stelle
- 267
- Fork
- 66
- Merge medio
- 1g 1h
- PR unite (30g)
- 9
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaDiff/ChainRulesCore.jl
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 28/100
JuliaDiff/ChainRulesCore.jl#712 ·
I maintainer di solito rispondono entro 1 giorno
-
variable scope of `@thunk`Forse già presa @chengchingwen l’ha presa 619 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 32/100
JuliaDiff/ChainRulesCore.jl#684 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue Structural Tangent
Difficoltà 2/5 1-3 ore Idoneità per principianti 55/100
JuliaDiff/ChainRulesCore.jl#669 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
JuliaDiff/ChainRulesCore.jl#668 · 6 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
breaking
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
JuliaDiff/ChainRulesCore.jl#665 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaDiff/ChainRulesCore.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Sienna-Platform/InfrastructureSystems.jl#675 ·
I maintainer di solito rispondono entro 2 giorni
-
TargetEncoder reuses the first level's shrinkage factor for all levels when m > 0Forse già presa @parth-patel010 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
JuliaAI/MLJTransforms.jl#95 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
SciML/RecursiveArrayTools.jl#687 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
SciML/LinearSolve.jl#1412 ·
I maintainer di solito rispondono entro 8 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
SciML/Corleone.jl#179 ·
I maintainer di solito rispondono entro 1 giorno