TODO:
    Refactor:
        ☐ Means and diagonal variances 1D representation @critical
        ☐ Let PseudoObs take in Obs for consistency
        ☐ Periodic GP

    Bugs:
        ☐ MOK: check that it contains the fdd
        ☐ Noisy mixture posterior is bugged?

    README:
        ☐ Additive pseudo-point example

    Features:
        ☐ Conditioning for normals
        ☐ Approximately sample function
        ☐ `Normal.from_tensor`

    MO:
        ☐ `@`
        ☐ `__len__` to get length: in `algebra`.
        ☐ AbstractFDD and IndexedFDD (if 0, then unwraps) (?)

--- ✄ -----------------------

Features:
    ☐ Model checking: ratio test, Q-Q plots, residuals test.

Multi Output Support:
    ☐ ICM, LMM, OILMM via kernel matrix optimisation

Profiling:
    ☐ Single sample 100-d normal maximum 20% slower.

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
Archive:
 ✓ Do not freely construct variance in `Normal.dtype` @high @done (22-04-16 11:44) @project(TODO / Bugs)
  Throw exception instead?
 ✓ `Normal.diagonalise = Normal(dist.mean, Diagonal(dist.var_diag))` @done (22-04-15 18:37) @project(TODO / Features)
  Implements `sample_independent` and `logpdf_independent`
 ✓ FITC approximation @done (22-03-30 18:11) @project(Features)
 ✓ DTC approximation @done (22-03-30 18:11) @project(Features)
 x (O)LMM @cancelled (22-03-30 18:11) @project(Features / Multi Output Support)
 ✓ Remove uprank: use B.uprank @done (21-11-30 19:26) @project(TODO / Refactor / Misc)
 ✓ Sparse -> Pseudo @done (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 ✓ Remove duplication in handling of boxing @done (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 ✓ B.epsilon @done (21-05-17 18:16) @project(TODO / README)
 x Throw warning at fallback for elwise @cancelled (21-05-17 18:16) @project(TODO / Refactor / Misc)
 x Test WeightedUnique @high @cancelled (21-05-17 18:16) @project(TODO)
 x RowVecs @cancelled (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 x FixedDelta -> make use of traits @cancelled (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 x DerivativeKernel for Torch, AutoGrad, and Jax @cancelled (21-05-17 18:16) @project(TODO / Features)
 x ColVecs @cancelled (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 x Anchestral sampling @cancelled (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 x Add eval @low @cancelled (21-05-17 18:16) @project(TODO / Refactor / Stheno 1.0)
 ✓ Update manual, e.g. kernels @done (20-11-30 19:26) @project(TODO / README)
 ✓ Note: accumulation to default graph can cause memory problems @critical @done (20-11-30 19:26) @project(TODO / README)
 ✓ Note that kernel is given first everywhere @done (20-11-30 19:26) @project(TODO / README)
 ✓ Refactor tests to use PyTest: remove raises, fixtures, and parametrisation. @done (20-11-30 19:25) @project(TODO)
 ✓ Refactor tests @done (20-11-30 19:25) @project(TODO)
 ✓ GP composition framework @done (20-11-30 19:25) @project(TODO / Refactor / Stheno 1.0)
 ✓ Fixtures for kernel inputs @done (20-11-30 19:25) @project(TODO)
 ✓ Fix coverage @done (20-11-30 19:25) @project(TODO)
 ✓ Construct GPs and Normals both ways around @done (20-11-30 19:25) @project(TODO / Refactor / Stheno 1.0)
 ✓ Clean printing @done (20-11-30 19:25) @project(TODO)
 x Use `mul_matched` for approximate multiplication @cancelled (20-11-30 19:25) @project(TODO / Refactor / Stheno 1.0)
 ✓ Remove clutter @done (19-12-29 16:22) @project(TODO)
 ✓ Kernel properties except for `stationary` @done (19-12-29 16:22) @project(TODO)
 ✓ Normal1D @done (19-12-29 16:18) @project(TODO)
 ✓ EIS @done (19-12-29 16:18) @project(TODO)
 ✓ Use ABC with six @done (19-12-29 16:17) @project(TODO / Refactor / Misc)
 ✓ Do not automatically load TensorFlow at startup @done (19-12-29 16:17) @project(TODO / Refactor / Misc)
 ✓ Remove exceptions for torch 0-dim behaviour @done (19-12-29 16:16) @project(TODO / Refactor / Misc)
 ✓ Fix `test_delta_evaluations` for `Unique` inputs @done (19-12-29 16:10) @project(TODO)
 ✓ Remove diff_approx @done (19-12-29 16:06) @project(TODO / Refactor / Stheno 1.0)
 ✓ Clean test random @done (19-12-29 16:05) @project(TODO)
 ✓ Remove Python 2 compat remains @done (19-12-29 16:04) @project(TODO)
 ✓ Minimise B.dense calls @done (19-12-29 16:02) @project(TODO)
 ✓ Ensure that cov. matrices are AMs with dispatch @done (19-12-29 16:02) @project(TODO)
 ✓ StruMat @done (19-12-29 15:29) @project(TODO / Refactor / Stheno 1.0 / Move to external packages)
 ✓ Rings @done (19-12-29 15:29) @project(TODO / Refactor / Stheno 1.0 / Move to external packages)
 ✓ Kronecker product, and sum thereof @done (19-12-27 17:42) @project(Structured Matrices)
 x Toeplitz @cancelled (19-12-27 17:42) @project(Structured Matrices)
 x Block matrix @cancelled (19-12-27 17:42) @project(Structured Matrices)
 ✓ Fix examples to use new WBML and LAB @done (19-11-19 16:39) @project(TODO / README)
 ✓ Rename tf->tensorflow, but still allow tf @critical @done (19-07-10 22:28) @project(TODO)
 ✓ LogKernel @done (19-05-02 16:53) @project(TODO / Test)
 ✓ Kernel powers @done (19-05-02 16:53) @project(TODO / Test)
 ✓ Multi-argument sparse conditioning @done (18-10-14 16:51) @project(Features)
 ✓ Simply signatures in `field.py`. @done (18-07-04 16:52) @project(Refactor)
 ✓ Efficient multi-output kernels: low-rank SPDs returned by multi-output kernels @done (18-06-26 15:39) @project(Features)
 ✓ Write documentation. @started @done (18-06-26 15:38) @project(Documentation)
 ✓ Sparse approximations @done (18-06-26 15:38) @project(Features)
 ✓ Improve docstrings. @done (18-06-26 15:38) @project(Documentation)
 ✓ Define terminology in the docstrings: design matrix, shape, etc. @done (18-06-26 15:38) @project(Documentation)
 ✓ Refactor to type union for Graph.condition once type unions are fixed. @done (18-06-19 02:10) @project(Refactor)
 ✓ Efficient diagonal computation: pairwise and element-wise @started @done (18-06-15 21:39) @project(Features)
 ✓ Write examples. @started @done (18-06-13 23:40) @project(Documentation)
 ✓ LMM/ICM @started @done (18-06-13 23:40) @project(Examples)
 ✓ What is going on with `[np.random.randn(1,1).__array_interface__['data'][0] for _ in range(2)]`? @done (18-06-11 13:49)
 ✓ Caching of computation in kernels @done (18-06-04 03:43) @project(Optimisations)
 ✓ Implement * and + for SPDs, and use these in the arithmetic of Normals. @done (18-06-02 17:49) @project(Optimisations)
 ✓ Write tests. @started @done (18-05-31 16:14) @project(Documentation / Other)
 ✓ Regression @done (18-05-31 16:13) @project(Features)
 ✓ Posterior decomposition @done (18-05-31 16:13) @project(Examples)
 ✓ Posterior decomposition (additive) @done (18-05-31 16:13) @project(Features)
 ✓ Make all compatible with all the backends. @done (18-05-31 16:13) @project(Examples)
 ✓ Extended input space. @done (18-05-31 16:13) @project(Features)
 ✓ Simple posterior decomposition. @started @done (18-05-31 15:41) @project(Current TODO)
 ✓ Extended input space GP regression. @started @done (18-05-31 12:02) @project(Current TODO)
 ✓ Fix examples. @done (18-05-30 20:27) @project(Current TODO)
 ✓ Arithmetic for GPs. @done (18-05-30 20:13) @project(Current TODO)
 ✓ Arithmetic for means. @done (18-05-30 19:34) @project(Current TODO)
 ✓ Disable caching in Plum? @done (18-05-30 18:16) @project(Current TODO)
 ✓ Implement sum and product as Kernels @high @done (18-05-30 18:15) @project(Current TODO / Fix kernels)
 ✓ Set up Sphinx. @done (18-03-29 17:10) @project(Documentation)
 ✓ Rename repo. @done (18-03-29 17:10) @project(Documentation / Other)
 ✓ Package. @done (18-03-29 17:10) @project(Documentation / Other)
 ✓ Name? gptools is already taken. @done (17-07-31 12:48) @project(Documentation / Other)
 ✓ Remove noise option from GP. @done (17-06-29 22:13) @project(Features)
 ✓ Optimise import statements for cleanness: `from core import np` to import the proxy. @done (17-06-29 14:58) @project(Features)
 ✓ Write init files. @done (17-06-28 00:12) @project(Features)
 ✓ More elegant TensorFlow import. @done (17-06-28 00:12) @project(Features)
 ✓ Learning @started(17-06-26 18:42) @done (17-06-28 00:12) @lasted(1 day, 5:30) @project(Examples)
 ✓ Explicitly define interfaces for modules. @done (17-06-28 00:12) @project(Features)
 ✓ Kernels @done (17-06-26 18:41) @project(Examples)
 ✓ Periodic kernel. @done (17-06-26 15:25) @project(Features)
