0.5.0ΒΆ
This is probably the largest revision made to gristmill ever. Most notably, the summation optimization algorithm is completely rewritten. This algorithms is based on the idea in the Bron-Kerbosch algorithm for max clique problem, and it finally fills the last remaining gap between the automatically optimized result with best optimization carried by human. The full algorithm can be slow. However, options exist to fine-tune the balance between the time of optimization and the quality of the result. Quite fortunately, for CCSD equations, the greedy algorithm actually gives the same as the full optimization. It is likely that generally good results can be given for CC-style theories.
Also heavily reworked is the handling of costs and sizes internal to the code. Discernible effect on users might be better handling of concrete numeric sizes, either for ranges with sizes directly given by non-symbolic numbers or when all the symbols are substituted by numbers for optimization. This will make the code optimize the actual FLOP cost directly rather than the asymptotic cost. This will also make the code run significantly faster due to the avoidance of the complex polynomial arithmetic.
Another revision is that now the code can handle nonlinear factors like \((t_{ij})^2\). Also added is the capability to disable any given heuristic of optimization. Bug fixed in this release include,
- Non-optimal evaluation will no longer be wrongly picked for optimization of a single contraction.
- Inputs with neither summation nor external indices now will not crash the program.
- Tensor definitions with external indices not actually used in its content will no longer have incorrect result.
- Factors involving only external indices without any involvement of summed indices can now be treated.