.. _glossary:

========
Glossary
========

.. glossary::

    Attribute
        A specific type of :term:`value <Value>` that is associated with each
        :term:`simulant <Simulant>`. For example, each simulant may have an attribute 
        to describe their age or position. These are computed by :term:`attribute pipelines <Attribute Pipeline>`
        and stored in the :term:`population state table <Population State Table>`.

    Attribute Pipeline
        A specific type of :term:`pipeline <Pipeline>` whose callable must accept
        a :term:`simulant <Simulant>` index and return tabular data of
        :term:`attributes <Attribute>` for those simulants.

    Component
        Any self-contained piece of code that can be plugged into the
        simulation to add some functionality. In ``vivarium`` we typically
        think of components as encapsulating and managing some behavior or
        :term:`attributes <Attribute>` of the :term:`simulants <Simulant>`.

    Configuration
        The configuration is a set of parameters a user can modify to
        adjust the behavior of :term:`components <Component>`.  Components
        themselves may provide defaults for several configuration parameters.

    Metrics
        Simulation outputs, often used interchangeably with "results".

    Model Specification
        A complete description of a ``vivarium`` model. This description
        details all :term:`plugins <Plugin>`, :term:`components <Component>`,
        and :term:`configuration <Configuration>` required to run the model.
        A model specification is stored in a yaml model specification file
        which is parsable by the simulation framework.

    Pipeline
        A ``vivarium`` value pipeline.  A pipeline is a framework tool that
        allows users to dynamically construct and share data across several
        :term:`components <Component>`. See also: :term:`Attribute Pipeline`.

    Plugin
        A plugin is a python class intended to add additional functionality
        to the core framework.  Unlike a normal :term:`component <Component>`
        which adds new behaviors and :term:`attributes <Attribute>` to
        :term:`simulants <Simulant>`, a plugin adds new services to the
        framework itself.  Examples might include a new simulation clock,
        a results handling service, or a logging service.

    Population State Table
        The core representation of the population in the simulation. Often referred
        to as simply the "state table", it consists of a row for each :term:`simulant <Simulant>` 
        and a column for each :term:`attribute <Attribute>`.

    Private Column
        The source of a corresponding :term:`attribute pipeline <Attribute Pipeline>`.
        Only the :term:`component <Component>` that creates a private column has 
        read or write access to it. Note that not all attribute pipelines require 
        private columns as a source, but any private columns created are automatically
        paired with an attribute pipeline of the same name.

    Public Column
        A column in the :term:`population state table <Population State Table>` that 
        is generated by an :term:`attribute pipeline <Attribute Pipeline>` and is 
        read-accessible by all :term:`components <Component>`.
        
    Simulant
        An individual or agent. One member of the population being simulated.

    Value
        A dynamic variable in the simulation that is computed by a :term:`pipeline <Pipeline>` 
        and can be shared across multiple :term:`components <Component>`.
