> Am I misunderstanding the purpose of your ArrayObj type? It seems to me your > implementation of `macro indexArray*(x: ArrayObj{call}, y: ArrayIndex): > untyped` is little inflexible. After all, not every function returning an > ArrayObj will be just doing element-wise calculations (or should it?)...
You are absolutely correct. The current definition of `indexArray` in the repository is incomplete. You can find an improved one at > [https://github.com/jcosborn/qex/blob/devel/src/new/fieldProxy.nim#L100](https://github.com/jcosborn/qex/blob/devel/src/new/fieldProxy.nim#L100) Your suggestion of using a macro to annotate procs and modify a global compile time list of element-wise calculations is a good option, too. Perhaps that is a nice option for users to define their own element-wise operations. I will consider this. (J's rank system is in the back of my head, but I will not go down that path anytime soon.) The complexity of `shift` goes up easily with MPI and vectorization. In QEX, we have something similar, which is probably the most complicated piece in the code base.