finiterect-constants-driving always output the actual ccd_size
[qpms.git] / TODO.md
blobd324c974e3e31ea4b785e9cb1ae21b483ad7d450
1 TODO list before 1.0 release
2 ============================
4 - Tests!
5 - Docs!
6 - Cross section calculations. (Done in some Python scripts.)
7 - Field calculations. (Partly done, needs more testing.)
8   * Also test periodic vs. nonperiodic consistence (big finite lattice + absorbing medium vs. infinite lattice + absorbing medium).
9 - Complex frequencies, n's, k's. (Mostly done.)
10 - Transforming point (meta)generators.
11 - Check whether moble's quaternions and my 
12   quaternions give the same results in tmatrices.py
13 - Ewald summations of all types of lattices (dimensionality-wise).
14 - Split lattices.h into separate point generator and lattice vector manipulation parts.
15   * Maybe move something from the .h to .c file.
16 - Check exact normalisation convention of scuff-tmatrix output.
17 - Check whether the Condon-Shortley phase affects the form of Wigner matrices.
18 - The xflip, yflip and possible i-factor problem.
19 - General 3D point group symmetries.
20   * Instead the current hard-coded limited set.
21   * The generation, finding subgroups etc. should be "easy" with
22     quaternions and stuff, as the  set is quite limited, 
23     see [Wikipedia](https://en.wikipedia.org/wiki/Point_groups_in_three_dimensions).
24   * Not sure about the representations, though.
25   * As a description of a T-matrix / particle metadata.
26 - Nice CLI for all general enough utilities.
27 - Remove legacy code.
28 - Split `qpms_c.pyx`.
29 - Reduce compiler warnings.
30 - Serialisation (saving, loading) of `ScatteringSystem` and other structures.
31 - Python exceptions instead of hard crashes in the C library where possible.
32 - Scatsystem init sometimes fail due to rounding errors and hardcoded absolute tolerance 
33   in the `qpms_tmatrix_isclose()` call.
34 - Prefix all identifiers. Maybe think about a different prefix than qpms?
35 - Consistent indentation and style overall.
36 - Rewrite the parallelized translation matrix, mode problem matrix generators
37   in a way that reuses as much code as possible without copypasting
39 Nice but less important features
40 --------------------------------
42 - Static, thread-safe caches of constant coefficients + API without the current "calculators".
45 Optimisations
46 -------------
48 - Leaving out the irrelevant elements if a "rectangular" block of the translations matrix is needed.
49 - Ewald sums with "non-parallel" shifts (are about 20 times slower than the purely parallel ones).
50 - Reusing intermediate results (profiling needed)
51   * Bessel, Legendre functions (see also branch `finite_lattice_speedup`)
52   * Lattice points (sorting and scaling)
53   * Γ/Δ functions (for periodic lattices)
54 - More parallelisation.
55 - Possibly pre-calculation of the (precise) coefficients in Bessel and Legendre functions (using gmp)
56 - Asymptotic approximations of the Bessel functions for far fields.