10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-12-22 12:23:31 +01:00

Removed org-mode

This commit is contained in:
Anthony Scemama 2024-06-20 15:38:37 +02:00
parent 7eba47e0a4
commit 5c0b356b6c
24 changed files with 46 additions and 1194 deletions

View File

@ -1,20 +0,0 @@
#+TITLE: Developper's instructions
* General
The developper writes org-mode files, and the OCaml files are produced
by running the ~make~ command. Then, the OCaml files are compiled
using ~dune~.
In each directory, the =README.org= file is the entry point. It
contains the script to generate the dune files, which should be
created by executing ~Ctrl-C Ctrl-C~ in the appropriate code block.
If necessary, some pure OCaml files can be added in the =lib=
directory.
* Basis
- =Basis_poly= is a polymorphic basis
- =Basis_gaussian= contains the basis and integrals
- =Gaussian.Basis= is the actual Gaussian basis

View File

@ -4,27 +4,25 @@
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
.SUFFIXES: .SUFFIXES:
DIRS=$(shell ls */README.org | sed "s|/README.org||g") .PHONY: default build install uninstall test clean
DOCS=$(patsubst %, docs/%.html, $(DIRS)) docs/index.html
.PHONY: default build install uninstall test clean doc default: build
default: doc build
docs/%.html: %/*.org %/lib/*.ml %/lib/*.mli %/test/*.ml build:
- ./bin/tangle.sh $* top/install_printers.sh > top/lib/install_printers.ml
docs/top.html: */*.org */lib/*.ml */lib/*.mli
- ./bin/tangle.sh top
doc: $(DOCS)
build: doc
dune build dune build
build-prof:
top/install_printers.sh > top/lib/install_printers.ml
dune build --workspace=dune-workspace.profile
test: test:
dune runtest -f dune runtest -f
test-prof:
dune runtest -f --workspace=dune-workspace.profile
install: install:
dune install dune install

View File

@ -33,7 +33,7 @@ How to build the project
Run `make` to compile the libraries and executables that are Run `make` to compile the libraries and executables that are
meant to be installed. meant to be installed.
``` ```
$ make -j $ make
``` ```
How to run tests How to run tests
@ -83,3 +83,11 @@ For more information on `opam pin`, please consult the opam documentation.
The advantage of the opam-based method is that other opam packages can The advantage of the opam-based method is that other opam packages can
depend on this one, and opam will recompile them automatically as depend on this one, and opam will recompile them automatically as
necessary. necessary.
Profiling
---------
The Landmarks memory profiler can be used.

View File

@ -1,94 +0,0 @@
#+TITLE: Atomic Orbitals
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Atomic basis set"
#+end_src
#+RESULTS: synopsis
: Atomic basis set
This modules contains the data structures used to characterize the
atomic basis set.
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
trexio
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.common
qcaml.particles
qcaml.gaussian
qcaml.gaussian_integrals
qcaml.operators
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
(modules_without_implementation ao_dim)
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,10 +1,7 @@
(library (library
(name ao) (name ao)
(public_name qcaml.ao) (public_name qcaml.ao)
(synopsis (synopsis "Atomic basis set")
"Atomic basis set"
)
(libraries (libraries
qcaml.common qcaml.common
qcaml.particles qcaml.particles

View File

@ -1,4 +1,3 @@
(library (library
(name test_ao) (name test_ao)
(synopsis "Test for ao library") (synopsis "Test for ao library")

View File

@ -1,95 +0,0 @@
#+TITLE: Common
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Utility functions used by all the other directories"
#+end_src
#+RESULTS: synopsis
: Utility functions used by all the other directories
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
unix
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
str
zarith
getopt
unix
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
The ~util.c~ file contains small C snippets to add missing
functionalities to OCaml, such as support for the ~popcnt~ instruction.
#+name: c-files
#+begin_src elisp
(c_names
util
)
(c_flags (:standard)
-Ofast -march=native -fPIC
)
#+end_src
** Parser
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -11,17 +11,17 @@ external gamma_float : float -> float
external popcnt : int64 -> int32 = "popcnt_bytecode" "popcnt" external popcnt : int64 -> int32 = "popcnt_bytecode" "popcnt"
[@@unboxed] [@@noalloc] [@@unboxed] [@@noalloc]
let popcnt i = (popcnt [@inlined] ) i |> Int32.to_int let[@inline] popcnt i = Int32.to_int (popcnt i)
external trailz : int64 -> int32 = "trailz_bytecode" "trailz" "int" external trailz : int64 -> int32 = "trailz_bytecode" "trailz" "int"
[@@unboxed] [@@noalloc] [@@unboxed] [@@noalloc]
let trailz i = trailz i |> Int32.to_int let[@inline] trailz i = Int32.to_int (trailz i)
external leadz : int64 -> int32 = "leadz_bytecode" "leadz" "int" external leadz : int64 -> int32 = "leadz_bytecode" "leadz" "int"
[@@unboxed] [@@noalloc] [@@unboxed] [@@noalloc]
let leadz i = leadz i |> Int32.to_int let[@inline] leadz i = Int32.to_int (leadz i)

View File

@ -8,7 +8,7 @@
(homepage "https://gitlab.com/scemama/qcaml") (homepage "https://gitlab.com/scemama/qcaml")
(documentation "https://gitlab.com/scemama/qcaml") (documentation "https://gitlab.com/scemama/qcaml")
(license "LGPL-2.1+ with OCaml linking exception") (license "LGPL-2.1-or-later")
(maintainers (maintainers
"Anthony Scemama <scemama@irsamc.ups-tlse.fr>" "Anthony Scemama <scemama@irsamc.ups-tlse.fr>"
@ -34,7 +34,7 @@ in quantum chemistry.")
zarith zarith
alcotest alcotest
domainslib domainslib
(landmarks-ppx (and :dev (>= 1.4))) ; (landmarks-ppx (and :dev (>= 1.4)))
) )
) )

14
dune-workspace.profile Normal file
View File

@ -0,0 +1,14 @@
(lang dune 2.9)
(context default)
(context
(default
(name profiling)
(instrument_with landmarks)
(env
(_ (env-vars ("OCAML_LANDMARKS" "auto")))
)
)
)

View File

@ -1,88 +0,0 @@
#+TITLE: Gaussian
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Gaussian basis sets"
#+end_src
#+RESULTS: synopsis
: Gaussian basis sets
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
(instrumentation (backend landmarks))
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.common
qcaml.particles
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,93 +0,0 @@
#+TITLE: Gaussian integrals
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Integrals on the Gaussian basis sets"
#+end_src
#+RESULTS: synopsis
: Integrals on the Gaussian basis sets
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
unix
trexio
domainslib
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.common
qcaml.linear_algebra
qcaml.gaussian
qcaml.operators
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
(modules_without_implementation matrix_on_basis)
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,87 +0,0 @@
#+TITLE: Linear Algebra
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Linear algebra utilities of QCaml libraries"
#+end_src
#+RESULTS: synopsis
: Linear algebra utilities of QCaml libraries
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.common
lacaml
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,86 +0,0 @@
#+TITLE: Molecular orbitals
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Molecular orbitals"
#+end_src
#+RESULTS: synopsis
: Parameteried operators, such as F12 and range-separation
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.simulation
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,86 +0,0 @@
#+TITLE: Operators
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Parameteried operators, such as F12 and range-separation"
#+end_src
#+RESULTS: synopsis
: Parameteried operators, such as F12 and range-separation
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.common
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,99 +0,0 @@
#+TITLE: Common
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Information relative to particles (electrons and nuclei)"
#+end_src
#+RESULTS: synopsis
: Information relative to particles (electrons and nuclei)
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
trexio
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
trexio
qcaml.common
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
(modules_without_implementation
xyz_ast
)
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
(ocamllex
(modules
nuclei_lexer
))
(ocamlyacc
(modules
xyz_parser
))
#+end_src

View File

@ -1,87 +0,0 @@
#+TITLE: Perturbation
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Perturbation theory"
#+end_src
#+RESULTS: synopsis
: Perturbation theory
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.simulation
qcaml.mo
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -6,7 +6,7 @@ QCaml provides a programming framewrok work wave function methods
in quantum chemistry.""" in quantum chemistry."""
maintainer: ["Anthony Scemama <scemama@irsamc.ups-tlse.fr>"] maintainer: ["Anthony Scemama <scemama@irsamc.ups-tlse.fr>"]
authors: ["Anthony Scemama <scemama@irsamc.ups-tlse.fr>"] authors: ["Anthony Scemama <scemama@irsamc.ups-tlse.fr>"]
license: "LGPL-2.1+ with OCaml linking exception" license: "LGPL-2.1-or-later"
homepage: "https://gitlab.com/scemama/qcaml" homepage: "https://gitlab.com/scemama/qcaml"
doc: "https://gitlab.com/scemama/qcaml" doc: "https://gitlab.com/scemama/qcaml"
bug-reports: "https://gitlab.com/scemama/qcaml/issues" bug-reports: "https://gitlab.com/scemama/qcaml/issues"
@ -20,7 +20,6 @@ depends: [
"zarith" "zarith"
"alcotest" "alcotest"
"domainslib" "domainslib"
"landmarks-ppx" {dev & >= "1.4"}
"odoc" {with-doc} "odoc" {with-doc}
] ]
build: [ build: [

View File

@ -1,92 +0,0 @@
#+TITLE: QCaml
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Main QCaml entry point"
#+end_src
#+RESULTS: synopsis
: Main QCaml entry point
* File generation :noexport:
Use [C-c C-c] on the code below. This will create the dune files
and the =qcaml.ml= file.
#+header: :noweb yes
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var mlfile="lib/qcaml.ml"
#+header: :var dunetest="test/dune"
#+header: :var dependencies=dependencies
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
excluded_modules = [ "top" ]
dependencies = '\n '.join([x[0] for x in dependencies if x[0].replace("qcaml.","") not in excluded_modules])
with open(dune,'w') as f:
f.write(f"""
(library
(name qcaml)
(public_name qcaml)
(synopsis {synopsis} )
(libraries
{dependencies}
)
(instrumentation (backend landmarks))
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_qcaml)
(synopsis "Test for qcaml library")
(libraries
alcotest
qcaml
)
)
""")
with open(mlfile,'w') as f:
s = dependencies.split()
s = [x.replace("qcaml.","") for x in s ]
s = [x.capitalize() for x in s]
s = [ f"module {x} = {x}\n" for x in s ]
s = ''.join(s)
f.write("(* Auto-generated by qcaml/README.org *)\n")
f.write(s)
#+end_src
#+name: dependencies
#+begin_src sh :output value
grep "public_name" ../*/lib/dune | grep -v "qcaml)" | cut -d ' ' -f 3 | tr ')' ' '
#+end_src
#+RESULTS: dependencies
| qcaml.ao |
| qcaml.common |
| qcaml.gaussian |
| qcaml.gaussian_integrals |
| qcaml.linear_algebra |
| qcaml.mo |
| qcaml.operators |
| qcaml.particles |
| qcaml.perturbation |
| qcaml.simulation |
| qcaml.top |

