CLAUDE.md updated

This commit is contained in:
jiri committed 2026-10-30 22:16:00 +01:00
1 parent 648c8d1061
commit a79e90d447
1 file changed
+31 -4
+31 -4
View File
@@ -25,7 +25,7 @@ decisions and plans agreed with the author, so that they survive a fresh clone.
`make clean; make -j 8 CBLASOPT=-DNONCBLAS CBLASLIB=`. `make clean; make -j 8 CBLASOPT=-DNONCBLAS CBLASLIB=`.
- laerror() runs a shell (whoami, hostname) each time: loops raising thousands of laerrors are very slow. - laerror() runs a shell (whoami, hostname) each time: loops raising thousands of laerrors are very slow.
- The shell is tcsh (`^!` in double quotes is history expansion; use bash -c or python for scripts). - The shell is tcsh (`^!` in double quotes is history expansion; use bash -c or python for scripts).
- Manual: doc/manual.tex (LaTeX, 17 chapters, macros in doc/lamacros.tex: \code, \header, \lafunc in - Manual: doc/manual.tex (LaTeX, 19 chapters, macros in doc/lamacros.tex: \code, \header, \lafunc in
lareference, \latodo = yellow question box, \lawarning). Build with pdflatex three times (into a scratch lareference, \latodo = yellow question box, \lawarning). Build with pdflatex three times (into a scratch
directory with -output-directory), require 0 log lines starting with "!", copy manual.pdf into doc/. directory with -output-directory), require 0 log lines starting with "!", copy manual.pdf into doc/.
@@ -68,6 +68,17 @@ decisions and plans agreed with the author, so that they survive a fresh clone.
SparseSMat::gemm computes A^T B (A^\dagger B with 'c'); otimes_sparse = M + M^\dagger incl. doubled diagonal. SparseSMat::gemm computes A^T B (A^\dagger B with 'c'); otimes_sparse = M + M^\dagger incl. doubled diagonal.
- SparseMat with the symmetric flag is complex symmetric (no conjugation); its permuteme_* members use - SparseMat with the symmetric flag is complex symmetric (no conjugation); its permuteme_* members use
0-based matrix indices, NRPerm/CyclePerm are always 1-based. 0-based matrix indices, NRPerm/CyclePerm are always 1-based.
- Permutations: applypermutation(p,v,inverse) uses the same convention as NRVec::permuted (r_{p(i)}=v_i
without inverse); generate_all parity_select +1 = even, -1 = odd permutations; list_all weights = parity,
list_all_lex weights = 1. NRPerm::testik is kept inside #if 0 as the author's reminder.
- ContFrac::canonicalize works on the terms (no p/q, fixed-size integer T) and requires a_1..a_n of the
same sign (documented limitation, author's choice). Rational keeps the denominator positive.
- bitvector: set/reset/flip/assign/setblock/block &=,|=,^= are element-level (no copyonwrite, DEBUG count
check); < and > compare numerically (bit i weight 2^i); <<= enlarges the vector.
- Vec3/Mat3/Quaternion: euler2normquat is consistent with euler2rotmat for all 12 Euler types and
normquat2euler is its inverse; "zyx", normquat2eulerzyx, eulerzyx2normquat must stay unchanged (used by the
author's avionics code in arm_stm32f37). Mat3::svd(...,true) gives det U = det V = +1. randomize exists for
float and double. Embedded builds are float only (QUAT_NO_DOUBLE).
- Tensor(const NRSMat&) uses symmetry 2 (hermitian) for complex, 1 for real. - Tensor(const NRSMat&) uses symmetry 2 (hermitian) for complex, 1 for real.
- a-X and a/X (scalar minus/divided by object) are deleted on purpose; a single integer constructor is - a-X and a/X (scalar minus/divided by object) are deleted on purpose; a single integer constructor is
forbidden for NRMat, NRMat_from1, Mat3 (Mat3(double) works). forbidden for NRMat, NRMat_from1, Mat3 (Mat3(double) works).
@@ -75,6 +86,8 @@ decisions and plans agreed with the author, so that they survive a fresh clone.
- The NRMat offset view constructor is a feature. MATPTR is kept (rarely used). CSRMat is unfinished and - The NRMat offset view constructor is a feature. MATPTR is kept (rarely used). CSRMat is unfinished and
documented as unsupported, but kept. Strassen is experimental. CUDA (CUDALA) is deferred/experimental documented as unsupported, but kept. Strassen is experimental. CUDA (CUDALA) is deferred/experimental
until the author has NVIDIA RTX hardware (known CUDA issues collected in suspected_bugs.md F10). until the author has NVIDIA RTX hardware (known CUDA issues collected in suspected_bugs.md F10).
- The regression module (reg.*, regsurf.*) is experimental, not much tested in practice (remarked in the manual);
its NEA oscillator strength f=dE_min/dE is a placeholder for the true one.
## Planned (only when the author asks) ## Planned (only when the author asks)
- float version: float and complex<float> must ALWAYS use BLAS/LAPACK (s*/c* routines, noncblas wrappers) - float version: float and complex<float> must ALWAYS use BLAS/LAPACK (s*/c* routines, noncblas wrappers)
@@ -94,9 +107,23 @@ decisions and plans agreed with the author, so that they survive a fresh clone.
has a test in bugtests/<core|misc|tensor|reg|util|iterative>/<id>.cc (build.sh per directory). has a test in bugtests/<core|misc|tensor|reg|util|iterative>/<id>.cc (build.sh per directory).
- doc_questions.md: documentation questions with the author's answers. - doc_questions.md: documentation questions with the author's answers.
- instructions, answers, answers2, answers3, optimize_discussion*.md: optimizer design discussion history. - instructions, answers, answers2, answers3, optimize_discussion*.md: optimizer design discussion history.
- Bug fixing goes file by file. Done (2026-10-27): nonclass, vec, mat, smat, sparsemat, sparsesmat, - Bug fixing goes file by file. Done (2026-10-27/28): nonclass, vec, mat, smat, sparsemat, sparsesmat,
tensor. Next: fourindex.h (C10, C12, F8), then permutation, polynomial/contfrac, small classes tensor, fourindex, permutation, polynomial/contfrac, small classes (vecmat3, quaternion, bitvector),
(vecmat3, quaternion, bitvector), regression (D1-D16), iterative (A26-A30), misc, remaining doc questions. regression D1-D16, iterative A26-A30 + A38 (2026-10-29), misc C31, C38-C42, B4 (2026-10-30): all bugs closed;
all doc questions answered (2026-10-30), the manual has no open question boxes.
- configure.ac and Makefile.am were changed 2026-10-30 (--enable-fortran64int, TESTS = testoptimize, targets manual/doc,
doxygen, all-local builds both if pdflatex/doxygen found; MANUAL_TEX lists the .tex files - add new chapters there): run autoreconf.
- matexp.h: exp()/sincos() default horner=false (polynom, faster for dense); use horner=true for sparse matrices.
- AuxStorage temporaries go to $TMPDIR (else cwd) and are unlinked at once; AuxStorage and DIIS are not copyable.
- reg.cc/regsurf.cc cache raw pointers into their NRVec/NRMat members (set in Init): never reallocate those
members (no |=, resize, assignment of a new object); copy in place with storesubvector(0,...).
## User's application files (do not modify, only check that library changes do not break them) ## User's application files (do not modify, only check that library changes do not break them)
- quantcomp.h (uses SparseSMat via gemv_n and the obsolete QCholesky), fcidumpcheck.cc. - quantcomp.h (uses SparseSMat via gemv_n and the obsolete QCholesky), fcidumpcheck.cc.
- arm_stm32f37/ (read-only): the author's STM32 embedded project; math/ links to vecmat3.*, quaternion.*,
simple.* of this library, built with arm-none-eabi-g++ and -DQUAT_NO_DOUBLE -DNO_NUMERIC_LIMITS
-DQUAT_NO_RANDOM -DAVOID_STDSTREAM -DAVOID_LA: changes to these files must keep compiling there.
- gelfand/ (read-only): the author's quantum chemistry programs using the library heavily (fourindex_dense
T2ijab_aces etc., Tensor, SparseSMat); check there how library features are used before changing semantics.
Observations about gelfand (possible bugs there, effects of library fixes, how to check) are kept in
readme.gelfand in the repository root; add new ones there.