TODO 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. (newra) -*- mode: org; -*-
  2. Help: [C-uc .] insert timestamp [C-cc] flip checkbox [C-uucc] partial flip checkbox [C-ct] flip TODO.
  3. * TODO bugs [9/10]
  4. * [X] (call-with-input-string "#3()" read) vs (call-with-input-string "#%3()" read)
  5. * [X] reader loses type when reading rank-0 arrays
  6. * [X] ra-equal? errors out with mismatched shapes
  7. * [X] zero lengths break ra-format
  8. * [X] (ra-dimensions (ra-iota))
  9. * [X] (ra-reshape (ra-iota) ...) doesn't work
  10. * [X] (ra-from (list->ra 2 '((a b c) (x y z))) 1 1) => #%0(y) contradicts doc
  11. - Resolved in 792491e163794d2788b049b071d6cd0740d59c92 <2023-02-16 Thu 09:33>
  12. * [X] ra-slice-for-each shouldn't return anything
  13. - Fixed with explicit (values) <2023-02-16 Thu 09:42>
  14. * [X] define-inlinable-case doesn't inline case-lambda forms
  15. - Fixed with a patch to guile:module/language/tree-il/peval (3b47f87618047ebb8812788c64a44877a4f2e0dd)
  16. * [ ] docstrings don't work for define-inlinable-case
  17. * TODO documentation [1/2]
  18. * [X] actually explain rank extension / prefix matching in the manual
  19. * [ ] manual lacks a hands on intro 'first (import (newra)) then etc'
  20. * TODO compatibility with existing Guile arrays [8/9]
  21. * [X] ra-slice-for-each ra-map! ra-for-each ra-cell ra-ref ra-set!
  22. * [X] ra-transpose ra-reverse
  23. * [X] make-ra make-ra-shared ra->list list->ra list->typed-ra
  24. * [X] ra-iota ra-i
  25. * [X] ra-index-map!
  26. * [X] ra-shape ra-dimensions
  27. * [X] ra-root ra-offset
  28. * [X] ra-equal?
  29. * [ ] root vectors are equivalent to rank-1 newra objects
  30. * [ ] return roots for trivial rank-1 views on roots
  31. * TODO whole array functions [9/15]
  32. * [X] ra-fold
  33. * [X] ra-any ra-every
  34. * [X] raw prefix matching
  35. * [X] generalized prefix matching
  36. * [-] high level slicing [3/4]
  37. - [X] ra-from
  38. - [X] ra-amend!
  39. - [X] (dots)
  40. - [ ] axis insertion (?)
  41. * [X] ra-ravel
  42. - [X] (ra-ravel a [n])
  43. - [X] (ra-order-c? a [n [org]])
  44. - [X] (ra-ravel a [n [org]])
  45. * [X] ra-tile [2/2]
  46. - [X] accept arbitrary axis
  47. - [X] can produce dead axes
  48. * [X] ra-cat (ra-cat, ra-cats)
  49. - [X] implementation
  50. - [X] tests
  51. - [X] tests with non-zero base indices
  52. * [X] ra-reshape [3/3]
  53. - [X] basic function
  54. - [X] accept arbitrary axis
  55. - [X] placeholder
  56. * [X] ra-clip
  57. * [ ] ra-grade
  58. * [-] ra-rotate [1/2]
  59. - [X] ra-rotate!
  60. - [ ] ra-rotate that isn't just (ra-rotate! n (ra-copy x))
  61. * [ ] as-ra
  62. * [ ] ra-filter, ra-select, etc.
  63. * [ ] ra-affine map that explicitly takes an [M×(N+1)] matrix
  64. * TODO misc array manipulation [0/1]
  65. * [ ] mapping of indices (beyond ra-reshape/ra-from). Maybe just explain in manual?
  66. * TODO fundamental features [3/7]
  67. * [X] unsized index vectors
  68. * [X] tensor indices
  69. * [X] broadcasting
  70. * [ ] reader handles quasiquote
  71. * [ ] ways to control iteration (in order, dim loop order, direction, etc.)
  72. * [ ] a solution for (ra-amend! dst (RA-MAP OP (ra-from dst i ...)) i ...). Lenses?
  73. * [ ] separate somehow the rank matching cases that can be done in parallel from those that
  74. cannot, e.g. using lower rank dest arg to perform reductions.
  75. * TODO ra the array language [/]
  76. * [ ] drag-along facility / lazy ops
  77. - [ ] verbs
  78. - [ ] rank conjunction
  79. - [ ] each (cf array-curry in srfi-179 or the old Guile array-enclose).
  80. * [ ] output types
  81. * TODO performance [2/4]
  82. * [X] u8 ra-fill! vs native (see bench.scm) ok in 3.0.8 with partial bytevector-fill!
  83. * [X] f64 ra-copy! vs native (see bench.scm)
  84. * [ ] ra-ref / ra-set! with 1 or 2 args vs built-in array-ref / array-set!
  85. * [ ] ra->list / list->ra vs built-in array->list / list->array. Maybe those can be reused?
  86. * TODO friendlier undefined sizes [2/6]
  87. * [X] printing of 'd typed arrays
  88. * [X] printing with dead axes
  89. * [ ] reading of 'd typed arrays
  90. * [ ] printing with infinite axes
  91. * [ ] reading of arrays with inf axes
  92. * [ ] reading of arrays with dead axes
  93. * TODO quality of life [2/15]
  94. * [X] make (ra ...) work with generalized slices just like (ra-from ...).
  95. * [ ] make (set! (ra ...) o) work with slices (now) or generalized slices (eventually) just like (ra ...).
  96. * [X] rank-1 ops in the unrolled section (e.g. bytevector-copy!, bytevector-fill!).
  97. * [ ] precompute fixed parameters of rank-1 ops (len, step).
  98. - These can be used to improve the rank-1 op choice heuristic, and also not to rely on iteration order assumption.
  99. * [ ] rank-2 ops or higher in the unrolled section (e.g. blis-dcopym!, blis-dsetm!).
  100. * [ ] rank-1 (or higher!) cases for generating functions (e.g. array->list).
  101. * [ ] the reverse of ra-singletonize, find a good name (see 'differences with numpy' in the doc).
  102. * [ ] automatic handling of scalars (e.g. (ra-map #f + (ra-iota 3) 99) works).
  103. * [ ] refactor macros
  104. * [ ] bench tracking
  105. * [ ] move struct defs to (newra types)
  106. * [ ] ra-unique-elements?
  107. * [-] pretty printer [4/6]
  108. - [X] basic ra-format
  109. - [X] print sizes in prefix
  110. - [X] CL/SRFI-163 style rank-0 (e.g. '#0 x' instead of '#0(x)').
  111. - [X] compact mode
  112. - [ ] handle unbounded axes
  113. - [ ] auto truncation
  114. * [-] an ffi to Fortran based on iso_c_binding, be able to pass arrays & scalars at least [3/6]
  115. - [X] fix rank 0
  116. - [X] fix non-zero ra-offset
  117. - [X] verify behavior of lbounds
  118. - [-] fortran-library-function [3/7]
  119. + [X] c32/c64
  120. + [X] fix arg-types format
  121. + [X] working example with intent(inout)
  122. + [ ] support intent(out) array args (need array-mutable?)
  123. + [ ] logical <-> bool (need libffi / Guile ffi support)
  124. + [ ] value, arguments, like real(C_FLOAT), value :: x
  125. + [ ] support out args, e.g. with boxes (?)
  126. - [ ] fix alignment assumptions (seems there's padding in some versions of ISO_Fortran_binding.h :-/)
  127. - [ ] modulize, test, doc, etc.
  128. * [ ] connections to other libraries
  129. - [ ] BLIS
  130. + [ ] fix unbound variable compilation warnings when (import (ffi blis)) fails.
  131. - [ ] fftw
  132. * TODO other [0/1]
  133. * [ ] review definition of (ra-untranspose a i ...). Does it make sense to allow any i < (rank a) ?
  134. * TODO packaging [1/3]
  135. * [X] Global CMakeLists.txt
  136. * [ ] Autoconf (?)
  137. * [ ] Installation
  138. * TODO replace Guile arrays [0/5]
  139. * [ ] truncated-print support
  140. * [ ] equal? support
  141. * [ ] hooks into C / libguile
  142. * [ ] compilation of literals
  143. * [ ] replace all names