Blocks

Every space is divided into blocks, which are used to indicate, for example, polynomial degree. The prototypical examples have trivial blocks, for example Taylor() and Chebyshev() have blocks of length 1, as each coefficient corresponds to a higher polynomial degree.

Usually, non-trivial block lengths arise from modifications of the spaces with trivial blocks. For example, Chebyshev(0..1) ∪ Chebyshev(2..3) has blocks of length 2, as the blocks of each component space are grouped together to form a single block. Another important example is Chebyshev() ⊗ Chebyshev(), the tensor product space. There are d polynomials of degree d, thus the blocks of a tensor product space grow: that is, the first block has length 1, then 2, and so on.

blocklengths(::Space) gives an iterator that encodes the lengths of the blocks. For trivial blocks, this will return Ones{Int}(∞). For Chebyshev(0..1) ∪ Chebyshev(2..3) it returns Fill(2,∞). For Chebyshev() ⊗ Chebyshev() it returns InfiniteArrays.OneToInf().