###############
Experiment ID's
###############

Autosubmit 4 uses a SQLite database to automatically generate unique
experiment ID’s. The ID’s of Autosubmit experiments start from ``a000``
and have at least four alpha-numerical characters, using digits from
``0`` to ``9`` and the ``26`` letters from the English alphabet, from ``a``
to ``z``.

Internally, experiment ID’s are case insensitive, but for Autosubmit
commands this may not always be true, i.e. ``autosubmit monitor a000``
works for the experiment ``a000``, but not ``autosubmit monitor A000``,
even though internally both ``a000`` and ``A000`` would be stored the same
way in the SQLite database.

That is because experiment ID’s are treated as Base-36 strings, being
first decoded into integers with Base-36 (where ``a`` and ``A`` are both equal
to ``10``, ``b`` and ``B`` equal to ``11``, etc. — ``int('a', 36)`` in Python).

Autosubmit provides functions that could be used by external code to produce
a new experiment, or to simply calculate the next experiment ID, given the
last available experiment ID. The code below shows an example of the latter:

.. code-block:: python

    from autosubmit.experiment.experiment_common import next_experiment_id

    expid = next_experiment_id('a000’)
    print(expid)  # prints 'a001’

    expid = next_experiment_id('jedi’)
    print(expid)  # prints 'jedj’

    expid = next_experiment_id('zzzz’)
    print(expid)  # prints '10000’

To generate the next experiment ID, the decoded integer value is incremented
by ``1``, and then re-encoded as a Base-36 string. For example, ``a000`` is decoded
as ``466560``, so the next ID is calculated as ``466560 + 1 = 466561``. Finally,
``466561`` is re-encoded as Base-36, resulting in ``a001``.

After the default initial experiment ID ``a000``, the next generated experiment
ID is ``a001``, and it keeps being increased automatically by Autosubmit from
``a001``, to ``a002``, ``a003``, …, ``azzz`` and then the next experiment ID ``b000``.

And the process repeats every time users ask Autosubmit to create a new
experiment.

Users can create “test experiments” which experiment ID’s start at ``t001``,
and “operational experiments” which experiment ID’s start at ``o001``.
This is done via flags passed to the ``autosubmit expid`` in the command-line.

There is no other way for users to modify the automatic generation of
experiment ID’s in Autosubmit (other than manually editing the SQLite database).

The total number of available unique experiment ID’s in Autosubmit with four
characters is ``1213055`` experiment ID’s (the difference between ``a000`` and
``zzzz`` Base-36 decoded as integers). After the experiment ``zzzz``, the next
experiment ID generated by Autosubmit would be ``10000``, followed by ``10001``,
``10002``, and so on successfully.