View File

@ -1,91 +0,0 @@
#+TITLE: Simulation
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Data describing a simulation (AOs, operators, nuclear coordinate,...)"
#+end_src
#+RESULTS: synopsis
: Data describing a simulation (AOs, operators, nuclear coordinate,...)
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+header: :var dune="lib/dune"
#+header: :var dunetest="test/dune"
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open(dune,'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
<<dependencies>>
<<noimplementation>>
<<c-files>>
)
<<lex-yacc>>
""")
with open(dunetest,'w') as f:
f.write(f"""
(library
(name test_{name})
(synopsis "Test for {name} library")
(libraries
alcotest
qcaml.{name}
)
)
""")
#+end_src
** Dependencies
#+name: dependencies
#+begin_src elisp
(libraries
qcaml.common
qcaml.particles
qcaml.gaussian
qcaml.gaussian_integrals
qcaml.operators
qcaml.ao
)
(instrumentation (backend landmarks))
#+end_src
** Modules without implementation
#+name: noimplementation
#+begin_src elisp
#+end_src
** Extra C files
#+begin_src elisp
#+end_src
** Parser files
#+name: lex-yacc
#+begin_src elisp
#+end_src

View File

@ -1,43 +0,0 @@
#+TITLE: Top-level
#+SETUPFILE: ../docs/theme.setup
* Summary
#+name: synopsis
#+begin_src ocaml :exports none :results value
"Installs pretty printers for top-level"
#+end_src
#+RESULTS: synopsis
: Installs pretty printers for top-level
* Dune files :noexport:
** Generate dune files
Use [C-c C-c] on the code below to create the output for the dune files
#+header: :noweb strip-export
#+header: :var name=(file-name-directory buffer-file-name)
#+begin_src python :exports none :results output none
name = name.split('/')[-2]
synopsis = """
<<synopsis>>
"""
with open("lib/dune",'w') as f:
f.write(f"""
(library
(name {name})
(public_name qcaml.{name})
(synopsis {synopsis} )
(modes byte)
(libraries
compiler-libs.toplevel
qcaml
)
(instrumentation (backend landmarks))
)
""")
#+end_src

View File

@ -1,73 +0,0 @@
#+begin_src elisp tangle: no :results none :exports none
(setq pwd (file-name-directory buffer-file-name))
(setq name (file-name-nondirectory (substring buffer-file-name 0 -4)))
(setq lib (concat pwd "lib/"))
(setq testdir (concat pwd "test/"))
(setq mli (concat lib name ".mli"))
(setq ml (concat lib name ".ml"))
(setq test-ml (concat testdir name ".ml"))
(org-babel-tangle)
#+end_src
* Intall printers :noexport:
:PROPERTIES:
:header-args: :noweb yes :comments both
:END:
Installs printers in the top-level environment.
All printers are fetched automatically.
#+NAME: raw_printers
#+begin_src sh :results output raw :exports none
grep "val pp " ../*/lib/*.mli \
| cut -d ":" -f 1 \
| sed 's|^../||' \
| sed 's|.mli||' \
| sed 's|/lib/| |' \
| sed 's/[^ ]*/\u&/g' \
| sed 's| |.|' \
| grep -v Top.Install_printers
#+end_src
#+NAME: printers
#+begin_src python :results output raw :var p=raw_printers :exports none
result = []
for l in p.split():
dir, module = l.split('.')
if dir == module:
e = f'"{module}.pp" ;'
else:
e = f'"{dir}.{module}.pp" ;'
result.append(e)
result = '\n'.join(result)
print(result)
#+end_src
#+begin_src ocaml :tangle (eval ml) :exports none
let printers =
[
<<printers()>>
]
let eval_exn str =
let lexbuf = Lexing.from_string str in
let phrase = !Toploop.parse_toplevel_phrase lexbuf in
Toploop.execute_phrase false Format.err_formatter phrase
let rec install_printers = function
| [] -> eval_exn "#require \"lacaml.top\";;"
| printer :: printers ->
let cmd = Printf.sprintf "#install_printer %s;;" printer in
eval_exn cmd && install_printers printers
let () =
if not (install_printers printers) then
Format.eprintf "Problem installing QCaml-printers@."
#+end_src

View File

@ -3,11 +3,12 @@
(name top) (name top)
(public_name qcaml.top) (public_name qcaml.top)
(synopsis (synopsis
"Installs pretty printers for top-level." "Installs pretty printers for top-level"
) )
(modes byte) (modes byte)
(libraries (libraries
compiler-libs.toplevel compiler-libs.toplevel
qcaml qcaml
) )
(instrumentation (backend landmarks))
) )

View File

@ -1,35 +1,5 @@
(* [[file:~/QCaml/top/install_printers.org::*Intall printers][Intall printers:3]] *)
let printers = let printers =
[ [
"Ao.Basis.pp" ;
"Ao.Basis_gaussian.pp" ;
"Common.Angular_momentum.pp" ;
"Common.Bitstring.pp" ;
"Common.Charge.pp" ;
"Common.Coordinate.pp" ;
"Common.Powers.pp" ;
"Common.Range.pp" ;
"Common.Spin.pp" ;
"Common.Zkey.pp" ;
"Gaussian.Atomic_shell.pp" ;
"Gaussian.Atomic_shell_pair.pp" ;
"Gaussian.Atomic_shell_pair_couple.pp" ;
"Gaussian.Basis.pp" ;
"Gaussian.Contracted_shell.pp" ;
"Gaussian.General_basis.pp" ;
"Linear_algebra.Matrix.pp" ;
"Mo.Basis.pp" ;
"Mo.Class.pp" ;
"Mo.Fock.pp" ;
"Mo.Frozen_core.pp" ;
"Mo.Hartree_fock.pp" ;
"Mo.Localization.pp" ;
"Particles.Electrons.pp" ;
"Particles.Element.pp" ;
"Particles.Nuclei.pp" ;
"Particles.Zmatrix.pp" ;
"Perturbation.Mp2.pp" ;
"Simulation.pp" ;
] ]
@ -48,4 +18,4 @@ let rec install_printers = function
let () = let () =
if not (install_printers printers) then if not (install_printers printers) then
Format.eprintf "Problem installing QCaml-printers@." Format.eprintf "Problem installing QCaml-printers@."
(* Intall printers:3 ends here *)