Shark directory layout
======================

The below diagram gives an overview over the Shark directory structure
after *having extracted the source code package of shark*.

.. note::
   The locations and/or contents of the listed folders may
   differ for the pre-compiled binary packages and installers. The contents
   of the ``include/`` folder however, are the same across all installation
   packages.

.. image:: ../images/shark_directory_structure.png
  :height: 600px
  :target: ../../../_images/shark_directory_structure.png
  :alt: Shark directory structure after installing from source.

The ``include/`` folder's structure well mirrors the Shark library's design
choices:

* The ``Core/`` Folder provides basic interfaces and functionality
  for math and other utility functions in shark.
* In ``LinAlg/``, basic vector and matrix functionality is implemented
  (e.g., by wrapping the Boost C++ uBLAS libraries).
* The ``Data/`` folder for example provides import/export routines,
  and also sets up a :doxy:`Data` class especially suited for
  machine learning tasks: subsets (e.g., for cross-validation) are
  lazy copies of the original set.
* The folders `Rng/`` and ``Statistics/``
  implement specialized functionality for random number generation, and various
  statistical tests or distributions, respectively.

* Currently, the only algorithms implemented in the folder ``Unsupervised/``
  are Restricted Boltzmann machines, but this will be expanded in the future.

* Finally, one of the most important design aspects of Shark is the
  ``"Model"``-``"ObjectiveFunction"``-``"Optimizer"`` trias. This can be seen as roughly
  corresponding to the three remaining folders ``Models/``, ``ObjectiveFunctions/``,
  and ``Algorithms/``
