JuliaDiff / JuliaDiff/ChainRulesCore.jl

InplacableThunk and subspace types

Open
#411 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

  • #393 by @mcabbott — closed without merging
inplace accumulation
Dominant language
Julia
Stars
267
Forks
66
PR merge metrics
No merged PRs in 30d

Description

Using InplacableThunk does not play nice with
Some special cases like if the inplace part is just .+= are easy enough to do with ProjectTo see #inplace
See https://github.com/JuliaDiff/ChainRulesCore.jl/issues/274

But for something like:

dA = InplaceableThunk(
    X̄ -> mul!(X̄, Ȳ, B', true, true),
    @thunk(project_A(Ȳ * B')),
)

it is not so easy.
Since it may try and set a structural zero in the mul!.
For now we are just restricting use of InplacableThunk to places wehre it is known safe,
and removing them when issues occur.

One approach is in
https://github.com/JuliaDiff/ChainRulesCore.jl/pull/393
And some notes are there

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the notes in closed PR #393 and the related issue #274, then inspect the InplaceableThunk, ProjectTo, and mul! cases described here. Determine how subspace types and structural zeros should be handled, and document a clear safe-use rule or implementation path for the problematic example.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
backend-api-design
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.