abinit/doc/README.md

5.3 KiB

Getting started with mkdocs

!!! warning

The code supports py2.7 and python3.6 but py3k is **strongly** suggested
especially when building the final version before deploying
as py3k has native support for unicode.

In addition, all the commands should be run in the top abinit directory (so one level above /doc)

Install the python packages required to build the static website with:

pip install -r requirements.txt

then install the mkdocs plugin with:

cd abimkdocs_plugin
python setup.py install

If you use conda, you may want to create a new environment based on python3.6 with:

conda create -n abinit-abimkdocs-2 python=3.6
source activate abinit-abimkdocs

and then install the packages with pip (see above commands).

MkDocs comes with a built-in dev-server that lets you preview your documentation as you work on it. Make sure you are in ~abinit, and then start our customized server by running the mksite.py serve command with the --dirtyreload option:

$ ./mksite.py serve --dirtyreload
Regenerating database...
Saving database to /Users/gmatteo/git_repos/abidocs/doc/tests/test_suite.cpkl
Initial website generation completed in 9.17 [s]
Generating markdown files with input variables of code: `abinit`...
...
...
INFO    -  Building documentation...
INFO    -  Cleaning site directory
[I 170826 03:37:05 server:283] Serving on http://127.0.0.1:8000
[I 170826 03:37:05 handlers:60] Start watching changes
[I 170826 03:37:05 handlers:62] Start detecting changes

Open up http://127.0.0.1:8000/ in your browser, and you'll see the default home page being displayed.

Use:

$ ./mksite.py --help

to get the list of commands and:

$ ./mksite.py COMMAND --help

to get the documentation of COMMAND.

Notes

topics are still in Yaml format wikilink syntax: [ [names|text] ] will become [ [text|namespace] ] .

Troubleshooting

If you get error message about ASCII being used as default encoding on your machine add:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

to your ~/.bashrc and source it

How to add new variables

The yaml database has been replaced by python modules. The variables are now declared in ~abinit/abimkdocs/variables_CODENAME.py.

This file consists of a list of dictionaries, each dictionary contains the declaration of a single variable and the associated documentation in markdown format. Wikilinks, latex and markdown extensions can be used inside text. This is, for example, the declaration of the accuracy variable in python:

Variable(
    abivarname="accuracy",
    varset="basic",
    vartype="integer",
    topics=['Planewaves_basic', 'SCFControl_basic'],
    dimensions="scalar",
    defaultval=0,
    mnemonics="ACCURACY",
    text="""
Allows to tune the accuracy of a calculation by setting automatically the
variables according to the following table:

accuracy         | 1         | 2          | 3            | 4            | 5         | 6
---              |---        |---         |---           |---           |---        |---
[[ecut]]         | E_min     | E_med      | E_med        | E_max        | E_max     | E_max
[[pawecutdg]]    | ecut      | ecut       | 1.2 * ecut   | 1.5 * ecut   | 2 * ecut  | 2 * ecut
[[fband]]        | 0.5       | 0.5        | 0.5          | 0.5          | 0.75      | 0.75
...

For a parallel calculation, [[timopt]] is enforced to be 0.
...
""",
),

Adding a new variable is easy. Edit the python module and add a new item at the end of the list. A template is provided ...

How to add a new bibtex entry

Citations must be in bibtex format and provide enough information so that the python code can generate appropriated links in the website. For published work with a DOI, we strongly recommend avoiding a cut&paste from your bibtex files (there are units tests to enforce the presence of particular entries in the bibtex document and your bibtex may not fullfill these requirements).

A much better solution is to use BetterBib and the DOI of the article to fetch data from Crossref and produce the bibtex entry. BetterBib is available from the Python Package Index, so simply type:

pip install betterbib

and then use doi2bibtex from the command line:

doi2bibtex 10.1103/PhysRevLett.96.066402

Add the entry to the bibtex file and use the FirstAuthorYear convention for the key (make sure it's not a duplicated entry). Note that the bibtex ID must be of the form "FirstauthornameYEAR", e.g. "Amadon2008" (start with an uppercase letter, then lower case, then four-digit year). Possibly, a letter might be added in case of ambiguity: e.g. there exists also Amadon2008a Then, build the HTML pages using mksite.py serve.

Run the tests in ./tests/test_bibtex.py with pytest (see next section) to validate your changes.

Running the unit tests

Unit tests are located in the ./tests directory. To execute the tests, install pytest with:

pip install pytest

and then:

pytest -v ./tests/

Use

pytest -v ./tests/test_variables.py

to execute a particular module.

Build the website with:

./mksite.py build

then use

linkchecker site/index.html > links.err

!!! important

For the time being, linkchecker python2.7