CALCULATE-INDEX (AFFI SUBSCRIPTS)
Calculate the index of a given vector of subscripts.
CHECK-CONFORMABILITY (AFFI1 AFFI2 &OPTIONAL (CONFORMABILITY DROPPED))
Check that two affine indexes are conformable. There are three types of conformability: :strict requires that the two domains are exactly the same, :dropped checks if they are the same when we drop dimensions of size 1, and :size just checks the size of the two ranges.
DIAGONAL (AFFI &OPTIONAL (OFFSET 0) (INDICES '(0 1)))
Select a subarray where the two indices are equal or differ by the offset, e.g. the diagonal affi for the matrix. The offset specifies sub- (offset<0) or super- (offset>0) diagonals.
DROP (AFFI &OPTIONAL (WHICH T))
Drop the dimensions from the domain which have size 1, provided that their index is in `which', or `which' is t. Return new affine index. If `which' is nil, no dimension is dropped.
EXTRUDE (AFFI INDEX NEW-DIMENSION)
Create a new AFFI that makes the grid look as if it has an additional dimension, with each element replicated along that dimension.
Return the coefficients in an affine index (copy is made).
Return the constant in an affine index.
Return the domain in an affine index (copy is made).
Setup a _column major_ affine mapping using dimensions.
MAKE-WALKER (AFFI &OPTIONAL INITIAL-SUBSCRIPTS)
Create a walker for an affine index that starts at the given subscripts (zeroes by default). Return two functions: one that returns the current index and increments the walker, the other just returns the index without any side effects.
PERMUTE (AFFI PERMUTATION)
Permute the subscripts of an affine index using the given list.
Return the smallest and the largest integer in the range of an affine index.
Return the rank of an affine index.
Return the size (ie number of integers in the range) of an affine index. Note that size is not necessarily the difference of the endpoints of the range, as the range may be non-contiguous.
STRIDE (AFFI STRIDE)
Create a new AFFI that makes the grid look as if is been reduced by taking only every stride-th element.
SUBRANGE (AFFI DIMS &OPTIONAL DIM-POSITIONS START)
Create an affi selecting a subrange from the given affi corresponding to the dimensions dims in the positions dim-positions.
TRANSPOSE (AFFI &OPTIONAL (INDICES '(0 1)))
Transpose any pair of indices.
APPLY-TRANSFORMERS (AFFI &REST TRANSFORMERS)
Create a new affi with the transformers applied in succession.
Copy a sequence into a vector of fixnums.
INSERT-AT (ELEM ORG-LIST POS)
Insert into the list at the indicated position.
MAKE-AFFI-INT (DIMENSIONS COEFF &OPTIONAL (OFFSET 0))
Make an affi instance with the contents not set, except for dimensions.
Create a vector with element type fixnum.
MAP-AFFI (AFFI-IN AFFI-OUT)
A function mapping linearized index between affis.
PARSE-RANGE (RANGE D)
Parse a range specification, returning two values: the starting point, and the length of the range, whose sign determines the direction. [0,d) is the domain. A range specification is either and atom or a list of two integers. Negative integers are interpreted as counted backwards from the right edge of the domain, ie i < 0 denotes element d+i. If range is an atom, then it can be :all or :rev, denoting the entire range in regular and reversed order, respectively, or refer to a single element. A two-element list denotes an interval, inclusive. If the first one is larger then the second, reverse ordering is used.
REMOVE-POSITION (SEQUENCE POSITION &OPTIONAL (RESULT-TYPE 'LIST))
Remove the element at position.
Find the coeff from the dimensions.
SUBRANGE-INT (AFFI RANGE)
Constrain an affine map to a subrange, which is given as a list of ranges. For details, see parse-range. Return the new affine index.
DELINEARIZE-INDEX (AFFI LINEAR-INDEX)
MAKE-AFFI (OBJECT &OPTIONAL OFFSET)
Create an affine mapping conforming to the given object.
Output the indices generated by a walker. For testing purposes.