Projection for `x:: AbstractRange`

Abierto
#437 1 comentario 1 reacción 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
julia

Línea de trabajo

Comienza revisando el punto de entrada ProjectTo para AbstractRange y los métodos propuestos para vectores y rangos en el issue. Determina la proyección prevista sobre rangos parametrizados por sus extremos, incluido el manejo del tipo de elemento y de los gradientes constantes, y establece pruebas para entradas vectoriales y entradas de rango sin cambios antes de considerar completado el trabajo.

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

Descripción

ProjectTo

If we want something like https://github.com/JuliaArrays/FillArrays.jl/pull/153 to project the gradient of a Fill onto a one-dimensional subspace, then I think we probably want something similar for the gradient of a range, but projecting onto a two-dimensional space, parameterised by the endpoints. Before I lose the bit of scrap paper I wrote this on, I think this would look as follows:

ProjectTo(x::AbstractRange) = ProjectTo{AbstractRange}()

function (project::ProjectTo{AbstractRange})(dx::AbstractVector)
    L = length(dx)
    μ = mean(dx)
    # δ = -sum(diff(dx))/2
    δ = sum(Base.splat(-), zip(dx, @view dx[2:end]))/2
    return LinRange(μ + δ, μ - δ, L)
end

(project::ProjectTo{AbstractRange})(dx::AbstractRange) = dx

Using LinRange allows for zero slope (e.g. for constant dx) and skips the high-precision machinery which StepRangeLen uses to hit endpoints exactly, as I don't think we're concerned about the last digit here. This isn't yet careful about element types etc.

Lenguaje dominante
Julia
Estrellas
267
Forks
66
Merge medio
1 d 1 h
PR fusionados (30 d)
9

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de JuliaDiff/ChainRulesCore.jl

Todos los issues de JuliaDiff/ChainRulesCore.jl

Issues similares

Más issues de Julia

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.