I’m implementing AD in a code that makes use of types built upon SLArray and SArray, and am trying to understand the best way toward converting things so that the code plays well with Enzyme.
From my understanding, to work with Enzyme, 1) all arrays and custom data types must be mutable, and 2) functions must mutate the arrays in-place and not return them. Is this correct?
If so, then my my naive strategy would be to replace SArray with MArray and to replace SLArray with LArray. Does this seem like a good route?
If this thinking is correct, then I have some general questions. Is there an unavoidable performance trade-off between using SArray versus MArray in order to use Enzyme? Also, I noticed in LabelledArrays.jl that SLArray is based on SArray but that LArray is not based on MArray as I might expect. Is this the intended end state, or is it just because no one has implemented it yet? Maybe I’m misunderstanding this.