Skip to main content

No project description provided

Project description

Author:

Lukas Turcani

Introduction

moldoc is a Sphinx extension for making better chemistry documentation. It allows you to embed 3D, interactive models of molecules directly into your compiled docs. You can see it being used in the stk docs.

moldoc.gif

Installation

First, run

pip install moldoc

and then add it to your extensions in conf.py

extensions = [
    'moldoc',
]

Adding Molecules into Your Docs

You can define molecules you show with the moldoc directive, which you can place it into your rst files

.. moldoc::

    # The content of a moldoc directive is just a Python script
    # which needs to define a moldoc_display_molecule variable.

    import moldoc.molecule as molecule

    moldoc_display_molecule = molecule.Molecule(
        atoms=(
            # molecule.Atom(atomic_number, position)
            molecule.Atom(6, (-0.06, -0.17, 0.)),
            molecule.Atom(17, (-1.35, 1.04, -0.04)),
            molecule.Atom(35, (1.65, 0.73, -0.06)),
            molecule.Atom(1, (-0.15, -0.88, -0.87)),
            molecule.Atom(1, (-0.09, -0.72, 0.97)),
        ),
        bonds=(
            # molecule.Bond(atom1_id, atom2_id, order)
            molecule.Bond(0, 1, 1),
            molecule.Bond(0, 2, 1),
            molecule.Bond(0, 3, 1),
            molecule.Bond(0, 4, 1),
        ),
    )

or in your Python docstrings

def some_fn():
    """
    Do something.

    .. moldoc::

        # The content of a moldoc directive is just a Python script
        # which needs to define a moldoc_display_molecule variable.

        import moldoc.molecule as molecule

        moldoc_display_molecule = molecule.Molecule(
            atoms=(
                # molecule.Atom(atomic_number, position)
                molecule.Atom(6, (-0.06, -0.17, 0.)),
                molecule.Atom(17, (-1.35, 1.04, -0.04)),
                molecule.Atom(35, (1.65, 0.73, -0.06)),
                molecule.Atom(1, (-0.15, -0.88, -0.87)),
                molecule.Atom(1, (-0.09, -0.72, 0.97)),
            ),
            bonds=(
                # molecule.Bond(atom1_id, atom2_id, order)
                molecule.Bond(0, 1, 1),
                molecule.Bond(0, 2, 1),
                molecule.Bond(0, 3, 1),
                molecule.Bond(0, 4, 1),
            ),
        )

    """

    print('In some_fn()')

Note that the content in the moldoc directive is a just a Python script, which has to define a moldoc_display_molecule variable holding a moldoc.molecule.Molecule instance.

Because the content of a moldoc directive is just a Python script you can define your molecules programatically

def some_fn():
    """
    Do something.

    .. moldoc::

        # The content of a moldoc directive is just a Python script
        # which needs to define a moldoc_display_molecule variable.

        import moldoc.molecule as molecule

        atoms = [molecule.Atom(6, (i, 0., 0.)) for i in range(10)]
        bonds = [molecule.Bond(i-1, i, 1) for i in range(1, 10)]

        moldoc_display_molecule = molecule.Molecule(
            atoms=atoms,
            bonds=bonds,
        )

    """

    print('In some_fn()')

Configuration

Global

You can use the moldoc_default_molecule_config to set the default MoleculeConfig value for all renderings. This is defined in conf.py:

import moldoc.molecule as molecule
moldoc_default_molecule_config = molecule.MoleculeConfig(
    background_color=molecule.Color(32, 32, 32),
)

Local

The display of molecules is pretty configurable, here is a snapshot of the different configuration options you have, but note that this is not an exhaustive list

configuration.jpg

Configuration happens on both the molecule and the atom level. For example

.. moldoc::

    # The content of a moldoc directive is just a Python script
    # which needs to define a moldoc_display_molecule variable.

    import moldoc.molecule as molecule

    atoms = [
        molecule.Atom(
            atomic_number=6,
            position=(i, 0., 0.),
            # Configure the atom size and color.
            config=molecule.AtomConfig(
                color=molecule.Color(
                    red=255,
                    green=0,
                    blue=0,
                ),
                size=1.2,
            ),
        ) for i in range(10),
    ]
    bonds = [molecule.Bond(i-1, i, 1) for i in range(1, 10)]

    moldoc_display_molecule = molecule.Molecule(
        atoms=atoms,
        bonds=bonds,
        config=molecule.MoleculeConfig(
            atom_scale=1,
            material=molecule.MeshStandardMaterial(),
            background_color=molecule.Color(0, 255, 0),
            is_outlined=False,
        ),
    )

Note that there are many materials to choose from, and that each has its own set of configuration options. You can see the materials and their configuration options in src/moldoc/molecule.py. Note that the materials correspond to classes in THREE.js, for example https://threejs.org/docs/#api/en/materials/MeshStandardMaterial, so if you wish to understand the configuration options of each material the THREE.js docs are the place to look. Most should be straighforward to understand from the name however.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moldoc-3.0.1.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

moldoc-3.0.1-py3-none-any.whl (219.7 kB view details)

Uploaded Python 3

File details

Details for the file moldoc-3.0.1.tar.gz.

File metadata

  • Download URL: moldoc-3.0.1.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for moldoc-3.0.1.tar.gz
Algorithm Hash digest
SHA256 98f7855e81e99c5e9ca2db06dfb86d5266518f8986d5b18731e42cf0a840c18d
MD5 2e7b2cf37278aeabf905f8010efb6e53
BLAKE2b-256 faf3f6ee131b083606ffed46ebc240509376c32ec6668a9ed3efdd660a57fc69

See more details on using hashes here.

File details

Details for the file moldoc-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: moldoc-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 219.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for moldoc-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a0e57455a81d585b83e9313f6221a7f20df0c51a142f44ba8f2b614af18bd87
MD5 542efc00c2444bbae6723a28b2bf4341
BLAKE2b-256 b2f7b42fe976f13c94f50c5f02105beb2f7a8420753052ee4578c4e10b4eae8f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page